張姣姣,李麗宏,陳金兵
(太原理工大學(xué) 信息工程學(xué)院,山西 太原030024)
在環(huán)境監(jiān)測(cè)中,需要做到實(shí)時(shí)監(jiān)控、統(tǒng)一管理,為此需將各分散站點(diǎn)的環(huán)境監(jiān)測(cè)設(shè)備互聯(lián)形成網(wǎng)絡(luò),實(shí)現(xiàn)環(huán)境監(jiān)測(cè)的網(wǎng)絡(luò)化、智能化、人性化。為了節(jié)約成本,提高效率,采用RS485總線做傳輸設(shè)備,Modbus協(xié)議為通信協(xié)議,ARM7系列的微處理器LPC2214為環(huán)境監(jiān)測(cè)儀表的主芯片。
環(huán)境監(jiān)測(cè)系統(tǒng)將Modbus協(xié)議成功地應(yīng)用到ARM7系統(tǒng)中,實(shí)現(xiàn)了經(jīng)典協(xié)議與高效系統(tǒng)的完美結(jié)合。研制了網(wǎng)絡(luò)化的環(huán)境監(jiān)測(cè)系統(tǒng),完成了監(jiān)控中心對(duì)各分散站點(diǎn)的統(tǒng)一監(jiān)測(cè)和管理。
環(huán)境監(jiān)測(cè)系統(tǒng)采用網(wǎng)絡(luò)化模式將各個(gè)分站的信息統(tǒng)一傳送到監(jiān)控中心計(jì)算機(jī)上。上位機(jī)軟件接收到各分站的信息后自動(dòng)分析、處理、顯示和保存,如果分站的采集值超標(biāo)會(huì)產(chǎn)生報(bào)警信號(hào)。系統(tǒng)的整體結(jié)構(gòu)如圖1所示。
圖1系統(tǒng)結(jié)構(gòu)圖Fig.1 Block diagram of system
RS485總線采用EIA/TIA-485標(biāo)準(zhǔn)的2線制電氣接口,該RS485總線具有抗共模干擾能力強(qiáng),多機(jī)通信和組建現(xiàn)場(chǎng)總線網(wǎng)絡(luò)的功能。Modbus協(xié)議是主從式網(wǎng)絡(luò)結(jié)構(gòu),設(shè)置監(jiān)控中心服務(wù)器為主站 (總線上只能有一個(gè)主站),最多可掛接247個(gè)從站。主站可以對(duì)任一從站進(jìn)行查詢和控制,從站只有收到主站的請(qǐng)求時(shí),才會(huì)傳送數(shù)據(jù)。環(huán)境監(jiān)測(cè)儀表采集溫度、濕度、風(fēng)速、風(fēng)向、大氣壓力、雨量等6個(gè)環(huán)境參數(shù),主站會(huì)間隔讀取各個(gè)從站的信息,各從站接收到命令后,把當(dāng)前的環(huán)境信息發(fā)送給主站,主站接收到從站的數(shù)據(jù)校驗(yàn)正確后將信息顯示并保存起來(lái)。
Modbus協(xié)議是由Modicon公司開(kāi)發(fā)的,由于其功能比較完善,容易實(shí)現(xiàn),現(xiàn)已成為通用的工業(yè)標(biāo)準(zhǔn)。不同廠家生產(chǎn)的工業(yè)控制設(shè)備遵循該協(xié)議標(biāo)準(zhǔn)連接成網(wǎng)絡(luò),進(jìn)行集中監(jiān)控[1]。
Modbus串行鏈路協(xié)議是主—從協(xié)議,RTU模式在相同波特率下比ASCII模式有更高的數(shù)據(jù)吞吐量,故環(huán)境監(jiān)測(cè)系統(tǒng)采用RTU模式。在Modbus協(xié)議的串行鏈路上,所有分站的傳輸模式相同。RTU消息幀包括地址域、功能域、數(shù)據(jù)域、CRC校驗(yàn)域。RTU模式是通過(guò)判斷時(shí)間間隔來(lái)區(qū)分字符和報(bào)文幀的,時(shí)長(zhǎng)至少為3.5個(gè)字符時(shí)間的空閑間隔將報(bào)文幀區(qū)分開(kāi)。同時(shí),整個(gè)報(bào)文必須以連續(xù)的字符流發(fā)送,幀內(nèi)2個(gè)字符之間的間隔小于1.5個(gè)字符時(shí)間[2]。表1為RTU報(bào)文幀的結(jié)構(gòu),起始和結(jié)束表示一幀數(shù)據(jù)與另一幀數(shù)據(jù)之間時(shí)間間隔。
表1RTU報(bào)文幀Tab.1 RTU message frame
當(dāng)消息從主設(shè)備發(fā)往從設(shè)備時(shí),從設(shè)備根據(jù)功能碼來(lái)確定執(zhí)行哪種操作,例如讀一個(gè)線圈的狀態(tài),或讀一組寄存器的數(shù)據(jù)內(nèi)容等[3]。當(dāng)從設(shè)備響應(yīng)時(shí),功能碼用來(lái)指示是正?;貞?yīng)或異常回應(yīng)。對(duì)正?;貞?yīng),從設(shè)備僅回應(yīng)相應(yīng)的功能碼;對(duì)異?;貞?yīng),從設(shè)備返回一個(gè)等同于正?;貞?yīng)的代碼,但最高位的值置為邏輯1,比如正常功能碼為“00010101”,在異?;貞?yīng)的情況下回應(yīng)“10010101”[4]。
CRC字段校驗(yàn)整個(gè)報(bào)文的內(nèi)容。無(wú)論單個(gè)字符報(bào)文使用何種奇偶校驗(yàn)方式,均應(yīng)有這種CRC校驗(yàn)。CRC包含2個(gè)8位字節(jié)組成的16位值,并作為報(bào)文的最后字段附加到報(bào)文上,先附加低字節(jié),再附加高字節(jié)。
發(fā)送設(shè)備計(jì)算CRC值,并附加到報(bào)文幀上。接收設(shè)備在接收?qǐng)?bào)文過(guò)程中,重新計(jì)算CRC值,并將計(jì)算值與接收到的實(shí)際CRC值相比較。若兩個(gè)值不相等,則表示出現(xiàn)錯(cuò)誤。
LPC2214是一款支持實(shí)時(shí)仿真和跟蹤的32位ARM7TDMI-S內(nèi)核的微控制器,并帶有256 KB嵌入的高速片內(nèi)Flash存儲(chǔ)器。通過(guò)片內(nèi)PLL可實(shí)現(xiàn)最大60 MHz的CPU操作頻率。8路10位A/D轉(zhuǎn)換器,2個(gè)32位定時(shí)器(帶4路捕獲和4路比較通道),6路脈沖寬度調(diào)制PWM,實(shí)時(shí)時(shí)鐘,看門狗,2個(gè)16C550工業(yè)標(biāo)準(zhǔn)UART,高速I2C接口,2個(gè)SPI接口,9個(gè)外部中斷源,2個(gè)低功耗模式:空閑模式和掉電模式[5]。此芯片外設(shè)功能強(qiáng)大,功耗低,抗干擾能力強(qiáng),非常適用于智能儀表和工業(yè)嵌入式控制系統(tǒng)。
系統(tǒng)傳輸線路采用RS485總線形式,由于ARM7系列芯片工作電壓為3.3 V,故選用SP3485低功耗芯片做電平轉(zhuǎn)換,TLP521實(shí)現(xiàn)信號(hào)隔離。LPC2214的TXD0和RXD0通過(guò)光耦分別連接SP3485的DI和RO引腳,完成串口的發(fā)送與接收工作。RS485的A、B兩端采用差分輸入,LPC2214的2個(gè)串口都具有串口中斷方式,支持CPU與外設(shè)之間的異步串行數(shù)字通信,支持5~8位串行數(shù)據(jù)傳送與接收以及在傳送與接收時(shí)的雙向握手,每一個(gè)通道有2個(gè)內(nèi)部16位FIFO,系統(tǒng)采用串口接收的中斷方式。在串口通信中接收每幀數(shù)據(jù)包后,會(huì)在接收狀態(tài)寄存器中相應(yīng)的標(biāo)志位置位,產(chǎn)生中斷請(qǐng)求,判斷是否接收Modbus數(shù)據(jù)幀,進(jìn)一步對(duì)該數(shù)據(jù)幀進(jìn)行解析[6]。圖2為串行通信接口電路。
圖2串行通信接口電路Fig.2 Serial communication interface circuit
Modbus協(xié)議簡(jiǎn)單易用,兼容性強(qiáng),應(yīng)用廣泛,但是將Modbus協(xié)議應(yīng)用到ARM系列單片機(jī)系統(tǒng)的設(shè)計(jì)較少。而該環(huán)境監(jiān)測(cè)系統(tǒng)則實(shí)現(xiàn)Modbus協(xié)議在ARM7系統(tǒng)中的應(yīng)用。
RTU模式通過(guò)判斷1.5個(gè)字符和3.5個(gè)字符的時(shí)間來(lái)確定報(bào)文幀傳輸?shù)恼_性,所以在程序處理過(guò)程中使用定時(shí)器中斷處理。當(dāng)波特率低于19 200 b/s時(shí),定時(shí)時(shí)間必須嚴(yán)格按照波特率計(jì)算出1.5個(gè)字符和3.5個(gè)字符的時(shí)間。環(huán)境監(jiān)測(cè)儀的頻率為 11.059 2 MHz(大于19 200 b/s時(shí)),如果按照波特率來(lái)計(jì)算字符時(shí)間間隔會(huì)使CPU負(fù)擔(dān)加重,所以定時(shí)器使用2個(gè)固定值:1.5個(gè)字符為750 μs,3.5個(gè)字符為1.75 ms。
系統(tǒng)運(yùn)行后,主站點(diǎn)依次向總線發(fā)送讀取從站信息的命令,避免了多個(gè)從站同時(shí)向總線發(fā)送信息而造成信息沖突。從站監(jiān)控儀表在接收到完整的消息幀后先讀取地址碼,判斷是否為發(fā)往本機(jī)的消息,是則檢驗(yàn)命令信息無(wú)誤后,響應(yīng)命令,并返回相應(yīng)的信息,否則清空接收緩存器,重新進(jìn)入等待接收狀態(tài)。
環(huán)境監(jiān)測(cè)系統(tǒng)主要使用的是04功能碼 (讀輸入寄存器),寄存器地址占2個(gè)字節(jié),從00開(kāi)始,連續(xù)讀取6組寄存器的值(輸入寄存器的數(shù)量也占2個(gè)字節(jié)),再加上2個(gè)字節(jié)的CRC校驗(yàn)碼,一個(gè)完整的消息幀為xx 04 00 00 00 06 xx xx。
在RTU模式下最關(guān)鍵的是區(qū)分報(bào)文幀間隔和字符間隔時(shí)間。系統(tǒng)采用串口接收中斷和定時(shí)器中斷判斷幀間隔和字符間隔時(shí)間的大小。報(bào)文幀的傳送報(bào)文要求幀內(nèi)間隔小于1.5個(gè)字符,幀間間隔大于3.5個(gè)字符。因?yàn)椴捎么诮邮罩袛?,檢驗(yàn)的是2個(gè)字符的停止位間的時(shí)間,可以用2.5個(gè)字符和4.5個(gè)字符的間隔來(lái)判斷報(bào)文幀傳輸?shù)恼_性,取其公約數(shù)0.5個(gè)字符作為定時(shí)器的定時(shí)時(shí)間,定義一個(gè)全局變量timer0_cn,timer0_cn在定時(shí)中斷中做加1運(yùn)算,判斷timer0_cn的2個(gè)關(guān)鍵值5和9即可。串口中斷和定時(shí)器中斷程序流程圖如圖3,圖4所示,通過(guò)串口中斷、定時(shí)器中斷和變量timer0_cn相配合完成報(bào)文幀的正確接收。
圖3串口中斷程序流程圖Fig.3 Flow chart of serial interrupt program
圖4定時(shí)器中斷程序流程圖Fig.4 Flow chart of timer interrupt program
環(huán)境監(jiān)測(cè)系統(tǒng)將Modbus協(xié)議成功地運(yùn)用到ARM7TDMI-S系統(tǒng)中,實(shí)現(xiàn)了環(huán)境監(jiān)測(cè)系統(tǒng)同時(shí)監(jiān)測(cè)多個(gè)地域、多個(gè)分站的網(wǎng)絡(luò)化管理,使用簡(jiǎn)單、方便,數(shù)據(jù)傳輸準(zhǔn)確無(wú)誤,延時(shí)時(shí)間短,非常適合小型的環(huán)保或氣象監(jiān)測(cè)站使用。
[1]潘長(zhǎng)清,蔣大明,歐陽(yáng)勁松.基于S3C44BOX處理器Modbus通信協(xié)議的實(shí)現(xiàn)[J].儀器儀表標(biāo)準(zhǔn)化與計(jì)量,2007,23(2):26-28.PAN Chang-qing, JIANG Da-ming, OUYANG Jin-song.The implementation of Modbus communication protocol based on S3C44BOX processor [J].Instrument Standardization and Meter Volume, 2007,23 (2) :26-28.
[2]GB/T 19582.2-2008基于Modbus協(xié)議的工業(yè)自動(dòng)化網(wǎng)絡(luò)規(guī)范,第2部分:Modbus協(xié)議在串行鏈路上的實(shí)現(xiàn)指南[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2008.
[3]GB/T 19582.1-2008基于Modbus協(xié)議的工業(yè)自動(dòng)化網(wǎng)絡(luò)規(guī)范,第1部分:Modbus應(yīng)用協(xié)議[S].北京:中國(guó)標(biāo)準(zhǔn)出版社,2008.
[4]廖明燕,王宏偉.基于Modbus協(xié)議的加氣站多機(jī)通訊系統(tǒng)[J].自動(dòng)化儀表,2008,29(9):44,54,64.LIAO Ming-yan,WANG Hong-wei.Based on Modbus protocol is scheduled for multi-machine communication system[J].Automation Instrumentation, 2008,29 (9):44,54,64.
[5]周立功,王祖麟,陳明計(jì),等.ARM與嵌入式系統(tǒng)基礎(chǔ)教程[M].廣州:廣州周立功單片機(jī)發(fā)展有限公司,2004.
[6]陳建,蔣海峰,丁偉智.Modbus協(xié)議在隧道監(jiān)測(cè)系統(tǒng)中的應(yīng)用[J].現(xiàn)場(chǎng)總線,2009(7):34-35,50.CHEN Jian,JIANG Hai-feng, DING Wei-zhi.The application of Modbus protocol in the tunnel monitoring system[J].Field bus, 2009(7):34-35,50.