何凌霄,林凡強(qiáng)
(成都理工大學(xué) 信息科學(xué)與技術(shù)學(xué)院,四川 成都610059)
傳統(tǒng)的火災(zāi)報警系統(tǒng)由于測控能力有限,控制距離較短等缺點(diǎn),已無法滿足實(shí)際發(fā)展的測控要求。為此,提出基于MODBUS協(xié)議的測控網(wǎng)絡(luò),用以太網(wǎng)將各MODBUS網(wǎng)絡(luò)連接起來,組建大型測控系統(tǒng),在各處連接相應(yīng)的可編程邏輯控制器以及檢測系統(tǒng),通過網(wǎng)絡(luò)對各點(diǎn)處的環(huán)境狀況進(jìn)行檢測,控制相應(yīng)的動作,實(shí)現(xiàn)對各種生產(chǎn)中的安全問題進(jìn)行預(yù)警。
本設(shè)計在提出組建大型網(wǎng)絡(luò)理論的同時,由于實(shí)際需要,設(shè)計制作了基于MODBUS協(xié)議的多點(diǎn)火災(zāi)測控系統(tǒng),驗(yàn)證了建立大型網(wǎng)絡(luò)測控系統(tǒng)的可行性與優(yōu)越性。
MODBUS協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器及相互之間經(jīng)由網(wǎng)絡(luò)和其他設(shè)備之間可以通信。其通信使用主從式技術(shù),即僅一個設(shè)備(主設(shè)備)能初始化傳輸(查詢)。其他設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)做出相應(yīng)反應(yīng)。
MODBUS協(xié)議中,消息的傳輸方式可以選擇ASCII和RTU消息幀格式中的一種進(jìn)行網(wǎng)絡(luò)通信。在協(xié)議的消息幀中可以進(jìn)行各種校驗(yàn),如奇偶校驗(yàn)、LRC校驗(yàn)和CRC校驗(yàn),網(wǎng)絡(luò)中還可以設(shè)定超時檢測功能。
系統(tǒng)采用了RTU消息幀模式,消息發(fā)送至少要以3.5個字符時間的停頓間隔開始。傳輸?shù)牡谝粋€域是設(shè)備地址。網(wǎng)絡(luò)設(shè)備不斷偵測網(wǎng)絡(luò)總線,包括停頓間隔時間內(nèi)。當(dāng)?shù)谝粋€域接收到,每個設(shè)備都對其進(jìn)行解碼以判斷是否發(fā)給自己的。在最后一個傳輸字符之后,至少3.5個字符時間的停頓標(biāo)定了消息的結(jié)束。RTU格式如表1所示。
表1 RTU消息幀格式
計算機(jī)與計算機(jī)或計算機(jī)與終端之間的數(shù)據(jù)傳送可以采用串行通訊和并行通訊兩種方式。由于串行通訊方式具有使用線路少、成本低,特別是在遠(yuǎn)程傳輸時,避免了多條線路的特性不一致而被廣泛采用。常用的接口如:RS-232、RS-485。因?yàn)镽S485標(biāo)準(zhǔn)采用平衡式發(fā)送、差分式接收的數(shù)據(jù)收發(fā)器來驅(qū)動總線,傳輸距離可達(dá)千米以上,因此本系統(tǒng)采用該總線建立設(shè)備網(wǎng)絡(luò)。
由終端(可以是可編程的邏輯控制器、單片機(jī)控制器等)、RS-485總線等物理硬件組成,通過MODBUS協(xié)議通信,由主機(jī)初始化整個網(wǎng)絡(luò),按地址發(fā)送消息幀,符合地址的終端接收消息幀,并按消息幀消息的要求處理,回復(fù)給主機(jī)相應(yīng)的數(shù)據(jù)。
系統(tǒng)具有基于MODBUS協(xié)議的接口處理能力,初步測控功能,MODBUS系統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)如圖1所示。
圖1 MODBUS系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)
主機(jī)硬件可以采用通用個人計算機(jī)或?qū)S锰幚砥?標(biāo)配9針D形串口,支持串口通信,具有將串口RS232轉(zhuǎn)RS485的接口芯片。
下位機(jī)主要是基于單片機(jī)的微控制器,其具有可靠性高、編程方便、體積小、功耗低等特點(diǎn),目前主要的自動控制設(shè)備多采用此種形式。采用單片機(jī)方案,編寫基于MODBUS協(xié)議的通信接口程序,用于執(zhí)行簡單的控制指令或檢測命令。系統(tǒng)采用C8051[1]系列控制器,該控制器與傳統(tǒng)的MCS-51單片機(jī)兼容,但該類控制器采用流水線結(jié)構(gòu),性能方面比傳統(tǒng)的MCS-51有所提高,且其外設(shè)資源豐富、系統(tǒng)集成度高。
不同PC機(jī)之間通過以太網(wǎng)連接,將MODBUS協(xié)議消息幀封裝成以太網(wǎng)上傳輸?shù)臄?shù)據(jù)包傳輸,并用Microsoft Visual C++6.0編程[2]開發(fā)以太網(wǎng)連接相應(yīng)的控制接口與界面。
MAX483是適用于RS-422和RS-485通信線路的低功率收發(fā)器,其內(nèi)部集成了一個驅(qū)動器和一個接收器[3-4]。
由C8051F340構(gòu)成下位機(jī),構(gòu)成MODBUS網(wǎng)絡(luò)I/O接口模塊[6-8],提供串行通信能力,連接各種外圍控制檢測電路,提供外圍電路主時序及控制信號。由于具體測控裝置的不同,這里選擇了溫度傳感器、火焰探測器、自動或手動開關(guān)、聲光報警器、并預(yù)留多余的I/O端口,便于擴(kuò)展。
檢測模塊由于具體環(huán)境和硬件設(shè)施的不同而多種多樣,主要包括火焰探測器、溫度傳感器、水流指示器等。因C8051F340單片機(jī)內(nèi)置10位A/D轉(zhuǎn)換器和溫度傳感器,故這一模塊可通過輸入輸出口外接傳感器,直接通過編程獲得。
當(dāng)檢測到有火災(zāi)可能發(fā)生時,給單片機(jī)輸出口一個高電平,使發(fā)光二極管發(fā)光,并使蜂鳴器發(fā)聲,以表示可能有異常情況發(fā)生。
單片機(jī)程序設(shè)計采用KEIL集成開發(fā)環(huán)境,通過仿真器在C8051F340單片機(jī)上調(diào)試運(yùn)行。
單片機(jī)系統(tǒng)啟動后,經(jīng)過初始化,立即開始進(jìn)行現(xiàn)場的參數(shù)測量,流程如圖2所示。
圖2 單片機(jī)測試流程圖
通電后,首先配置I/O口,設(shè)置計時器初值、工作方式,設(shè)置串口工作方式,開系統(tǒng)中斷等;然后調(diào)用測量函數(shù);再調(diào)用接收判斷函數(shù),判斷是否接收到正確的消息幀;如果判斷接收的消息幀錯誤或消息幀沒接收完全,則直接跳出接收函數(shù),調(diào)用測量函數(shù),進(jìn)行測量,并不斷循環(huán)測量函數(shù)與接收判斷函數(shù)。
初始化函數(shù)主要是開總中斷;設(shè)置定時器0為16位計時模式,檢測信息//幀開始與幀內(nèi)字節(jié);定時器1設(shè)為8位自動重裝模式2,用于串口數(shù)據(jù)通信波特率發(fā)生。
串口中斷發(fā)生時,先開始計時定時器,檢測信息間隔機(jī)字符間隔,計時0.5個字符周期。然后判斷是接收中斷還是發(fā)送中斷,根據(jù)判斷結(jié)果分別做相應(yīng)的處理,接收數(shù)據(jù)至接收數(shù)據(jù)緩沖區(qū)還是將發(fā)送緩沖區(qū)的數(shù)據(jù)發(fā)送。根據(jù)MODBUS協(xié)議中RTU傳輸模式,當(dāng)兩個字符間隔>3.5個字符周期時,認(rèn)為接收完一個消息幀,開始接收下一個消息幀,當(dāng)<1.5個字符周期時,則認(rèn)為這是上一消息幀的字符。接收或發(fā)送的消息幀保存在接收緩沖區(qū)或發(fā)送緩沖區(qū)中,為后續(xù)接收判斷做準(zhǔn)備。串口的處理流程圖圖如3所示。
圖3 串口中斷處理流程圖
產(chǎn)生CRC校驗(yàn)碼過程如下:(1)預(yù)置一個16位寄存器為0FFFFH(全1),稱為CRC寄存器;(2)把數(shù)據(jù)幀中的第1個Byte的8位與CRC寄存器中的低字節(jié)進(jìn)行異或運(yùn)算,結(jié)果存回CRC寄存器;(3)將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測;(4)如果最低位為0:重復(fù)第(3)步;(5)如果最低位為1:則將CRC寄存器與一個預(yù)設(shè)的固定值(0A001H)進(jìn)行異或運(yùn)算;(6)重復(fù)第(3)步和第(4)步直到8次移位。這樣則處理完了一個完整的8位。重復(fù)第(2)步~第(5)步來處理下一個8位,直到所有的字節(jié)處理結(jié)束,最終CRC寄存器的值即為CRC的值。
上位機(jī)軟件采用Microsoft Visual C++6.0設(shè)計多點(diǎn)火災(zāi)監(jiān)控系統(tǒng)界面,它提供完善的可視化開發(fā)環(huán)境,集方便、快捷、靈活高效于一體,界面如圖4所示。
圖4 多點(diǎn)火災(zāi)監(jiān)控系統(tǒng)界面
目前設(shè)計實(shí)現(xiàn)了MODBUS的基本功能,實(shí)現(xiàn)多點(diǎn)火災(zāi)的監(jiān)控和預(yù)警。但MODBUS網(wǎng)絡(luò)連接采用RS-485總線連接,在實(shí)際火災(zāi)中可能會產(chǎn)生火災(zāi)破壞通信線路,造成通信系統(tǒng)癱瘓,可靠性降低,但可以通過硬件或軟件方法改進(jìn)而提高。MODBUS協(xié)議本身沒規(guī)定具體的硬件連接方式,它定義了通信雙方能認(rèn)識使用的消息結(jié)構(gòu),而不管是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。可以考慮采用無線通信的方式,這樣就沒有實(shí)際的連接線,可靠性可以得到改進(jìn)。
系統(tǒng)的主控界面是人工發(fā)送消息給下位機(jī),下位機(jī)接收執(zhí)行后,返回消息。使用主從技術(shù),如遇突發(fā)情況,在無人控制時,電腦會自動按一定時間間隔查詢下位機(jī)狀況,這樣就不能及時實(shí)施控制,且系統(tǒng)資源占用較多??梢钥紤]采用申請—控制機(jī)制,即下位機(jī)檢測異常時,向主機(jī)發(fā)送紅請求,主機(jī)通過中斷收到請求后,自動判斷并發(fā)出控制消息給下位機(jī)實(shí)行控制。這樣可以節(jié)約系統(tǒng)資源和增強(qiáng)實(shí)時處理能力,提高檢測控制效率。
系統(tǒng)開發(fā)設(shè)計了建立基于MODBUS協(xié)議的自動多點(diǎn)火災(zāi)測控系統(tǒng),并提出以太網(wǎng)連接,組建大型測控網(wǎng)絡(luò)的方案。在實(shí)際火災(zāi)測控應(yīng)用、設(shè)計火災(zāi)測控網(wǎng)絡(luò)、繪制具體電路、進(jìn)行實(shí)際制板測試和編寫通信程序等方面,為以后火災(zāi)預(yù)警測控提供了參考。
[1] 楊金巖,鄭應(yīng)強(qiáng).8051單片機(jī)數(shù)據(jù)傳輸接口擴(kuò)展技術(shù)與應(yīng)用實(shí)例[M].北京:人民郵電出版社,2004.
[2] 周曉云.程序設(shè)計基礎(chǔ)—可視化及VC++實(shí)現(xiàn)[M].北京:高等教育出版社,2004.
[3] 張毅坤,陳善久.單片微型計算機(jī)原理及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,1998.
[4] 宋寶華.深入淺出VC++串口編程之基于Win32 API[EB/OL].(2006-02-21)[2012-09-12]http://wen ku.baidu.com.
[5] 鄧元生.基于單片機(jī)的MODBUS總線協(xié)議實(shí)現(xiàn)技術(shù)研究[D].長沙:中南大學(xué),2009.
[6]陳銘.基于MODBUS協(xié)議的設(shè)備和PLC實(shí)現(xiàn)通信的研究[J].湖南科技學(xué)院學(xué)報,2009,30(4):60-62.
[7] 夏勇.Modbus通訊協(xié)議的S7-200可編程控制器[J].自動化與儀器儀表,2009(1):48-49.
[8] 王小鵬,張九強(qiáng).MODBUS在智能保護(hù)裝置上的應(yīng)用[J].煤礦機(jī)械,2011(1):190-192.