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