文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.10.019
中文引用格式: 吳志杰,王新霞,孔凡敏,等. 多路隔離的Modbus協(xié)議轉(zhuǎn)換器的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2016,42(10):77-79.
英文引用格式: Wu Zhijie,Wang Xinxia,Kong Fanmin,et al. Design of multiple isolated Modbus protocol converter[J].Application of Electronic Technique,2016,42(10):77-79.
0 引言
隨著控制、計(jì)算機(jī)、通信、網(wǎng)絡(luò)等技術(shù)的發(fā)展,Internet正在把全世界的計(jì)算機(jī)系統(tǒng)和通信網(wǎng)絡(luò)逐漸集成起來(lái),形成信息高速公路,形成公用數(shù)據(jù)網(wǎng)絡(luò),而在此基礎(chǔ)上,傳統(tǒng)的工業(yè)控制領(lǐng)域也正經(jīng)歷一場(chǎng)前所未有的變革,開(kāi)始向網(wǎng)絡(luò)化方向發(fā)展,形成新的控制網(wǎng)絡(luò)[1]。以太網(wǎng)作為一種具有高速數(shù)據(jù)傳輸能力的網(wǎng)絡(luò)成為了大多數(shù)工業(yè)控制網(wǎng)絡(luò)的選擇,而將控制系統(tǒng)中需要用到的各種儀器接入以太網(wǎng)進(jìn)行集中隔離控制成為一項(xiàng)重要的課題。在水蓄冷控制系統(tǒng)中大多數(shù)底層的電子設(shè)備的接口為RS485接口,通信協(xié)議為Modbus RTU,本文設(shè)計(jì)了一種多路隔離的協(xié)議轉(zhuǎn)換器來(lái)解決這個(gè)問(wèn)題,并可拓展為用手機(jī)通過(guò)WiFi來(lái)控制設(shè)備。
1 轉(zhuǎn)換器涉及通信協(xié)議介紹
1.1 Modbus RTU協(xié)議
Modbus串行鏈路協(xié)議包括RTU模式和ASCII模式,本設(shè)計(jì)用到的為Modbus RTU模式。
Modbus RTU的幀格式有兩種:一種是主機(jī)發(fā)起的查詢和命令從設(shè)備的格式,另一種是從設(shè)備收到主機(jī)命令后的應(yīng)答格式。兩種格式在大多數(shù)情況下相同,如表1所示。
從機(jī)地址:地址信息為1 B,表示要接收命令或發(fā)出應(yīng)答響應(yīng)的從設(shè)備的地址。從設(shè)備的地址的合法范圍是0~247(十進(jìn)制),主機(jī)將要查詢或命令的從設(shè)備地址信息放入從機(jī)地址區(qū)內(nèi),選擇對(duì)應(yīng)的從設(shè)備,而從設(shè)備將自己的地址信息放入從機(jī)地址區(qū)內(nèi)來(lái)響應(yīng)主機(jī),告訴主機(jī)是誰(shuí)作出響應(yīng)。
功能碼:功能碼為1 B,表示主機(jī)要求從設(shè)備進(jìn)行何種操作,或者從設(shè)備應(yīng)答的數(shù)據(jù)為何種操作下得到的數(shù)據(jù)。在控制系統(tǒng)中經(jīng)常用到的讀取從設(shè)備狀態(tài)的功能碼有:0x01,0x02,0x03,0x04;用來(lái)設(shè)定從設(shè)備狀態(tài)的功能碼有0x05和0x06。Modbus協(xié)議的各常用功能碼對(duì)應(yīng)功能如表2所示。
數(shù)據(jù)域:數(shù)據(jù)信息的字節(jié)數(shù)根據(jù)功能碼而異,表示主機(jī)對(duì)從設(shè)備的狀態(tài)的設(shè)定,或者主機(jī)讀取的從設(shè)備寄存器數(shù)據(jù)。當(dāng)主機(jī)設(shè)定線圈或者寄存器時(shí),命令格式的數(shù)據(jù)域和圖1一樣,而如果要讀取狀態(tài)時(shí),則數(shù)據(jù)域的第一段為狀態(tài)數(shù)據(jù)的個(gè)數(shù)。數(shù)據(jù)的格式為高字節(jié)在前,低字節(jié)在后。
校驗(yàn)碼:校驗(yàn)碼為2 B,RTU模式下使用CRC校驗(yàn)碼,是由發(fā)送設(shè)備輸出的數(shù)據(jù)計(jì)算得到,在接收數(shù)據(jù)時(shí)先用同一方法再算一次CRC,若相同則接收,若不同則丟棄,以此來(lái)校驗(yàn)傳輸?shù)臄?shù)據(jù)是否有誤。
1.2 Modbus over TCP協(xié)議
基于Modbus over TCP協(xié)議的設(shè)備可以直接接入以太網(wǎng),無(wú)需經(jīng)過(guò)協(xié)議轉(zhuǎn)換器,本系統(tǒng)中只有少數(shù)設(shè)備是基于該協(xié)議的,因此不做詳細(xì)介紹。
1.3 SLIP協(xié)議
SLIP協(xié)議是一種在串行線路上傳輸數(shù)據(jù)的協(xié)議,如果使用SLIP協(xié)議來(lái)進(jìn)行通信,則目標(biāo)IP地址和源IP地址都必須已知[2]。SLIP協(xié)議是鏈路層協(xié)議,只能和TCP/IP一起使用。由于本設(shè)計(jì)可以接入3個(gè)RS-485接口的設(shè)備,只有一個(gè)輸出數(shù)據(jù)的串口,3路數(shù)據(jù)可能同時(shí)發(fā)送,所以需要一種對(duì)數(shù)據(jù)打包的協(xié)議來(lái)實(shí)現(xiàn),而設(shè)備只需接入以太網(wǎng)進(jìn)行監(jiān)控,并且TCP/IP提供了很好的可靠性保證,所以SLIP協(xié)議能很好地滿足這個(gè)需求。
SLIP協(xié)議定義了2個(gè)特殊的字符:END(0xC0)和ESC(0xDB)。需要打包的數(shù)據(jù)在開(kāi)頭和結(jié)尾加入一個(gè)END字符,END字符標(biāo)志著數(shù)據(jù)的開(kāi)始和結(jié)束。如果傳輸?shù)臄?shù)據(jù)中包含END字符,就會(huì)造成錯(cuò)誤的接收和結(jié)束,所以引入ESC字符來(lái)防止這種情況的發(fā)生。傳輸原始數(shù)據(jù)中存在的END字符轉(zhuǎn)換為ESC(0xDB)或ESC-END(0xDC),而存在的ESC字符則轉(zhuǎn)換為ESC(0xDB)或ESC-ESC(0xDD)[3]。SLIP協(xié)議對(duì)應(yīng)的數(shù)據(jù)封裝過(guò)程如圖1所示。
2 設(shè)計(jì)實(shí)現(xiàn)
協(xié)議轉(zhuǎn)換器的系統(tǒng)框圖如圖2所示。
2.1 ARM模塊
本協(xié)議轉(zhuǎn)換器的主控模塊使用ARM,選擇了32 bit的ARM(Atmel SAM3X8E),它擁有84 MHz的CPU時(shí)鐘頻率、96 KB的SRAM、512 KB的Flash和54個(gè)數(shù)字I/O口。4路UART硬件串口用來(lái)進(jìn)行串行通信,其中3路串口用來(lái)連接協(xié)議轉(zhuǎn)換機(jī)箱的3路RS485串口,另外一個(gè)串口用來(lái)傳輸SLIP協(xié)議打包的數(shù)據(jù)。未使用的I/O口可以用來(lái)輸出控制閥門繼電器,并且可以顯示閥門開(kāi)關(guān)的到位指示,圖3為軟件流程圖。
運(yùn)用ARM開(kāi)發(fā)工具來(lái)進(jìn)行設(shè)備數(shù)據(jù)的處理,先對(duì)串口的波特率、I/O口的輸入輸出模式等進(jìn)行初始化,然后對(duì)數(shù)據(jù)處理過(guò)程中的各個(gè)函數(shù)進(jìn)行定義。下面對(duì)幾個(gè)主要函數(shù)進(jìn)行說(shuō)明。
先定義函數(shù)calcCRC16用于計(jì)算Modbus RTU的CRC16校驗(yàn)碼。當(dāng)主機(jī)對(duì)從設(shè)備發(fā)出請(qǐng)求時(shí),請(qǐng)求數(shù)據(jù)通過(guò)以太網(wǎng)傳輸過(guò)來(lái),經(jīng)過(guò)串口進(jìn)入ARM進(jìn)行解包處理,并識(shí)別出請(qǐng)求是發(fā)送給哪個(gè)從設(shè)備的,從而將相應(yīng)數(shù)據(jù)傳送給對(duì)應(yīng)設(shè)備的串口,這個(gè)過(guò)程由processNetworkData函數(shù)實(shí)現(xiàn)。
當(dāng)從設(shè)備響應(yīng)主機(jī)發(fā)出的請(qǐng)求時(shí),通過(guò)RS-485接口傳輸?shù)臄?shù)據(jù)格式為Modbus RTU,消息幀需要通過(guò)SLIP協(xié)議進(jìn)行打包,因此定義一個(gè)sendSlipPacket函數(shù),然后定義函數(shù)來(lái)處理對(duì)應(yīng)RS485端口接收到的數(shù)據(jù)。若判斷數(shù)據(jù)包還沒(méi)有接收完,則不進(jìn)行處理,返回。若數(shù)據(jù)包處于接收錯(cuò)誤狀態(tài)(超長(zhǎng),數(shù)據(jù)錯(cuò)誤等),則清空接收緩沖區(qū)并返回。若收到一個(gè)完整的數(shù)據(jù)包,則SLIP編碼后由網(wǎng)絡(luò)端口(Serial)發(fā)送。
2.2 串口轉(zhuǎn)以太網(wǎng)模塊
經(jīng)SLIP協(xié)議打包的Modbus RTU數(shù)據(jù)通過(guò)串口發(fā)送后,并不能進(jìn)入以太網(wǎng)進(jìn)行傳輸,因此采用了深圳海凌科電子有限公司的HLK-RM04。RM04模塊是海凌科電子推出的嵌入式UART-ETH-WIFI(串口-以太網(wǎng)-無(wú)線)模塊,內(nèi)置TCP/IP協(xié)議棧,能夠?qū)崿F(xiàn)用戶串口、以太網(wǎng)、無(wú)線(WiFi)3個(gè)接口之間的轉(zhuǎn)換,傳統(tǒng)的串口設(shè)備在不需要更改任何設(shè)置的情況下,即可通過(guò)網(wǎng)絡(luò)傳輸數(shù)據(jù)。
先通過(guò)網(wǎng)線將模塊與PC相連接,進(jìn)入模塊配置界面來(lái)設(shè)定模塊的IP地址、網(wǎng)關(guān)、網(wǎng)絡(luò)協(xié)議等。將RM04的模式設(shè)為TCP Server,該模式下模塊監(jiān)聽(tīng)指定端口,等待TCP Client連接,連接成功后,模塊將串口TCP數(shù)據(jù)發(fā)送給連接的各個(gè)TCP Client,如圖4所示。將ARM模塊的輸出串口與RM04模塊的串口相連,就可以把Modbus RTU數(shù)據(jù)轉(zhuǎn)換成TCP數(shù)據(jù),并通過(guò)以太網(wǎng)傳輸。
2.3 從設(shè)備隔離部分
RS485接口的設(shè)備大多工作在工業(yè)自動(dòng)化領(lǐng)域,特別容易受到失控電壓和電流所帶來(lái)的負(fù)面影響,所以有必要在通信總線與邏輯控制器之間進(jìn)行電氣隔離。另外,本設(shè)計(jì)是對(duì)多路數(shù)據(jù)進(jìn)行轉(zhuǎn)換,為了防止各路信號(hào)的相互串?dāng)_和電氣噪聲的影響,隔離必不可少。
本設(shè)計(jì)使用了ADI公司的ADM2587E芯片,它提供了RS485通信的完整隔離方案。ADM2587E內(nèi)部集成了運(yùn)用isopower技術(shù)的DC/DC隔離電源,在單個(gè)封裝內(nèi)還集成了三通道隔離器、三態(tài)差分線路驅(qū)動(dòng)器和差分輸入接收機(jī),保護(hù)功能好,而且其體積小、功耗小,大大減少了占用電路板的面積。
2.4 上位機(jī)設(shè)計(jì)
在本控制系統(tǒng)中,要在主機(jī)端控制底層的電子設(shè)備,需要開(kāi)發(fā)對(duì)應(yīng)的上位機(jī)軟件來(lái)進(jìn)行控制和監(jiān)測(cè)。本上位機(jī)使用Delphi語(yǔ)言在XE7平臺(tái)下設(shè)計(jì)。
基于Modbus協(xié)議的設(shè)備都屬于新建的父類TModbus,然后分為TModbusoverslip類和TModbusovertcp類,這些類屬于通信協(xié)議類。
本設(shè)計(jì)的系統(tǒng)接口也需要建立類TTcpclient,這個(gè)類基于TWSocket類,TWSocket類的作用是將Windows Socket封裝起來(lái),TTcpclient起到了TCP客戶端的作用,負(fù)責(zé)連接Server端,并進(jìn)行數(shù)據(jù)處理。
為了使得工作人員在主機(jī)端便利地控制各種設(shè)備,控制界面應(yīng)美觀,因此建立了基于TPanel的類TDevGUI,系統(tǒng)界面中的圖形都基于此類。
3 協(xié)議轉(zhuǎn)換器的拓展功能
隨著移動(dòng)通信的不斷發(fā)展,手機(jī)成為了每個(gè)人必不可少的工具,所以考慮加入手機(jī)端對(duì)電子設(shè)備的控制,這樣工作人員就可以方便地查看設(shè)備的工作狀態(tài),而且在本設(shè)計(jì)中使用的HLK-RM04模塊還支持串口轉(zhuǎn)WiFi功能,這就使得構(gòu)想成為了可能。
通過(guò)RM04模塊配置界面將模塊工作方式設(shè)定為WiFi AP模式,手機(jī)作為客戶端來(lái)連接WiFi,將ARM中未使用的2個(gè)I/O口拓展為串口,進(jìn)而控制設(shè)備。
4 結(jié)束語(yǔ)
本文對(duì)水蓄冷控制系統(tǒng)中無(wú)法使用主機(jī)通過(guò)以太網(wǎng)控制設(shè)備的問(wèn)題進(jìn)行了討論,提出了一種工業(yè)中實(shí)用的多路隔離的Modbus協(xié)議轉(zhuǎn)換器的設(shè)計(jì)方法。本協(xié)議轉(zhuǎn)換器已投入使用,穩(wěn)定性強(qiáng),安全性好。
參考文獻(xiàn)
[1] 賈東耀,汪仁煌.工業(yè)控制網(wǎng)絡(luò)結(jié)構(gòu)的發(fā)展趨勢(shì)[J].工業(yè)儀表與自動(dòng)化裝置,2002(5):12-14.
[2] SHANMUGAM R,PADMINI R,NIVEDITA S.TCP/IP詳解[M].尹浩瓊,李劍,譯.北京:電子工業(yè)出版社,2003.
[3] 吳明光,崔家林,陳冠雄.串行網(wǎng)際協(xié)議在記錄儀通信中的應(yīng)用[J].科技通報(bào),2005,21(5):612-614.
[4] 沈建華.ARM處理器與嵌入式系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(11):5-7.
[5] 俞野秋,陳堅(jiān).Modbus和Modbus-TCP協(xié)議轉(zhuǎn)換研究[J].儀表技術(shù),2013(1):28-31.