文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.01.016
中文引用格式: 宋振鵬,孟祥印,徐鑫凱,等. 基于Modbus與ZigBee的通信冗余過程控制系統(tǒng)開發(fā)[J].電子技術(shù)應(yīng)用,2016,42(1):61-64.
英文引用格式: Song Zhenpeng,Meng Xiangyin,Xu Xinkai,et al. Development of redundant communication process control system based on Modbus and ZigBee[J].Application of Electronic Technique,2016,42(1):61-64.
0 引言
在傳統(tǒng)的過程控制系統(tǒng)中,對(duì)系統(tǒng)的實(shí)時(shí)監(jiān)測(cè)和控制是最重要的兩個(gè)環(huán)節(jié),但是現(xiàn)場(chǎng)設(shè)備的分布式布局造成了布線量大、設(shè)備維護(hù)困難以及可靠性低等缺點(diǎn),特別是數(shù)據(jù)的傳輸存在很大的安全隱患。根據(jù)上述現(xiàn)狀,筆者以STM32F103RCT6芯片和CC2530芯片作為系統(tǒng)控制器,設(shè)計(jì)了一套基于Modbus和ZigBee的通信冗余過程監(jiān)控系統(tǒng)替代傳統(tǒng)的過程控制系統(tǒng)。
1 通信冗余過程控制系統(tǒng)架構(gòu)
基于Modbus和ZigBee的通信冗余過程控制系統(tǒng)主要分為現(xiàn)場(chǎng)設(shè)備、STM32處理器模塊、ZigBee無線通信模塊和上位機(jī)四個(gè)部分,系統(tǒng)整體架構(gòu)如圖1所示。通過圖1可以看出,現(xiàn)場(chǎng)電氣設(shè)備通過I/O口連接到現(xiàn)場(chǎng)的終端模塊,由終端模塊負(fù)責(zé)采集現(xiàn)場(chǎng)設(shè)備的數(shù)據(jù)以及對(duì)現(xiàn)場(chǎng)設(shè)備輸出控制指令。終端模塊通過基于Modbus協(xié)議的RS-485總線或ZigBee無線的方式與網(wǎng)關(guān)模塊進(jìn)行通信,實(shí)現(xiàn)了通信冗余的功能。網(wǎng)關(guān)模塊通過RS-485總線與上位機(jī)通信。上位機(jī)監(jiān)控系統(tǒng)是由Microsoft Visual Studio 2010編寫的界面監(jiān)控軟件,數(shù)據(jù)傳輸以RS-485總線通信為核心,實(shí)現(xiàn)了采集數(shù)據(jù)信息的顯示、人機(jī)交互以及溢出報(bào)警等功能。
2 下位機(jī)硬件電路設(shè)計(jì)
下位機(jī)硬件電路主控芯片采用基于ARM內(nèi)核Cortex-M3的STM32F10x系列F103RCT6芯片。該芯片擁有256 KB的Flash存儲(chǔ)器和48 KB RAM,具有多路定時(shí)器以及輸入輸出端口,并且具有功耗低、多線程等優(yōu)點(diǎn),滿足工業(yè)現(xiàn)場(chǎng)設(shè)備的數(shù)據(jù)采集性能要求。ZigBee無線通信模塊采用的主控芯片是TI公司生產(chǎn)的CC2530芯片。CC2530內(nèi)部搭載了增強(qiáng)型8051CPU,內(nèi)置德州儀器的ZigBee協(xié)議棧(Z-Stack-TM),并且具有優(yōu)良的RF性能,適用于ZigBee無線通信的解決方案[1]。
下位機(jī)硬件電路示意圖如圖2所示,整個(gè)系統(tǒng)的正常工作都由STM32芯片控制。在下位機(jī)硬件電路中,要保證系統(tǒng)的正常運(yùn)行,除去STM32和CC2530芯片基本的外圍電路,還需要其他電路模塊,如電源模塊、RS485收發(fā)模塊、數(shù)據(jù)采集模塊等。
電池冗余備用電路如圖3所示。為保證系統(tǒng)在工業(yè)現(xiàn)場(chǎng)的連續(xù)穩(wěn)定工作,設(shè)計(jì)了電池冗余的備用電路,即外部掉電時(shí)使用電池供電,外部未掉電時(shí)電路給電池充電。電池采用可反復(fù)充電的AAA鋰電池,其中TP4075為電源充電芯片,A3401為P溝道MOS管,當(dāng)外部未掉電時(shí)處于截?cái)酄顟B(tài);當(dāng)外部掉電時(shí),MOS管處于導(dǎo)通狀態(tài),電池開始工作。
電源防雷擊保護(hù)電路如圖4所示。外部24 V電源經(jīng)過電源防雷擊保護(hù)電路后才可以進(jìn)入系統(tǒng)電路,這一部分有效防止了因雷擊產(chǎn)生的高浪涌、快速脈沖以及靜電對(duì)系統(tǒng)電路的損壞。
光耦隔離電路如圖5所示。應(yīng)對(duì)工業(yè)現(xiàn)場(chǎng)惡劣的環(huán)境,信號(hào)的輸入和輸出需要經(jīng)過隔離,否則會(huì)產(chǎn)生很大的干擾,影響系統(tǒng)數(shù)據(jù)采集和控制的準(zhǔn)確性。數(shù)字信號(hào)的隔離采用光耦隔離器PS2801進(jìn)行信號(hào)的隔離。電路中的下拉電阻R43確保在沒有信號(hào)輸入時(shí)過濾由引腳自身引起的信號(hào)干擾。
3 下位機(jī)通信軟件設(shè)計(jì)
3.1 Modbus通信軟件設(shè)計(jì)
下位機(jī)終端模塊與網(wǎng)關(guān)模塊之間的通信優(yōu)先使用基于Modbus協(xié)議的RS-485總線進(jìn)行傳輸。RS-485收發(fā)器收發(fā)數(shù)據(jù)的方式為平衡發(fā)送和差分接收,因此具有較好的抗共模干擾能力,即有較好的抗噪聲干擾能力,并且其靈敏度極高,所以RS-485總線在中長(zhǎng)距離的通信中備受歡迎。
Modbus協(xié)議是一種通用的標(biāo)準(zhǔn)協(xié)議,它使得控制器與控制器之間的通信成為可能,并且使不同設(shè)備生產(chǎn)商的控制設(shè)備之間進(jìn)行通信、互相連接成網(wǎng)絡(luò)、實(shí)現(xiàn)集中監(jiān)控成為了現(xiàn)實(shí)[2]。Modbus協(xié)議定義了其工作方式為主從模式,在整個(gè)通信網(wǎng)絡(luò)中,只允許有一個(gè)主設(shè)備,其余則為從設(shè)備,該系統(tǒng)中網(wǎng)關(guān)模塊為主設(shè)備,終端模塊為從設(shè)備。
該系統(tǒng)采用的通信方式是廣播方式,即網(wǎng)關(guān)模塊以廣播的方式對(duì)所有終端模塊發(fā)送查詢指令。在Modbus網(wǎng)絡(luò)中,每一個(gè)設(shè)備都有一個(gè)唯一的地址,終端模塊通過對(duì)比查詢指令中的設(shè)備地址和自己的地址是否相同來確定指令是否發(fā)送給自己[3]。
系統(tǒng)信息傳輸方式采用Modbus RTU方式,在該模式中每8 bit字節(jié)被定義為兩個(gè)4 bit的十六進(jìn)制字符[4],其通信的格式幀如圖6所示。
系統(tǒng)中Modbus協(xié)議是由移植的FreeModbus協(xié)議棧來實(shí)現(xiàn),F(xiàn)reeModbus協(xié)議棧實(shí)現(xiàn)了Modbus協(xié)議函數(shù)的封裝,開發(fā)時(shí)只需要調(diào)用相應(yīng)的API函數(shù),其所支持的協(xié)議功能碼完全滿足本系統(tǒng)的設(shè)計(jì)需求,該系統(tǒng)應(yīng)用到的功能碼有0x01(讀線圈)、0x02(讀開關(guān)量)、0x03(讀寫保持寄存器)、0x04(讀輸入寄存器)。協(xié)議功能碼通過對(duì)應(yīng)的處理函數(shù)和回調(diào)函數(shù)實(shí)現(xiàn)數(shù)據(jù)的讀或?qū)?。圖7所示為RS-485總線運(yùn)用Modbus協(xié)議棧進(jìn)行串口采集任務(wù)的流程圖。
3.2 ZigBee通信軟件設(shè)計(jì)
作為系統(tǒng)冗余的通信方式,當(dāng)Modbus總線通信失效時(shí),ZigBee無線通信會(huì)被激活(空閑時(shí)進(jìn)入休眠),用來完成終端模塊與網(wǎng)關(guān)模塊之前的數(shù)據(jù)通信,網(wǎng)絡(luò)通信的切換由網(wǎng)關(guān)模塊控制。
ZigBee是一種基于IEEE802.15.4標(biāo)準(zhǔn)的低功耗局域網(wǎng)協(xié)議,其具有低成本、低功耗以及組網(wǎng)靈活等優(yōu)點(diǎn),在無線數(shù)據(jù)傳輸方案中應(yīng)用廣泛。
在ZigBee組網(wǎng)網(wǎng)絡(luò)中,設(shè)備根據(jù)其功能可以分為三種不同的角色:協(xié)調(diào)器節(jié)點(diǎn)、終端節(jié)點(diǎn)和路由器節(jié)點(diǎn)。協(xié)調(diào)器節(jié)點(diǎn)是ZigBee網(wǎng)絡(luò)不可缺少的一環(huán),在ZigBee網(wǎng)絡(luò)中有且僅有一個(gè),主要功能是網(wǎng)絡(luò)的建立和維護(hù)。終端節(jié)點(diǎn)主要負(fù)責(zé)接收協(xié)調(diào)器節(jié)點(diǎn)命令,并響應(yīng)相應(yīng)的數(shù)據(jù)信息。路由器節(jié)點(diǎn)主要負(fù)責(zé)選取網(wǎng)絡(luò)通信信道以及轉(zhuǎn)發(fā)數(shù)據(jù)。ZigBee網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)主要有星型、網(wǎng)狀型和樹狀型三種[5]。
該系統(tǒng)中,網(wǎng)關(guān)模塊作為協(xié)調(diào)器,終端模塊作為終端節(jié)點(diǎn),因?yàn)榫W(wǎng)絡(luò)結(jié)構(gòu)比較簡(jiǎn)單,所以網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)為星型結(jié)構(gòu)。協(xié)調(diào)器組網(wǎng)方式為廣播,終端節(jié)點(diǎn)組網(wǎng)方式為點(diǎn)播。
無論是協(xié)調(diào)器還是終端節(jié)點(diǎn),通信軟件的開發(fā)都是基于Z-Stack協(xié)議棧,協(xié)議棧已經(jīng)實(shí)現(xiàn)了ZigBee的通信協(xié)議,用戶可以使用其提供的API函數(shù)進(jìn)行應(yīng)用程序開發(fā)。圖8為Z-Stack協(xié)議棧的運(yùn)行流程圖。
協(xié)議棧設(shè)計(jì)了一個(gè)管理任務(wù)處理函數(shù)的數(shù)組taskArr[],開發(fā)者需要將任務(wù)處理函數(shù)加入數(shù)組序列。該數(shù)組簡(jiǎn)化后定義如下:
const pTaskEventHandlerFn tasksArr[] = {
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
ZigBeeApp_ProcessEvent };
其中ZigBeeApp_ProcessEvent()為該系統(tǒng)設(shè)計(jì)的通信處理函數(shù)。
4 上位機(jī)軟件設(shè)計(jì)
上位機(jī)軟件的設(shè)計(jì)是在Microsoft Visual Studio 2010開發(fā)平臺(tái)下使用C#語(yǔ)言進(jìn)行的,VS是目前最流行的Windows平臺(tái)應(yīng)用程序的集成開發(fā)環(huán)境。C#語(yǔ)言集成了VB語(yǔ)言的可視化操作和C++的高運(yùn)行效率,成為了當(dāng)前.NET開發(fā)的首選語(yǔ)言[6]。
上位機(jī)軟件主要實(shí)現(xiàn)數(shù)據(jù)的可視化和更好的人機(jī)交互,下位機(jī)發(fā)送的數(shù)據(jù)很難直觀地表達(dá)出當(dāng)前系統(tǒng)的工作狀態(tài),利用VS2010軟件編寫上位機(jī)監(jiān)控界面,使用Chart控件實(shí)現(xiàn)數(shù)據(jù)的圖表化顯示,同時(shí)設(shè)置報(bào)警溢出閾值,及時(shí)發(fā)現(xiàn)系統(tǒng)異常進(jìn)而進(jìn)行維護(hù)。上位機(jī)監(jiān)控界面功能框圖如圖9所示。
5 結(jié)束語(yǔ)
本文采用Modbus總線技術(shù)和ZigBee無線技術(shù)設(shè)計(jì)了一種通信冗余過程控制系統(tǒng),下位機(jī)實(shí)現(xiàn)數(shù)據(jù)的采集和通信的冗余,上位機(jī)實(shí)現(xiàn)數(shù)據(jù)的監(jiān)測(cè)和設(shè)備控制。硬件電路具有一定的抗干擾、防雷擊能力,以應(yīng)對(duì)復(fù)雜的工業(yè)現(xiàn)場(chǎng)環(huán)境,該系統(tǒng)有一定的推廣價(jià)值,為解決傳統(tǒng)過程控制系統(tǒng)中的諸多難題提供了解決方案。
參考文獻(xiàn)
[1] 李俊斌,胡永忠.基于CC2530的ZigBee通信網(wǎng)絡(luò)的應(yīng)用設(shè)計(jì)[J].電子設(shè)計(jì)工程,2011,19(16):108-111.
[2] 朱懿,蔣念平.Modbus協(xié)議在工業(yè)控制系統(tǒng)中的應(yīng)用[J].微計(jì)算機(jī)信息,2006(22):118-120.
[3] 盧文俊,冷杉,楊建軍.基于Modbus協(xié)議的控制器遠(yuǎn)程監(jiān)控系統(tǒng)[J].電力自動(dòng)化設(shè)備,2003,23(6):54-56.
[4] 薛海濤,和衛(wèi)星,陳曉平.數(shù)據(jù)采集系統(tǒng)中Modbus協(xié)議的實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2007,23(10-1):68-69.
[5] 章偉聰,俞新武,李忠成.基于CC2530及ZigBee協(xié)議棧設(shè)計(jì)無線網(wǎng)絡(luò)傳感器節(jié)點(diǎn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2011,20(7):184-187.
[6] 劉奇,林崗.基于Visual Studio 2010的UG二次開發(fā)研究[J].計(jì)算機(jī)應(yīng)用,2015,34(1):40-41.