隨著時代的進步,越來越多的企業開始向生產和管理自動化轉變,各種智能儀表不斷地應用到生產生活的各個領域。在工業控制方面,RS一485總線由于平衡差分傳輸特性具有的抗干擾性強、傳輸距離遠、有較大級聯能力等特點,非常適合組成工業級的多機通信系統。ModbusRTU通信協議是目前國際智能化儀表普遍采用的主流通信協議之一。在各種工業儀器儀表大量使用的今天,ModbusRTu通信協議和RS一485總線得到了廣泛的應用。本文主要從應用角度介紹在工業控制系統中實現該技術的具體方案。
1、Modbus RTU通信協議
Modbus RTU是Modicon公司開發的一種通信協議。它采用主從應答方式工作,其規范已在互聯網上公布,是一種在工業領域被廣為應用的真正開放的標準網絡通信協議。由于它具有免收許可費用,易于集成不同的設備,簡單易用,開發成本低,有著廣泛的知識資源支持等特點,已經成為一種公認的通用工業標準。有了這個標準,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。目前,國內許多生產商已在其產品和系統中遵循該協議標準。Modbus明U協議有兩種傳輸模式,即RTU模式和ASCII模式。其中RTU模式信息幀中的8bit數據包括兩個4 bit十六進制字符。相對于ASCII模式,RTU模式表達相同的信息需要較少的位數,且在相同通信速率下具有更大的數據流量。因此通常情況下,一般工業智能儀表儀器都是采用RTU模式的Modbus規約。
2、通信信息傳輸過程
信息傳輸為異步方式,并以字節為單位¨J。在主站和從站之間傳遞的通信信息是11 bit的字格式,如表1所示。

通信數據的信息幀格式Ⅲ如表2所示。
表2數據格式

當發送設備(主機)發送通信命令至接收設備(從機)時,符合相應地址碼的從機接收通信命令,并根據功能碼及相關要求讀取信息。如果CRC校驗無誤,則執行相應的任務,然后把執行結果返送給主機。返回的信息中包括地址碼、功能碼、執行后的數據以及CRC校驗碼。如果CRC校驗出錯,就不返回任何信息。地址碼是每次通信信息幀的第一個字節(8 bit:0~255)。這個字節表明由用戶設置地址的從機將接收主機發來的信息。每個從機都必須有惟一的地址碼,并且只有符合地址碼的從機才能響應回送信息。當從機返回信息時,返回數據均以各自的地址碼開始。功能碼是每次通信信息幀傳送的第二個字
節。Modbus通信規約可定義的功能碼為1~127。
作為主機請求發送,通過功能碼告訴從機應該執行什么動作。作為從機響應,從機返回的功能碼與主機發送來的功能碼一樣,表明從機已響應主機并且已進行相關的操作。Modbus部分功能碼如表3所示。

