袁顯明
摘 要:針對系留氣球遠(yuǎn)程監(jiān)控終端的需求,設(shè)計了一種基于MODBUS TCP通信協(xié)議的監(jiān)控系統(tǒng)。文章詳細(xì)描述了MODBUS TCP通信協(xié)議的技術(shù)細(xì)節(jié),并利用其開發(fā)了遠(yuǎn)程監(jiān)控客戶端,通過與系留氣球測控裝置PLC通信,實(shí)現(xiàn)了球體參數(shù)的采集、顯示及執(zhí)行機(jī)構(gòu)的控制,同時將系統(tǒng)的運(yùn)行數(shù)據(jù)保存到Access數(shù)據(jù)庫中備查。
關(guān)鍵詞:系留氣球;MODBUS? TCP協(xié)議;遠(yuǎn)程監(jiān)控系統(tǒng)
中圖分類號:TP277 文獻(xiàn)標(biāo)識碼:A 文章編號:1674-1064(2020)08-0025-02
系留氣球作為一種依靠凈浮力升空的浮空飛行器,在地面錨泊狀態(tài)下,仍需監(jiān)控囊體壓力,確保球體安全。針對系留氣球地面錨泊的特點(diǎn),研制了一套以PLC為核心的監(jiān)控設(shè)備,代替原有系統(tǒng)完成囊體壓力的監(jiān)控與調(diào)節(jié),以延長球載設(shè)備的電氣壽命。為方便監(jiān)控人員實(shí)時了解球體狀態(tài),需設(shè)計一套遠(yuǎn)程監(jiān)控終端,以實(shí)現(xiàn)囊體壓力的遠(yuǎn)程監(jiān)控與調(diào)節(jié)[1-2]。遠(yuǎn)程監(jiān)控終端應(yīng)具備如下功能:
終端設(shè)備安裝在遠(yuǎn)距離的地面測控中心,能夠穩(wěn)定地與PLC通信實(shí)現(xiàn)信息的交互。
操作員能夠在地面測控中心實(shí)時監(jiān)控囊體壓力和風(fēng)機(jī)的工作狀態(tài),并將數(shù)據(jù)保存到數(shù)據(jù)庫以備后續(xù)審查。操作員能夠控制球載風(fēng)機(jī)的開啟和關(guān)閉,系統(tǒng)要提供必要的聲音報警和視覺信號報警。系統(tǒng)需具備較高的可靠度等級,能長期穩(wěn)定的工作。
文章主要介紹了一種通過網(wǎng)口通信實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)距離傳輸和控制的監(jiān)控系統(tǒng),該系統(tǒng)能較好地完成系留氣球遠(yuǎn)程監(jiān)控終端的任務(wù),并具有較強(qiáng)的抗干擾能力和擴(kuò)展性。
1 系統(tǒng)原理
1.1 系統(tǒng)結(jié)構(gòu)
由于錨泊車和地面測控中心之間的布線距離較遠(yuǎn),為保證信號的穩(wěn)定傳輸,在PLC和工控機(jī)間增設(shè)一對光纖收發(fā)器,將電信號轉(zhuǎn)換為光信號,實(shí)現(xiàn)數(shù)據(jù)的遠(yuǎn)距離傳輸,如圖1所示。文章主要討論P(yáng)LC與地面測控中心工控機(jī)間MODBUS TCP通信的設(shè)計與實(shí)現(xiàn)。
1.2 MODBUS TCP協(xié)議
MODBUS TCP/IP應(yīng)用層協(xié)議的PDU與基于串行鏈路的MODBUS協(xié)議相同,區(qū)別在于ADU的結(jié)構(gòu)中引入了MBAP報文頭。由于采用TCP/IP協(xié)議,各個通信設(shè)備已經(jīng)分配了IP地址,MBAP報文頭中單元標(biāo)示符取代了MODBUS串行鏈路上的地址域,從而用于通過網(wǎng)橋和網(wǎng)關(guān)等設(shè)備的通訊。TCP協(xié)議是建立可靠數(shù)據(jù)連接的傳輸協(xié)議,可以保證數(shù)據(jù)包傳輸?shù)臄?shù)據(jù)完整性,所以在基于TCP/IP的MODBUS協(xié)議的ADU中,不需要串行鏈路中使用的數(shù)據(jù)校驗(yàn)域,如圖2所示。
MODBUS TCP協(xié)議的功能碼以MODBUS設(shè)備間互用性劃分為不同的等級。本系統(tǒng)主要使用到等級0和等級1的功能。等級0代表普遍使用且總體一致的功能;等級1代表有用的功能,但帶有某些特性。
2 系統(tǒng)實(shí)現(xiàn)
2.1 硬件設(shè)計
光纖收發(fā)器提供1路速度為10/100M自適應(yīng)的以太網(wǎng)接口,工作波長分別為1310nm和1550nm,實(shí)現(xiàn)在一根單模光纖上信號的雙向傳輸。PLC為系統(tǒng)核心部件,通過AD和DI模塊對模擬量信號和數(shù)字量信號進(jìn)行采集,通過DO模塊驅(qū)動受控設(shè)備進(jìn)行動作。PLC通過以太網(wǎng)端口與遠(yuǎn)程工控機(jī)進(jìn)行通信,同時接受監(jiān)控軟件的控制指令。工控機(jī)作為系統(tǒng)的控制中樞,選用標(biāo)準(zhǔn)機(jī)架式工控機(jī),滿足命令響應(yīng)、數(shù)據(jù)處理、存儲和顯示等功能的需求。采用單色報警燈,并帶有蜂鳴器,監(jiān)控軟件通過工控機(jī)的DO口驅(qū)動報警器發(fā)出聲光報警。
2.2 軟件設(shè)計
本系統(tǒng)監(jiān)控軟件使用C++語言開發(fā),實(shí)現(xiàn)參數(shù)采集、設(shè)備控制和數(shù)據(jù)的存儲與查詢功能。軟件主要包含數(shù)據(jù)通信、數(shù)據(jù)處理和數(shù)據(jù)庫等三個單元。
監(jiān)控軟件通過MODBUS TCP協(xié)議功能6(寫單個保持寄存器)向PLC寫入控制指令。如副氣囊風(fēng)機(jī)狀態(tài)字保存在MODBUS地址為4X10022的保持寄存器中,狀態(tài)字為1時風(fēng)機(jī)開啟,狀態(tài)字為0時風(fēng)機(jī)關(guān)閉。
開啟副氣囊風(fēng)機(jī)的指令格式如圖3所示。
關(guān)閉副氣囊風(fēng)機(jī)的指令格式如圖4所示。
參照副氣囊風(fēng)機(jī)的指令格式,可寫入其他執(zhí)行機(jī)構(gòu)的控制指令。編寫完成控制指令數(shù)據(jù)包TxData[]后,通過客戶端的Socket通道向PLC發(fā)送數(shù)據(jù),通信周期為500ms。
ClientSocket->Socket->SendBuf(&TxData,sizeof(TxData));
監(jiān)控軟件通過MODBUS TCP協(xié)議功能3(讀單個或多個保持寄存器)向PLC寫入讀數(shù)據(jù)請求。如讀取MODBUS首地址為4X10000的24個保持寄存器,請求指令格式如圖5所示。
完成請求數(shù)據(jù)包TxData[]后,通過客戶端的Socket通道向PLC發(fā)送數(shù)據(jù);同時通過客戶端Socket通道讀取PLC應(yīng)答數(shù)據(jù)。
ClientSocket->Socket->SendBuf(&TxData,sizeof(TxData));
ClientSocket->Socket->ReceiveBuf(RxData,sizeof(RxData));
讀保持寄存器請求的PLC應(yīng)答數(shù)據(jù)包格式如圖6所示。
監(jiān)控軟件通過調(diào)用庫文件工控機(jī)I-DASK.dll,實(shí)現(xiàn)與數(shù)據(jù)I/O卡的通信。
2.3 數(shù)據(jù)處理
數(shù)據(jù)顯示:監(jiān)控軟件從RJ45接受到的數(shù)據(jù)遵從MODBUS TCP協(xié)議。去除MBAP報文頭、站地址和功能代碼后,余下的為有效字節(jié)。依據(jù)通信協(xié)議對數(shù)據(jù)進(jìn)行解析后顯示在軟件界面上。狀態(tài)顯示:為了避免雷同,使得界面具有更好的美觀性,在對設(shè)備的狀態(tài)進(jìn)行顯示的時候,采用了虛擬LED燈、立體按鈕等不同的視覺表達(dá)方式。數(shù)據(jù)作圖:對囊體壓力參數(shù)顯示采用虛擬儀表的作圖方式,能夠直觀地表達(dá)當(dāng)前壓力狀態(tài)。故障告警:監(jiān)控軟件將解析后的數(shù)據(jù)與告警閾值進(jìn)行比對,若參數(shù)的值超出報警閾值,則生成相應(yīng)的報警信號和報警等級。根據(jù)報警等級在報警信息欄中以黃色或紅色顯示當(dāng)前報警原因,同時輸出兩路高電平控制信號,驅(qū)動報警器和報警燈工作。
2.4 數(shù)據(jù)庫操作
本系統(tǒng)采用Access數(shù)據(jù)庫。Access具有強(qiáng)大的數(shù)據(jù)處理、統(tǒng)計分析能力,利用Access的查詢功能,可以方便地進(jìn)行各類匯總、平均統(tǒng)計。軟件使用ADOTable組件訪問數(shù)據(jù)庫,開發(fā)人員通過代碼進(jìn)行數(shù)據(jù)庫的動態(tài)連接。
ADOTable組件只能使用字段編輯器來決定使用的字段是哪些,無法對數(shù)據(jù)庫下達(dá)SQL命令。要連接數(shù)據(jù)庫,又要對數(shù)據(jù)庫下命令需使用ADOQuery組件。ADOQuery組件與ADOTable組件一樣,使用ConnectionString屬性連接數(shù)據(jù)庫,在連接數(shù)據(jù)庫后通過SQL屬性取回數(shù)據(jù)。在設(shè)置SQL屬性之前,不可以將ADOTable組件的Active屬性設(shè)置為True。
軟件使用SQL語言進(jìn)行數(shù)據(jù)的查詢操作。SQL語言是關(guān)系型數(shù)據(jù)庫中的標(biāo)準(zhǔn)化查詢語言,能夠?qū)δ繕?biāo)數(shù)據(jù)庫完成數(shù)據(jù)定義、數(shù)據(jù)查詢和數(shù)據(jù)控制等操作。SQL查詢命令如下:
Select 數(shù)據(jù)字段 From 表 where 限制條件1 and 限制條件2...
DataSource組件是ADOTable組件與其他具有數(shù)據(jù)感知能力的數(shù)據(jù)庫組件的溝通橋梁。通過DataSource組件才可以取得數(shù)據(jù)庫文件內(nèi)的數(shù)據(jù)字段。
數(shù)據(jù)庫感知組件通過與DataSource組件的連接,取得數(shù)據(jù)庫中的記錄,并將其顯示出來。該軟件通過ADOQuery組件和SQL命令篩選出數(shù)據(jù)表中數(shù)據(jù)后,數(shù)據(jù)感知組件DBGird和DBEdit將數(shù)據(jù)內(nèi)容顯示出來,實(shí)現(xiàn)歷史記錄的查詢。
3 結(jié)語
針對系留氣球遠(yuǎn)程監(jiān)控終端的需求,設(shè)計了上文所述的監(jiān)控系統(tǒng)。該系統(tǒng)運(yùn)行穩(wěn)定,具有數(shù)據(jù)采集、傳輸、處理準(zhǔn)確及時,實(shí)時性好,抗干擾能力強(qiáng),軟件界面簡潔明了,操作簡單等優(yōu)點(diǎn)。
參考文獻(xiàn)
[1] 楊天祥,曾騰輝,楊瀟文.系留氣球測控系統(tǒng)設(shè)計[J].測控技術(shù),2016,35(3):12.
[2] 唐黎江.機(jī)動式系統(tǒng)氣球測控系統(tǒng)軟件設(shè)計與實(shí)現(xiàn)[J].機(jī)械與電子,2013(2):23.