丁夢(mèng)遙 魏霞
關(guān)鍵詞: 協(xié)議轉(zhuǎn)換; 網(wǎng)關(guān); Modbus RTU; Modbus TCP; 消息機(jī)制; 數(shù)據(jù)采集
中圖分類號(hào): TN915.04?34; TP274+.2 ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼: A ? ? ? ? ? ? ? 文章編號(hào): 1004?373X(2019)01?0028?05
Abstract: With the control strengthen of large power plants, and increase of controlled data category and data protocol category, the benefit maximization is pursued, which leads to a bottleneck for many?to?one protocol conversion. Therefore, the available protocol conversion mode is improved, and the traditional "one?to?one" transmission mode is improved as the "many?to?one" mode to avoid "message blocking". The single chip microcomputer (SCM) operation platform is introduced. A multi?protocol data acquisition gateway is implemented on software and hardware. The message mechanism is used in software to combine the functions of channel selection, protocol conversion, gateway parameter setting and detection into a complete system, which is convenient for uniform scheduling, and can improve the efficiency and real?time performance of protocol conversion effectively. The 51 serial SCM is used to complete the protocol conversion gateway, which can reduce the design cost.
Keywords: protocol conversion; gateway; Modbus RTU; Modbus TCP; message mechanism; data acquisition
隨著人們對(duì)環(huán)保的重視程度越來(lái)越高,特別是像熱電廠、鋁廠、鋼鐵廠這樣的煙氣排放量大的廠站,環(huán)保局更是嚴(yán)格要求。本文主要針對(duì)熱電廠的能耗以及煙氣排放量等非實(shí)時(shí)數(shù)據(jù)進(jìn)行研究。在電力監(jiān)控系統(tǒng)中,電廠的煙氣排放以及電能量相關(guān)數(shù)據(jù)被劃分到生產(chǎn)控制大區(qū)內(nèi)的安全二區(qū)即非實(shí)時(shí)區(qū)[1]。
現(xiàn)代大型的熱電廠中主流采用的是DCS系統(tǒng),而DCS系統(tǒng)中的數(shù)據(jù)信息協(xié)議格式和種類繁多,這對(duì)于數(shù)據(jù)的集中調(diào)度和處理產(chǎn)生一定影響,而且容易造成“信息孤島”,難以實(shí)現(xiàn)設(shè)備間或者系統(tǒng)與設(shè)備間的信息交互,并且在一定程度上阻礙了運(yùn)行管理體系的進(jìn)一步發(fā)展[2]。傳統(tǒng)方法花費(fèi)大量的資金投入在現(xiàn)場(chǎng)的智能本地設(shè)備上,并且為每種協(xié)議格式的數(shù)據(jù)配一個(gè)專門的協(xié)議轉(zhuǎn)換網(wǎng)關(guān),最后匯集到數(shù)據(jù)庫(kù)中。現(xiàn)場(chǎng)的智能設(shè)備和系統(tǒng)大部分支持的通信協(xié)議種類繁多,且系統(tǒng)具有分布性、異構(gòu)性等特點(diǎn),更加不利于數(shù)據(jù)的采集和集成[3]。雖然已經(jīng)有公司研發(fā)出多協(xié)議轉(zhuǎn)化網(wǎng)關(guān),但由于價(jià)格昂貴且針對(duì)的協(xié)議種類領(lǐng)域較單一,無(wú)法滿足熱電廠實(shí)際需求。
考慮到數(shù)據(jù)的非實(shí)時(shí)性以及實(shí)際需求,本文設(shè)計(jì)采用51系列單片機(jī),可在滿足基本要求的前提下大大降低成本,增加備件數(shù)量。
首先將各個(gè)底層智能設(shè)備采集來(lái)的數(shù)據(jù)匯集到數(shù)據(jù)采集網(wǎng)關(guān),由數(shù)據(jù)采集網(wǎng)關(guān)將各種串口傳輸?shù)臄?shù)據(jù)格式Modbus/RTU轉(zhuǎn)化成統(tǒng)一的網(wǎng)口傳輸格式Modbus/TCP,再通過(guò)以太網(wǎng)發(fā)送給上位機(jī)。
多協(xié)議數(shù)據(jù)采集網(wǎng)關(guān)主要通過(guò)在軟件上實(shí)現(xiàn)多種協(xié)議到一種協(xié)議的轉(zhuǎn)換,硬件設(shè)計(jì)上較簡(jiǎn)單,便于現(xiàn)場(chǎng)的安裝和使用[4],同時(shí)軟件層面引入單片機(jī)操作平臺(tái),便于后期維護(hù)和升級(jí)。
本文設(shè)計(jì)針對(duì)的是熱電廠中DCS系統(tǒng)中底層設(shè)備的水、電、氣數(shù)據(jù)進(jìn)行匯總和傳輸,常用的協(xié)議有Modbus,M?bus以及DEL?645協(xié)議,本文設(shè)計(jì)就是針對(duì)上述三種協(xié)議進(jìn)行轉(zhuǎn)換,統(tǒng)一成Modbus /TCP,再借助以太網(wǎng)上傳。
現(xiàn)在工業(yè)上使用最廣泛的通信協(xié)議之一就是由Modicon于1979年發(fā)表的Modbus協(xié)議,該協(xié)議主要有Modbus /RTU和Modbus/TCP兩種[5]。其中Modbus/RTU主要應(yīng)用于串口傳輸,由于協(xié)議對(duì)功能碼進(jìn)行了嚴(yán)格定義,雖然傳播速度不及RTU但是其數(shù)據(jù)安全性較高,而Modbus/TCP協(xié)議則是將Modbus /RTU和以太網(wǎng)相結(jié)合,以滿足一些對(duì)數(shù)據(jù)傳輸速度有較高要求的用戶需求[6]。除此以外,Modbus協(xié)議還是完全對(duì)外開放的一種通信協(xié)議[7]。
本文設(shè)計(jì)了一款基于經(jīng)典的51單片機(jī)的數(shù)據(jù)采集網(wǎng)關(guān),通過(guò)數(shù)據(jù)采集網(wǎng)關(guān)可以將底層采集上來(lái)的串口類型信息轉(zhuǎn)換成統(tǒng)一的Modbus/TCP格式的報(bào)文信息,便于在網(wǎng)口上快速安全上傳和管理[8]。而熱電廠中常用的串口數(shù)據(jù)類型主要有Modbus協(xié)議、M?Bus協(xié)議以及DEL?645協(xié)議等。由于篇幅有限,本文只對(duì)Modbus/RTU與 Modbus/TCP協(xié)議轉(zhuǎn)化進(jìn)行詳細(xì)闡述。
整體的實(shí)現(xiàn)方法如圖1所示,其中接口機(jī)可以使用PC機(jī)代替。
在數(shù)據(jù)采集網(wǎng)關(guān)工作的過(guò)程中,數(shù)據(jù)采集網(wǎng)關(guān)主要的工作就是掃描檢測(cè)串口和以太網(wǎng)端口,當(dāng)有數(shù)據(jù)需要上傳或者下達(dá)時(shí),網(wǎng)關(guān)只需根據(jù)消息類型讀取相應(yīng)的數(shù)據(jù),再通過(guò)消息機(jī)制調(diào)用相應(yīng)的子函數(shù)進(jìn)行協(xié)議轉(zhuǎn)換。
當(dāng)主機(jī)即上位機(jī)發(fā)送讀取數(shù)據(jù)命令請(qǐng)求時(shí),網(wǎng)關(guān)首先對(duì)請(qǐng)求消息進(jìn)行分析,判斷是否為廣播消息。如果是,則讀取所有端口消息;否則就會(huì)針對(duì)性地讀取相應(yīng)串口的狀態(tài),并且讀取串口數(shù)據(jù),先存儲(chǔ)到單片機(jī)的外部存儲(chǔ)設(shè)備中,再根據(jù)不同的數(shù)據(jù)類型執(zhí)行相應(yīng)的協(xié)議轉(zhuǎn)換子程序,轉(zhuǎn)換成統(tǒng)一的Modbus/TCP協(xié)議格式,借助TCP/IP協(xié)議棧通過(guò)以太網(wǎng)發(fā)送給上位機(jī)。
整個(gè)協(xié)議完成主要通過(guò)軟件實(shí)現(xiàn),那么就得考慮如何合理地利用有限的資源更好地實(shí)現(xiàn)協(xié)議轉(zhuǎn)換功能,所以將整個(gè)協(xié)議轉(zhuǎn)化的功能分解到一個(gè)小單片機(jī)的前后臺(tái)架構(gòu)上,這樣既可以簡(jiǎn)化程序開發(fā)的過(guò)程,便于后期維護(hù),又可以提高協(xié)議的轉(zhuǎn)換效率。
本文設(shè)計(jì)采用的軟件平臺(tái)是一種簡(jiǎn)易的前后臺(tái)架構(gòu),主要借鑒操作系統(tǒng)、手機(jī)的一些概念,在一個(gè)標(biāo)準(zhǔn)化的硬件基礎(chǔ)上擴(kuò)展一個(gè)標(biāo)準(zhǔn)化的軟件平臺(tái),將一些常用功能集成到一起,形成一個(gè)完整的系統(tǒng)?;谠撈脚_(tái),可自主地增減功能以滿足自己的實(shí)際需求。而該軟件平臺(tái)主要由三大結(jié)構(gòu)——中斷、節(jié)拍和大循環(huán)構(gòu)成,貫穿整個(gè)框架的核心是消息機(jī)制。
嵌入式程序設(shè)計(jì)時(shí),常常采用中斷的方式實(shí)現(xiàn)循環(huán),這樣做可以快速對(duì)外部或內(nèi)部中斷信號(hào)進(jìn)行響應(yīng),但是容易受到錯(cuò)誤的中斷信號(hào)干擾。為了克服這一缺點(diǎn),并且針對(duì)協(xié)議轉(zhuǎn)換的特點(diǎn),本設(shè)計(jì)采用了一種更為簡(jiǎn)單、主動(dòng)、安全的循環(huán)方法——掃描。在大循環(huán)內(nèi)通過(guò)不斷地主動(dòng)掃描,判斷switch語(yǔ)句中各個(gè)case狀態(tài)的變化,每種case對(duì)應(yīng)一種消息類型,再根據(jù)不同消息類型調(diào)用不同的消息執(zhí)行程序,從而降低了CPU的等待時(shí)間,提高了程序整體的效率。但由于掃描周期的局限性,這種主動(dòng)的掃描方式只適合低速設(shè)備,并且當(dāng)發(fā)生突發(fā)性事件時(shí),只能等到下一個(gè)掃描周期到達(dá)才可以被執(zhí)行。
為了實(shí)現(xiàn)對(duì)協(xié)議轉(zhuǎn)換時(shí)間的精確控制,本文設(shè)計(jì)采用由芯片內(nèi)部時(shí)鐘產(chǎn)生的節(jié)拍,有效地避免了由于轉(zhuǎn)換時(shí)間的誤差導(dǎo)致的錯(cuò)誤。此外,可以通過(guò)對(duì)系統(tǒng)節(jié)拍進(jìn)行速度分級(jí)提高系統(tǒng)的實(shí)時(shí)性,使系統(tǒng)更加穩(wěn)定可靠地運(yùn)行。
中斷的使用則是用于分擔(dān)CPU負(fù)擔(dān),幫助完成一些任務(wù),減少CPU的占用率,同時(shí)也提高了整體程序的效率。
消息機(jī)制作為協(xié)議轉(zhuǎn)換的軟件實(shí)現(xiàn)框架,主要是對(duì)已知的任務(wù)和事件進(jìn)行預(yù)先定義,并且設(shè)置特定的消息處理函數(shù),當(dāng)檢測(cè)到事件或者任務(wù)被觸發(fā),再調(diào)用相應(yīng)的消息處理函數(shù)進(jìn)行處理,可以簡(jiǎn)單地理解為“入消息”和“出消息”。
而將消息機(jī)制運(yùn)行起來(lái),需要先對(duì)其參數(shù)——消息隊(duì)列進(jìn)行設(shè)置。對(duì)消息的定義分為兩個(gè)部分,即消息類型(MsgType)和消息值(Val)。
消息隊(duì)列常被定義為16 bit無(wú)符號(hào)整形數(shù)據(jù),將其高8位定義為消息類型,低8位定義為消息值。
消息類型根據(jù)實(shí)際需要在頭文件中先定義并枚舉出,方便對(duì)各種消息類型進(jìn)行遍歷,而消息值則作為相應(yīng)的消息處理函數(shù)作參數(shù)。
首先完成協(xié)議轉(zhuǎn)換相關(guān)程序的初始化,再執(zhí)行大循環(huán)內(nèi)的程序,大循環(huán)內(nèi)通過(guò)主動(dòng)掃描方式判斷各消息的狀態(tài),當(dāng)有消息被觸發(fā)時(shí),再調(diào)用相應(yīng)功能函數(shù)實(shí)現(xiàn)消息調(diào)度。
取消息,顧名思義即通過(guò)取消息函數(shù)將消息隊(duì)列中的16 bit消息取出,再執(zhí)行該消息相應(yīng)的程序。
同樣,在執(zhí)行取消息程序前,首先判斷消息隊(duì)列是否為空,若為空則返回0x0000;若不為空,則先保存中斷使能狀態(tài),并且關(guān)中斷,取出消息后,恢復(fù)中斷使能狀態(tài)后返回。
上述即為消息機(jī)制的執(zhí)行過(guò)程。在程序初始化之后,消息隊(duì)列默認(rèn)為空,雖然循環(huán)體內(nèi)一直會(huì)取消息并判斷消息類型,但始終執(zhí)行MSG_NULL程序段。
消息只能在大循環(huán)中被讀取和執(zhí)行,在中斷和節(jié)拍中被接收,存入消息隊(duì)列中。
消息機(jī)制可以有效解決由于運(yùn)行時(shí)間較長(zhǎng)而造成的延遲問(wèn)題,避免消息堵塞。消息機(jī)制可以理解為一個(gè)連接器,先將運(yùn)行時(shí)間較長(zhǎng)的事件分解為多個(gè)小任務(wù),當(dāng)完成一個(gè)小任務(wù)后,再發(fā)起執(zhí)行下一個(gè)小任務(wù)的消息。
同理,消息機(jī)制還可以用于解決函數(shù)嵌套的深度問(wèn)題,當(dāng)函數(shù)調(diào)用嵌套過(guò)深,會(huì)導(dǎo)致內(nèi)存消耗過(guò)大而編譯失敗,特別是內(nèi)存不是很寬裕的芯片,通過(guò)引入消息機(jī)制,可以把一個(gè)很深的函數(shù)調(diào)用問(wèn)題分解為多個(gè)較短的函數(shù)調(diào)用問(wèn)題,且函數(shù)入口都在大循環(huán)main里,有效地解決了內(nèi)存不足的問(wèn)題。
在協(xié)議轉(zhuǎn)化前,需要對(duì)下位機(jī)發(fā)送來(lái)的串口數(shù)據(jù)的正確性進(jìn)行分析。如果符合串口協(xié)議的規(guī)約再進(jìn)行協(xié)議轉(zhuǎn)化,否則返回錯(cuò)誤信息。
協(xié)議轉(zhuǎn)化的實(shí)現(xiàn)過(guò)程,簡(jiǎn)單地說(shuō)就是通過(guò)對(duì)底層智能設(shè)備上傳過(guò)來(lái)的串口協(xié)議報(bào)文進(jìn)行分析,根據(jù)不同串口協(xié)議中的報(bào)文幀的差異性,將報(bào)文中相應(yīng)的數(shù)據(jù)幀提取出來(lái),再加上目的協(xié)議的報(bào)文頭、校驗(yàn)位以及結(jié)束符等具體位數(shù),通過(guò)以太網(wǎng)發(fā)送出去。
本文以Modbus/RTU與Modbus/TCP轉(zhuǎn)換為例具體說(shuō)明,首先分析兩個(gè)協(xié)議報(bào)文結(jié)構(gòu)的差異,如圖2所示。
通過(guò)對(duì)報(bào)文幀的具體分析可知,實(shí)現(xiàn)Modbus/RTU到Modbus/TCP的轉(zhuǎn)換如圖3所示。
由于Modbus ASCII的協(xié)議格式和RTU差距不是很大,所以此處就不詳細(xì)贅述。
Modbus采用主/從工作模式,其中主機(jī)只能有一個(gè),而從機(jī)可以有多個(gè),并且只有主機(jī)可以發(fā)送請(qǐng)求,從機(jī)根據(jù)主機(jī)的要求給出相應(yīng)的響應(yīng)[9]。整個(gè)數(shù)據(jù)采集網(wǎng)關(guān)的工作過(guò)程如圖4所示。
數(shù)據(jù)采集網(wǎng)關(guān)的軟件框架,主要函數(shù)有以下幾個(gè):
boot.c:主程序入口,大循環(huán)通過(guò)內(nèi)部的while()函數(shù)實(shí)現(xiàn);
common.h:包含了用到的全局頭文件;
rtu2tcp.c:實(shí)現(xiàn)Modbus/RTU到TCP的轉(zhuǎn)換;
tcp2rtu.c:實(shí)現(xiàn)Modbus/TCP到RTU的轉(zhuǎn)換;
uIP.c和uIP.h:將Modbus/TCP網(wǎng)口數(shù)據(jù)通過(guò)uIP協(xié)議棧發(fā)送到網(wǎng)絡(luò)上。
數(shù)據(jù)采集網(wǎng)關(guān)將底層下位機(jī)的數(shù)據(jù)類型Modbus RTU轉(zhuǎn)化成Modbus TCP后,再借助以太網(wǎng)向上傳送,此處可借助TCP/IP協(xié)議棧實(shí)現(xiàn)。而傳統(tǒng)的TCP/IP協(xié)議棧實(shí)現(xiàn)起來(lái)過(guò)程較為復(fù)雜且實(shí)時(shí)性較差,考慮到系統(tǒng)硬件資源的限制,所以本文引入輕量級(jí)的TCP/IP協(xié)議?!猽IP協(xié)議棧,以實(shí)現(xiàn)以太網(wǎng)傳輸功能[10]。
uIP協(xié)議棧是一種免費(fèi)、可實(shí)現(xiàn)的極小的TCP/IP協(xié)議棧,可以使用于由8位或16位微處理器構(gòu)建的嵌入式系統(tǒng)[11]。
目前,市場(chǎng)上的協(xié)議轉(zhuǎn)換網(wǎng)關(guān)主要針對(duì)某些固定的應(yīng)用需求,協(xié)議種類比較單一,且只能實(shí)現(xiàn)協(xié)議間一對(duì)一的轉(zhuǎn)換。本文設(shè)計(jì)是針對(duì)新疆某熱電廠運(yùn)行管理的現(xiàn)狀提出的,網(wǎng)關(guān)具有支持多種串口設(shè)備組網(wǎng),以及能建立串口與網(wǎng)口間橋梁的特點(diǎn)。
參考文獻(xiàn)
[1] 唐俊,蔣健,謝申喜.基于樹莓派的能耗數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計(jì)[J].測(cè)控技術(shù),2017(3):98?100.
TANG Jun, JIANG Jian, XIE Shenxi. Design of energy consumption data acquisition gateway based on Raspberry Pi [J]. Measurement & control technology, 2017(3): 98?100.
[2] 毛蘇杭,宋蘊(yùn)璞,劉林.基于工業(yè)網(wǎng)關(guān)的鋼鐵企業(yè)實(shí)時(shí)數(shù)據(jù)采集技術(shù)[J].物聯(lián)網(wǎng)技術(shù),2015,5(12):10?12.
MAO Suhang, SONG Yunpu, LIU Lin. Real?time data acquisition technology of steel enterprises based on industrial gateways [J]. Internet of Things technologies, 2015, 5(12): 10?12.
[3] 霍昕,關(guān)麗嘉.如何有效提升信令采集網(wǎng)關(guān)的數(shù)據(jù)完整性[J].中國(guó)新通信,2015(13):64.
HUO Xin, GUAN Lijia. How to effectively improve the data integrity of the signal acquisition gateway [J]. China new communications, 2015(13): 64.
[4] 李琦,張康,王月明.基于CoAP協(xié)議的數(shù)據(jù)采集網(wǎng)關(guān)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2015(6):154?156.
LI Qi, ZHANG Kang, WANG Yueming. Design of data acquisition gateway based on CoAP protocol [J]. Electronic technology application, 2015(6): 154?156.
[5] XU Sen, REN Jia, SU Jie. Design of the Modbus communication through serial port in QNX operation system [C]// Procee?dings of 2008 Computing, Communication, Control, and Ma?nagement Conference. Guangzhou, China: IEEE, 2008: 434?438.
[6] KUANG Jian, WANG Guibao, BIAN Jiali. A Modbus protocol stack compatible with RTU/TCP frames and embedded application [M]// ZHU Min. Business, economic, financial sciences. Berlin: Springer?Verlag, 2012: 765?770.
[7] 陳巖.安全隔離網(wǎng)關(guān)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的采集在宣鋼的應(yīng)用[J].通訊世界,2015(11):266.
CHEN Yan. The application of the security isolation gateway to the collection of database data in Xuanhua Iron and Steel Co., Ltd. [J]. Communications world, 2015(11): 266.
[8] 劉清茂,萬(wàn)春紅,楊彩玲,等.基于ZigBee的水泥生產(chǎn)過(guò)程電量無(wú)線采集[J].電氣技術(shù),2015(3):85?86.
LIU Qingmao, WAN Chunhong, YANG Cailing, et al. Wireless collection of electricity in cement production process based on ZigBee [J]. Electric technology, 2015(3): 85?86.
[9] 郭藍(lán)天.數(shù)據(jù)采集網(wǎng)關(guān)的研制及其在中型熱電廠運(yùn)行管理系統(tǒng)中的應(yīng)用[D].青島:青島科技大學(xué),2012.
GUO Lantian. Development of data acquisition gateway and its application in medium?sized thermal power plant operation ma?nagement system [D]. Qingdao: Qingdao University of Science and Technology, 2012.
[10] 吳磊,李振亮.一種網(wǎng)絡(luò)溫濕度控制器設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)測(cè)量與控制,2014(10):3165?3167.
WU Lei, LI Zhenliang. Design and implementation of a network temperature and humidity controller [J]. Computer measurement & control, 2014(10): 3165?3167.
[11] 謝文娣.基于DSP的嵌入式uIP TCP/IP協(xié)議棧的應(yīng)用研究[D].南京:南京郵電大學(xué),2012.
XIE Wendi. Application research of embedded uIP TCP/IP protocol stack based on DSP [D]. Nanjing: Nanjing University of Posts and Telecommunications, 2012.