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