艾 博,許向陽,賈月明
(中國電子科技集團公司第四十五研究所,北京100176)
在數(shù)據(jù)采集和監(jiān)視控制系統(tǒng)(SCADA)中,Modbus通常用來連接監(jiān)控計算機和遠(yuǎn)程終端控制系統(tǒng),因其開放、集成方便等特點,如今成為工業(yè)領(lǐng)域全球最流行的通信協(xié)議[1-3]。為實現(xiàn)液氮補給裝置自動控制,需實時采集和監(jiān)視液氮杜瓦罐內(nèi)的溫度、液位及周邊氧氣濃度數(shù)據(jù),并將采集結(jié)果發(fā)送給上位機。
本設(shè)計的數(shù)據(jù)采集平臺是基于RS-485總線和Modbus RTU協(xié)議,通過ADAM4117獲取各傳感器的模擬量電流值,實現(xiàn)實時監(jiān)測液氮杜瓦罐內(nèi)的溫度值、液氮液位值及裝置周邊的氧氣濃度值。同時,該平臺除具有完成數(shù)據(jù)采集、數(shù)據(jù)分析和處理功能外,還需具有提供數(shù)據(jù)采集接口和人機交互接口的功能。
圖1為液氮補給裝置數(shù)據(jù)采集平臺的設(shè)計示意圖。在本系統(tǒng)設(shè)計中ADAM4117作為系統(tǒng)核心,由ADAM4117的通道0、通道1和通道2獲取溫度傳感器、液位傳感器和氧氣傳感器實時反饋的數(shù)據(jù),并通過串口Modbus RTU協(xié)議與上位機通信,在上位機軟件實現(xiàn)3個通道的數(shù)據(jù)采集、分析和處理。
圖1 數(shù)據(jù)采集系統(tǒng)設(shè)計示意圖
其中,ADAM4117是16位A/D、8通道的模擬量輸入模塊,可以采集電壓、電流等模擬量輸入信號,并且為所有通道提供了獨立的可編程的輸入范圍。在工業(yè)測量和監(jiān)控的應(yīng)用中,ADAM4117具有良好的性價比。它不僅能夠用于惡劣的環(huán)境中,而且還具有更加堅固型的設(shè)計。本系統(tǒng)中ADAM4117設(shè)置為采集4~20 mA電流量程,將電流信號轉(zhuǎn)換為RS-485信號,傳輸?shù)缴衔粰C,Modbus協(xié)議讀到的數(shù)值為16進制的整數(shù),數(shù)值從0~65 535,分別對應(yīng)量程的上下限。例如,當(dāng)量程為4~20 mA時,輸入的電流值為12 mA,則讀取到的Modbus數(shù)值為32 767。
Modbus是一種串行通訊協(xié)議,是由Modicon公司于1979年提出,允許多個設(shè)備連接在同一個網(wǎng)絡(luò)上進行通信。本文使用的RTU格式傳輸效率高,在相同速率下具有更大的數(shù)據(jù)流量,得到了廣泛認(rèn)可與使用。Modbus通信是主從通信機制,主機將消息幀發(fā)送給從機,從機在接收到消息后,返回相應(yīng)的應(yīng)答幀,其主從關(guān)系如圖2所示[4]。
圖2 Modbus主從關(guān)系
Modbus RTU消息幀結(jié)構(gòu)如表1所示[5]。本文中讀取ADAM4117輸入寄存器的電流值,使用0x04功能碼控制。
表1 Modbus RTU消息結(jié)構(gòu)
上位機程序在VS2010環(huán)境中編寫,軟件實現(xiàn)流程如圖3所示。
圖3 上位機軟件實現(xiàn)流程圖
//串口控制塊
DCB dcb;/
/串口超時控制參數(shù)
COMMTIMEOUTS timeouts={100,1,500,1,100};
//串口名稱或設(shè)備路徑
m_hComm=CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPE
N_EXISTING,0,NULL);
//獲取串口DCB設(shè)置參數(shù)
GetCommState(m_hComm,&dcb);
//設(shè)置波特率、位、停止位、校驗方式
dcb.BaudRate=9600;dcb.ByteSize=8;
dcb.StopBits=ONESTOPBIT;dcb.Parity=NOPARITY;
//設(shè)置DCB參數(shù)
SetCommState(m_hComm,&dcb);
//設(shè)置超時參數(shù)
SetCommTimeouts(m_hComm,&timeouts)。
ADAM4117的設(shè)備地址為0x01,通過04功能碼讀取輸入寄存器電流數(shù)據(jù)。8通道的模擬量輸入采集電流模擬量輸入信號,通過Modbus寄存器地址40001~40008來讀取CH0~CH7的數(shù)值。以讀取CH0為例,其請求指令如表2所示,返回幀如表3所示。
表2 讀取CH0請求指令
部分代碼如下:
主機向從機發(fā)送信息幀時,將CRC(Cyclic Redundancy Check)校驗碼一并發(fā)送。CRC校驗碼包含2個字節(jié),即16位二進制。CRC校驗碼由主機計算,放置于發(fā)送信息的尾部。從機再重新計算接收到信息的CRC校驗碼,比較計算得到的CRC校驗碼是否與接收到的相符,如果兩者不相符,則表明出錯[6]。計算CRC16校驗碼的函數(shù)如下:
通過RS-485總線將ADAM4117連接到工控機的COM2口,讀取溫度傳感器、液位傳感器和氧氣濃度傳感器數(shù)值,上位機軟件界面如圖4所示。
圖4 軟件界面
打開上位機調(diào)試程序,對ADAM4117通訊進行測試,可以正確讀取ADAM4117返回的電流值,經(jīng)過數(shù)據(jù)處理轉(zhuǎn)換為相對應(yīng)的數(shù)值,如表4所示。
表4 采集的數(shù)據(jù)
本文針對芯片測試設(shè)備的液氮補給自動控制系統(tǒng)的數(shù)據(jù)采集需求,在VS2010環(huán)境下設(shè)計開發(fā)了基于Modbus RTU協(xié)議的數(shù)據(jù)采集平臺,實現(xiàn)上位機與ADAM4117數(shù)據(jù)采集模塊的Modbus協(xié)議通信,采集各傳感器的電流數(shù)據(jù)。經(jīng)過對數(shù)據(jù)采集平臺的測試,軟件運行穩(wěn)定、可靠,能夠?qū)崟r采集讀取各傳感器反饋的數(shù)據(jù)。