翟志華 李夢宇
摘 要:基于互聯(lián)網(wǎng)+戰(zhàn)略的實施,構(gòu)建智能化電網(wǎng)需要構(gòu)建統(tǒng)一的通信網(wǎng)絡(luò)及協(xié)議,現(xiàn)有的現(xiàn)場總線網(wǎng)絡(luò)及協(xié)議已經(jīng)不能滿足當(dāng)前城市智能化發(fā)展的要求,而發(fā)展太網(wǎng)則成為發(fā)展的必然手段,因此基于MODBUS-RTU協(xié)議通信軟件的設(shè)計是解決上述問題的根本原因。因此本文闡述基于MODBUS-RTU協(xié)議通信軟件的設(shè)計與實現(xiàn)。
關(guān)鍵詞:MODBUS-RTU;集中監(jiān)控;以太網(wǎng)
隨著互聯(lián)網(wǎng)+戰(zhàn)略以及構(gòu)建智慧城市的要求,MODBUS協(xié)議被廣泛的應(yīng)用,這主要是因為MODBUS具有免費、開放、簡單的特點,因此其被越來越多智能通訊設(shè)備所使用。MODBUS協(xié)議最早是由美國的Modicon公司推出的,隨后在1998年施耐德公司推出的MODBUS TCP網(wǎng)絡(luò)協(xié)議的出現(xiàn)更好地滿足了市場和用戶的需求,并且其在工業(yè)自動化中得到應(yīng)用。MODBUS協(xié)議之所以被廣泛的應(yīng)用主要是因為:一是MODBUS協(xié)議標(biāo)準(zhǔn),開放性比較強;二是可以支持多種設(shè)備接口,而且還可以在多種介質(zhì)上進(jìn)行傳送;三是該協(xié)議最簡單、最緊湊,而且其很容易被人接受??傮w來說MODBUS協(xié)議就是實現(xiàn)了通信參與者的從屬關(guān)系,將主站向從站進(jìn)行通信請求,從站在接到主站的請求之后,按照相應(yīng)的要求進(jìn)行連接,因為從站具有247個地址編碼,因此其可以接收多個主站的通信請求,實現(xiàn)了通信信息轉(zhuǎn)化的高速、簡單以及可靠等要求。MODBUS協(xié)議定義了一個控制器能認(rèn)識使用的消息結(jié)構(gòu),并且描述了控制器請求訪問其他設(shè)備的過程,比如在客戶機發(fā)出請求之后,服務(wù)器需要接收客戶機的請求,并且做出相應(yīng)的處理分析,將處理結(jié)果向客戶機反饋,客戶機接到反饋之后就會做出相應(yīng)的策略準(zhǔn)備。
1 MODBUS協(xié)議中的兩種傳輸方式及幀格式
1.1 ASCII和RTU兩種傳輸方式
通過實踐,標(biāo)準(zhǔn)的MODBUS協(xié)議主要有兩種傳輸模式,也就是ASCII和RTU,這兩種傳輸模式對傳輸信息的機構(gòu)都進(jìn)行了定義,在實踐過程中,采于MODBUS串行通信時需要所有參加通信設(shè)備輸出模式都要保持一致,選擇一種傳輸模式。ASCII在實踐中應(yīng)用的相對比較少,其最大的優(yōu)點在于可以將字符發(fā)送的時間間隔控制在1秒而且不產(chǎn)生錯誤。而RTU傳輸模式,傳輸?shù)南⒅忻?個字節(jié)包含兩個四位十六進(jìn)制字符,因此其傳輸字符的密度比較高,因此此種傳輸模式被廣泛的應(yīng)用。具體的傳輸特征見表1:
綜合上述的兩種傳輸渠道,我們一般會將MODBUS的消息作為標(biāo)準(zhǔn),標(biāo)志著設(shè)備開始工作與終止工作的時間,比如通信設(shè)備在接收到消息之后,允許接受消息的設(shè)備會按照程序自動讀取消息地址,然后判斷消息被那個設(shè)備處理,并且斷定消息的處理結(jié)果。一般消息的發(fā)送時間字符都是有著嚴(yán)格要求的,以3.5個字符的停頓時間作為開始(如表2的T1-T2-T3-T4所示)。一般在網(wǎng)絡(luò)波特多樣化的環(huán)境背景下,字符的時間是比較容易實現(xiàn)的,因此我們可以將消息傳輸?shù)牡谝粋€字符設(shè)定為設(shè)備地址,傳輸字符的結(jié)構(gòu)是十六進(jìn)制的,因此系統(tǒng)會在接收到第一個信號為開始,并且對每個地址域進(jìn)行判斷,判斷是否是自己發(fā)送的,在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標(biāo)定了消息的結(jié)束。一個新的消息可在此停頓后開始。
1.2 一個完整的消息幀格式所包含內(nèi)容
在整個幀中必須要連續(xù)的進(jìn)行消息的傳輸,而且傳輸?shù)臅r間不能超過3.5個字符時間,因為3.5個字符時間被接受設(shè)備看作一個時間節(jié)點,如果接受設(shè)備在接收到某個信息之后,如果在3.5個字符時間內(nèi),其沒有接收到信息那么該設(shè)備就會將后面接收的信息作為新的指令,當(dāng)然如果在3.5個字符時間內(nèi)接收到了新的信息,那么無論其是否屬于新的消息,其都會將其作為上一信息的延續(xù),可以說這樣的情況都會導(dǎo)致出現(xiàn)錯誤。
一個典型的消息幀如下所示:
消息幀一般包括兩個字符,以RTU報文幀為例,其第一個字節(jié)屬于地址,其主要是代表主站將信息發(fā)送到從站的地址,主要是基于從站都具有唯一的地址編碼,這樣可以保證信息準(zhǔn)確地傳遞到從站中,而從站在接收到信息之后,要使用地址開頭的報文幀進(jìn)行響應(yīng)。功能碼是報文幀的第二個字節(jié),其主要是主站告訴從站應(yīng)該執(zhí)行怎樣的操作。而ASIC模式的字符幀格式則與此模式差不多,其主要是采取兩個字符報送文幀的一個八位字節(jié),以此實現(xiàn)通信。但是報文幀字符的時間間隔為1秒,超過1秒就會出現(xiàn)傳輸錯誤。一般在智能設(shè)備的MOdbus應(yīng)用層中對于通信參數(shù)的要求是非常嚴(yán)格的,比如在智能設(shè)備設(shè)定為斷路器時,需要在用戶層定義狀態(tài)參數(shù)等,以此保證用戶能夠根據(jù)一定的信息進(jìn)行網(wǎng)絡(luò)通信。
MOdbus網(wǎng)絡(luò)術(shù)語工業(yè)通信系統(tǒng),是由智能終端的可編程控制器實現(xiàn)的,因此在某種意義上實現(xiàn)消息幀的手段就是要強化對數(shù)據(jù)的傳輸,也就是說Modbus協(xié)議中的數(shù)據(jù)流是由報文中的間隔實現(xiàn)同步的,因此需要從以下這兩個方面入手:一是系統(tǒng)必須要采取單MCU設(shè)計,才起中斷方式實現(xiàn)實時接收,保證報文的同步性;二是必須要對CRC進(jìn)行校驗,但是校驗則需要占有一定的軟件運行時間,因此其會影響反應(yīng)速度,因此如果采取標(biāo)準(zhǔn)的CRC計算公式的話會影響系統(tǒng)的運行速度,因此基于現(xiàn)實因素的考慮,基于通信工作的要求采取查表法計算CRC,這樣可以保證速度以最快的效率實現(xiàn)通信的需求。
對于MODBUS網(wǎng)絡(luò)的錯誤檢驗主要有奇偶校驗和幀檢測。它們之間在應(yīng)用范疇上存在一定的差距,比如奇偶校驗主要是對字符的應(yīng)用,而幀檢測則主要針對整個消息。在奇偶校驗中需要用戶對配置器進(jìn)行設(shè)定,如果將控制器設(shè)定為奇校驗,那么“1”位數(shù)將算到每個字符的位數(shù)中;幀檢測主要是分為LRC檢測和CRC檢測。CRC檢測的是整個消息內(nèi)容,因此當(dāng)設(shè)備按照CRC計算得到的消息之后進(jìn)行對比,如果對比結(jié)果相同那么該消息就是正確的,反之則相反。
2 PC機上實現(xiàn)MODBUS通信的方法
一般通信接口的設(shè)計必須要具備高速、安全可靠的要求,因此在PC機上實現(xiàn)MODBUS通信的方法主要是要達(dá)到上述要求。高速就是保證通訊接口要支持1200-38400之間的標(biāo)準(zhǔn)通信波特率。安全可靠就是其要適應(yīng)不同的環(huán)境,并且能夠滿足高負(fù)荷的絞線。因此在實踐中我們經(jīng)常適應(yīng)RS-232串行通信標(biāo)準(zhǔn),而且此種方式在工業(yè)領(lǐng)域內(nèi)非常多見,其屬于一種低速率串行通信中增加通信距離的單端標(biāo)準(zhǔn),一般典型的RS-232有9個接腳,因此再具體的上位機與通信接口的連接上是通過使用RS-485插卡或者RS-232/RS-485轉(zhuǎn)換模塊,以此實現(xiàn)多出通信的連接。本文設(shè)計的上位機的通信方法是采用帶有120特性阻抗的屏蔽雙絞線,確認(rèn)在通訊電纜的兩邊都有終端匹配電阻,并將屏蔽小心接地。從站數(shù)限制為32個以下。
實現(xiàn)通信的過程中要對從站地址、寄存器地址及數(shù)據(jù)量等進(jìn)行判定。若是與PLC或者其他標(biāo)準(zhǔn)的通信設(shè)備進(jìn)行連接時,需要考慮實際的結(jié)構(gòu),即寄存器地址圍,如0X——表示輸出線圈、1X——表示離散量輸入、3X——表示輸入寄存器、4X——表示保持寄存器。注意,寄存器地址是從1開始的,如40001代表0號保持寄存器地址。MODBUS協(xié)議規(guī)定每個消息不超過256個字節(jié)。
以從站為例,下圖是實現(xiàn)通信的流程圖:
3 利用Visual C++實現(xiàn)計算機與串口設(shè)備的通信
3.1 MSComm控件通訊方式
實現(xiàn)通信的主要方式就是尋求合理的串口,目前人們所采取的串口主要是利用MSComm控件,此種模式在進(jìn)行程序編程時非常方便,而且其可以適用于不同的語言環(huán)境中,MSComm控件通信方式主要包括以下兩種:一是事件驅(qū)動方式,事件驅(qū)動方式主要是根據(jù)串行端口在傳輸和接收數(shù)據(jù)時需要系統(tǒng)給予通知的原理,比如在串口接收字符時如果其中存在某些變化時,可以利用該方式對事件進(jìn)行捕獲,同時還可以對某些錯誤進(jìn)行糾正,此種方法的最大優(yōu)點就是實現(xiàn)了快速響應(yīng),具有可靠的穩(wěn)定性;另一種是查詢方式。查詢方式實際上還是事件驅(qū)動的延伸,只是在某些情況下采取此種模式會更加方便,比如在編寫一個簡單的程序時,是沒有必要對每個字符產(chǎn)生事件的,因此可以采取查詢方式。
3.2 MSComm 控件的常用屬性
通過當(dāng)前的程序設(shè)計理論,MSComm空間的屬性主要包括:CommPort;Settings;PortOpen;Input 以及Output等。
常數(shù)值描述:comEvSend 1 發(fā)送事件;comEvReceive 2 接收事件;comEvCTS 3 clear-to-send 線變化;comEvDSR 4 data-set ready 線變化;comEvCD 5 文件結(jié)束。
本軟件選用RTU模式,利用查表法實現(xiàn)CRC校驗,實現(xiàn)對串口設(shè)備內(nèi)數(shù)據(jù)的查詢和預(yù)置兩個功能。主要函數(shù)包括:OnInitDialog():實現(xiàn)對串口的初始化;OnButtonSend():向串口發(fā)送數(shù)據(jù);OnComm():當(dāng)輸入緩沖區(qū)有數(shù)據(jù)時,將數(shù)據(jù)讀出。軟件運行界面如圖3:
4 結(jié)論
本文簡述MODBUS協(xié)議,分析了ASCII和RTU兩種傳輸方式的各自特點及幀格式,最終選取RTU格式作為工業(yè)現(xiàn)場的通訊協(xié)議,以此為基礎(chǔ),探索在Visual C++環(huán)境下使用MSComm 控件進(jìn)行編程,并選取SIMENSE S7-300作為下位機試驗,此程序在實踐中得到檢驗,證實可行,為工業(yè)現(xiàn)場通訊調(diào)試及安裝提供了有利的軟件支持。
參考文獻(xiàn):
[1]陳廣慶,徐克寶,劉廷瑞.基于VB的壓力校驗儀計算機校驗系統(tǒng)[J].煤礦機械,2011(02).
[2]董平,李明菊,王鵬,郭殿林.API串口通信在動力配煤控制系統(tǒng)中應(yīng)用[J].潔凈煤技術(shù),2009(02).
[3]王延年,陳紅,高霞.基于CP341模塊的MODBUS RTU從站協(xié)議免驅(qū)動通信[J].西安工程大學(xué)學(xué)報,2010(12).
[4]萬鵬,趙世平,徐弘軒.基于Modbus協(xié)議的PLC與LabVIEW的通訊實現(xiàn)[J].中國測試技術(shù),2008(05).