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