表3 Modbus部分功能碼
數據區包括需要由從機返送何種信息或執行什么動作。這些信息可以是數據、參考地址等。例如,主機通過功能碼03告訴從機返回寄存器的值(包含要讀取寄存器的起始地址及讀取寄存器的長度),則返回的數據包括寄存器的數據長度及數據內容。智能儀表一般使用固化好通信協議及工作指令的單片機。測控系統多采用的是單發多收的通信機制,因此在智能儀表中需允許用戶預先設定本機的地址碼,并且保證不能重復。此外,要注意通信波特率必須與上位機的通信波特率相匹配。在智能儀表的軟件開發中,遵循Modbus規約的通信幀結構需對上位機傳輸的命令進行解析,非呼叫對象應能及時重新恢復,等待接收狀態,響應呼叫的儀表要解析命令代碼,并進行相應的功能處理,對非法的命令操作要能回送報錯信息。
3、上位機軟件設計
上位機的通信軟件采用VB6.0開發。在VB6.0中可以使用MSComm控件對串口進行編程。該控件主要為RS一232的通用串口而設計。因此為了利用PC上現有的RS一232接口,通常使用RS一232/485轉換器。該轉換器一般通過邏輯門電路控制RxD、TxD和GND信號,從而自動對半雙工的RS一485串口進行控制。通過該轉換器,就可以像開發通用的RS一232串口一樣來快速開發基于RS一485串口的上位機通信軟件。上位機通信軟件主要包括初始化程序、命令字發送程序、上位機數據接收處理程序3部分。
3.1初始化程序
在初始化程序中,主要是設定好整個幀結構
的命令數組、傳輸波特率以及一些必須的串口初
始設定。具體的代碼如下:
ctrMSComm.InBufferSize=1024//開辟數據緩沖區
ctrMSComm.InBufferCount=0 //清除接收緩沖區中的字符
ctrMSComm.OutBufferSize=512 //設置傳輸緩沖區的大小
ctrMSComm.InputMode=1 //設定為二進制的數據流方式
ctrMSComm.InputLen=0 //一次讀人全部的數據
ctrMSComm.RThreshold=51 //接收到所需的字符個數后觸發OnComm事件
ctrMSComm.CommPort=1 //設定需要
的串口
etrMSComm.Settings=”9 600,n,8,1”//設定波特率和校驗方式
ctrMSComm.PortOpen=True //打開通信端口
上面的代碼一般都是串口初始化必須進行設定的幾個部分。根據個人需要可以在VB6.0中做一個初始化界面,對各個參數(如串口號、波特率等)進行自由設定,以提高初始化的靈活性和通用性。
3.2命令字發送程序
命令字發送應嚴格按照Modbus規約所設計的幀格式和上下位機在該規約基礎上所定義的通信協議。發送該指令的目的智能化配電監控單元返回三相相電流和線電壓的有效值、頻率、有功功率、無功功率、功率因數等參數。
3.3上位機數據接收和處理程序
MSComm控件提供了兩種處理通信的方式:事件驅動方式和查詢方式。本文采用的是事件驅動方式。該方式是處理串行端口交互作用的一種非常有效的方法。在許多情況下,當事件發生時需要得到通知,例如在串口接收緩沖區中有字符時可以利用MSComm控件的OnComm事件捕獲并處理這些通信事件;OnComm事件還可以檢查和處理通信錯誤,開發者可以在OnComm事件處理函數中加入自己的處理代碼。事件驅動方式的優點是程序響應及時,可靠性高。一般從下位機發送的數據都有一定的幀度,特別是對于一些固化好的智能儀表。因此好的方法是按照通信回送的幀長度,在上位機序中分別開辟兩個同樣長度的數組。一個作為收數組,用來一次性接收串口緩沖區中的數據;一個為安全數組,用來復制接收數組中的數據進行解析。這樣可以提高整個系統的容錯能力具體的代碼如下:
Private Sub
ctrMSComm—OnComm()
Dim
bytInput()As Byte
Dim
bytInSafe()As Byte
Dim
intlnputlen
As
Integer
Select CasectrMSComm.COmmEvent
Case comEvReceive //收到ctrM—
SComm.RThreshold個字符后觸發該事件
in
tlnputlen=ctrMSComm.InBuffer-
Count
bytInput=ctrMSComm.Input
//讀取接收緩沖區中的數據
ReDimPreserve
bytlnput(intlnputlen)
Fori=0to
intInputlen
bytlnSafe(i)=bytInput(i)
Nexti
End Select
End Sub
代碼中的bytInput()為接收數組,而bytIn—Safe()就是另外開辟的安全數組。在接收數組中,bytlnput(0)為從機地址“&H01”,bytlnput(1)為功能碼“&H03”,bytlnput(2)為返回的數據長度,bytlnput(3)和bytlnput(4)分別為寄存器地址是0103的高8位和低8位。在PDM一810PLM智能化配電監控單元中該寄存器存儲的是AB線電壓的有效值H』。通過下面的程序可將AB線電壓的有效值以十進制的形式表示
出來。
DimValuel As
Single
DimValue2 As
Single
Valuel=bytInput(3) //將二進制數轉
換成十迸制數
Value2=bytlnput(4)
Text.Text=Format(fValuel木256+Val-ue2)木0.1,“000.0”) //將高位和低位合成一個十進制數并保留一位小數,小數點的位置可根據實際需要靈活設置(對應“0X06”功能碼)
3.4 CRC校驗碼的實現方法
CRC(Cyclic Redundancy Check)即循環冗余碼校驗,它利用生成多項式產生校驗位進行編碼。目前在智能儀表中普遍使用的是CRC16(美國標準)校驗碼,其計算方法如下:
(1)預置1個16bit的寄存器為十六進制FFFF(即全為1)。稱此寄存器為CRC寄存器。
(2)把第一個8bit二進制數據與16bit的CRC寄存器的8bit相異或,把結果放于CRC寄存熙內門明;
(3)把cRc寄存器的內容右移一位,用0填補最高位,并檢查右移后的移出位。
(4)如果移出位為0,則重復第(3)步;如果移出位為1,則CRC寄存器與多項式&HA001進行異或。
(5)重復步驟(3)和(4),直到右移8次,這樣整個8bit數據就全部進行了處理。
(6)重復步驟(2)~(5),進行通信信息幀下一個字節的處理。
(7)將該通信信息幀所有字節按上述步驟計算完成后,得到的16bit CRC寄存器的高、低字節進行交換。最后得到的CRC寄存器內容即為CRC校驗碼。
4 結 語
在實際的測控系統項目開發中,通過VB6.0結合SQL數據庫編程,開發了基于Modbus規約的上位機測控管理軟件,并利用RS一485總線實現了對下位機的監控和數據處理。充分利用現有的、成熟而規范的通信協議能最大限度地節約開發成本,降低開發風險,提高系統的兼容性和可移植性。ModbusRTU規約作為智能儀器儀表領域大量使用的國際化通信協議,必將得到更加廣泛的應用。