文獻(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ā)起的查詢(xún)和命令從設(shè)備的格式,,另一種是從設(shè)備收到主機(jī)命令后的應(yīng)答格式,。兩種格式在大多數(shù)情況下相同,如表1所示。
從機(jī)地址:地址信息為1 B,,表示要接收命令或發(fā)出應(yīng)答響應(yīng)的從設(shè)備的地址,。從設(shè)備的地址的合法范圍是0~247(十進(jìn)制),主機(jī)將要查詢(xún)或命令的從設(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é)議能很好地滿(mǎn)足這個(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)輸出控制閥門(mén)繼電器,,并且可以顯示閥門(mén)開(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)用戶(hù)串口、以太網(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è)為T(mén)CP 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è)備都屬于新建的父類(lèi)TModbus,,然后分為T(mén)Modbusoverslip類(lèi)和TModbusovertcp類(lèi),,這些類(lèi)屬于通信協(xié)議類(lèi)。
本設(shè)計(jì)的系統(tǒng)接口也需要建立類(lèi)TTcpclient,,這個(gè)類(lèi)基于TWSocket類(lèi),,TWSocket類(lèi)的作用是將Windows Socket封裝起來(lái),TTcpclient起到了TCP客戶(hù)端的作用,,負(fù)責(zé)連接Server端,,并進(jìn)行數(shù)據(jù)處理。
為了使得工作人員在主機(jī)端便利地控制各種設(shè)備,,控制界面應(yīng)美觀,,因此建立了基于TPanel的類(lèi)TDevGUI,系統(tǒng)界面中的圖形都基于此類(lèi),。
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ī)作為客戶(hù)端來(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.