文獻(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ò)逐漸集成起來,,形成信息高速公路,形成公用數(shù)據(jù)網(wǎng)絡(luò),,而在此基礎(chǔ)上,,傳統(tǒng)的工業(yè)控制領(lǐng)域也正經(jīng)歷一場(chǎng)前所未有的變革,開始向網(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)換器來解決這個(gè)問題,,并可拓展為用手機(jī)通過WiFi來控制設(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)來響應(yīng)主機(jī),,告訴主機(jī)是誰作出響應(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,;用來設(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,,若相同則接收,,若不同則丟棄,以此來校驗(yàn)傳輸?shù)臄?shù)據(jù)是否有誤,。
1.2 Modbus over TCP協(xié)議
基于Modbus over TCP協(xié)議的設(shè)備可以直接接入以太網(wǎng),,無需經(jīng)過協(xié)議轉(zhuǎn)換器,本系統(tǒng)中只有少數(shù)設(shè)備是基于該協(xié)議的,,因此不做詳細(xì)介紹,。
1.3 SLIP協(xié)議
SLIP協(xié)議是一種在串行線路上傳輸數(shù)據(jù)的協(xié)議,如果使用SLIP協(xié)議來進(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é)議來實(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ù)在開頭和結(jié)尾加入一個(gè)END字符,END字符標(biāo)志著數(shù)據(jù)的開始和結(jié)束,。如果傳輸?shù)臄?shù)據(jù)中包含END字符,,就會(huì)造成錯(cuò)誤的接收和結(jié)束,所以引入ESC字符來防止這種情況的發(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ù)封裝過程如圖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硬件串口用來進(jìn)行串行通信,,其中3路串口用來連接協(xié)議轉(zhuǎn)換機(jī)箱的3路RS485串口,另外一個(gè)串口用來傳輸SLIP協(xié)議打包的數(shù)據(jù),。未使用的I/O口可以用來輸出控制閥門繼電器,,并且可以顯示閥門開關(guān)的到位指示,圖3為軟件流程圖,。
運(yùn)用ARM開發(fā)工具來進(jìn)行設(shè)備數(shù)據(jù)的處理,,先對(duì)串口的波特率、I/O口的輸入輸出模式等進(jìn)行初始化,,然后對(duì)數(shù)據(jù)處理過程中的各個(gè)函數(shù)進(jìn)行定義,。下面對(duì)幾個(gè)主要函數(shù)進(jìn)行說明。
先定義函數(shù)calcCRC16用于計(jì)算Modbus RTU的CRC16校驗(yàn)碼,。當(dāng)主機(jī)對(duì)從設(shè)備發(fā)出請(qǐng)求時(shí),,請(qǐng)求數(shù)據(jù)通過以太網(wǎng)傳輸過來,經(jīng)過串口進(jìn)入ARM進(jìn)行解包處理,,并識(shí)別出請(qǐng)求是發(fā)送給哪個(gè)從設(shè)備的,,從而將相應(yīng)數(shù)據(jù)傳送給對(duì)應(yīng)設(shè)備的串口,這個(gè)過程由processNetworkData函數(shù)實(shí)現(xiàn),。
當(dāng)從設(shè)備響應(yīng)主機(jī)發(fā)出的請(qǐng)求時(shí),,通過RS-485接口傳輸?shù)臄?shù)據(jù)格式為Modbus RTU,消息幀需要通過SLIP協(xié)議進(jìn)行打包,,因此定義一個(gè)sendSlipPacket函數(shù),,然后定義函數(shù)來處理對(duì)應(yīng)RS485端口接收到的數(shù)據(jù),。若判斷數(shù)據(jù)包還沒有接收完,,則不進(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ù)通過串口發(fā)送后,并不能進(jìn)入以太網(wǎng)進(jìn)行傳輸,,因此采用了深圳海凌科電子有限公司的HLK-RM04,。RM04模塊是海凌科電子推出的嵌入式UART-ETH-WIFI(串口-以太網(wǎng)-無線)模塊,內(nèi)置TCP/IP協(xié)議棧,,能夠?qū)崿F(xiàn)用戶串口,、以太網(wǎng)、無線(WiFi)3個(gè)接口之間的轉(zhuǎn)換,,傳統(tǒng)的串口設(shè)備在不需要更改任何設(shè)置的情況下,,即可通過網(wǎng)絡(luò)傳輸數(shù)據(jù)。
先通過網(wǎng)線將模塊與PC相連接,,進(jìn)入模塊配置界面來設(shè)定模塊的IP地址,、網(wǎng)關(guān)、網(wǎng)絡(luò)協(xié)議等,。將RM04的模式設(shè)為TCP Server,,該模式下模塊監(jiān)聽指定端口,等待TCP Client連接,,連接成功后,,模塊將串口TCP數(shù)據(jù)發(fā)送給連接的各個(gè)TCP Client,如圖4所示,。將ARM模塊的輸出串口與RM04模塊的串口相連,,就可以把Modbus RTU數(shù)據(jù)轉(zhuǎn)換成TCP數(shù)據(jù),并通過以太網(wǎng)傳輸,。
2.3 從設(shè)備隔離部分
RS485接口的設(shè)備大多工作在工業(yè)自動(dòng)化領(lǐng)域,,特別容易受到失控電壓和電流所帶來的負(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è)備,需要開發(fā)對(duì)應(yīng)的上位機(jī)軟件來進(jìn)行控制和監(jiān)測(cè),。本上位機(jī)使用Delphi語言在XE7平臺(tái)下設(shè)計(jì),。
基于Modbus協(xié)議的設(shè)備都屬于新建的父類TModbus,然后分為TModbusoverslip類和TModbusovertcp類,,這些類屬于通信協(xié)議類,。
本設(shè)計(jì)的系統(tǒng)接口也需要建立類TTcpclient,這個(gè)類基于TWSocket類,,TWSocket類的作用是將Windows Socket封裝起來,,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)想成為了可能。
通過RM04模塊配置界面將模塊工作方式設(shè)定為WiFi AP模式,,手機(jī)作為客戶端來連接WiFi,,將ARM中未使用的2個(gè)I/O口拓展為串口,進(jìn)而控制設(shè)備,。
4 結(jié)束語
本文對(duì)水蓄冷控制系統(tǒng)中無法使用主機(jī)通過以太網(wǎng)控制設(shè)備的問題進(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.