Modbus協(xié)議是應用于電子控制器上的一種通用語言,。通過此協(xié)議,,控制器相互之間、控制器經(jīng)由網(wǎng)絡(例如以太網(wǎng))和其他設(shè)備之間可以通信,。它已經(jīng)成為一種通用工業(yè)標準,。有了它,不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡,,進行集中控制,。 此協(xié)議定義了一個控制器能認識并使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡進行通信的,,它描述了控制器請求訪問其他設(shè)備的過程,,如何回應來自其他設(shè)備的請求以及怎樣偵測錯誤并記錄。它制定了消息的域和內(nèi)容的公共格式如圖1所示,。 在Modbus網(wǎng)絡通信時,,協(xié)議決定了每個控制器需要知道它們的設(shè)備地址,識別按照地址發(fā)來的消息,,并決定要產(chǎn)生何種行動,。如果需要響應,,控制器將生成反饋信息并用Modbus協(xié)議發(fā)出。在其他網(wǎng)絡上通信時,,包含了Modbus協(xié)議的消息要轉(zhuǎn)換為此網(wǎng)絡上使用的幀或包結(jié)構(gòu)進行傳輸,。
標準的Modbus接口是使用RS-232C兼容串行接口,它定義了連接口的針腳,、電纜,、信號位、傳輸波特率,、奇偶校驗,,控制器能直接或經(jīng)由Modem組網(wǎng)。 控制器之間通信使用主-從技術(shù),,僅有主設(shè)備能初始化傳輸操作,,其他設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的數(shù)據(jù)作出相應反應。典型的主設(shè)備:主機和可編程儀表,,典型的從設(shè)備:可編程控制器,。 主-從技術(shù)原理框圖,如圖2所示,。 查詢:查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能,。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的全部附加信息,例如,,功能代碼03是要求從設(shè)備讀取保持寄存器并返回它們的內(nèi)容,,數(shù)據(jù)段必須包含如下信息:從哪個寄存器開始讀以及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法,。 回應:如果從設(shè)備產(chǎn)生一個正常的回應,,在回應消息中的功能代碼是在查詢消息中的功能代碼的響應。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù),,如寄存器值或狀態(tài)等,。如果有錯誤發(fā)生,功能代碼將修改為用于指出回應消息是錯誤的,,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認消息內(nèi)容是否可用,。 下面介紹Modbus在不同的網(wǎng)絡環(huán)境中主-從技術(shù)的應用情況: 1,、 在單一Modbus網(wǎng)絡上傳輸 主設(shè)備可單獨和從設(shè)備通信,也能以廣播方式和所有從設(shè)備通訊,。如果單獨通信,,從設(shè)備返回一條消息作為回應;如果是以廣播方式查詢的,,則不作任何回應,。Modbus協(xié)議建立了主設(shè)備查詢的格式:設(shè)備(或廣播)地址,、功能代碼、所有要發(fā)送的數(shù)據(jù),、錯誤檢測域,。 從設(shè)備回應消息也由Modbus協(xié)議構(gòu)成,包括確認要行動的域,、任何要返回的數(shù)據(jù)和錯誤檢測域,。如果在消息接收過程中發(fā)生錯誤,或從設(shè)備不能執(zhí)行其命令,,從設(shè)備將建立錯誤消息并把它作為回應發(fā)送出去,。 2、 在其他網(wǎng)絡上傳輸 在其他網(wǎng)絡上,,控制器之間使用對等技術(shù)通信,,故任何控制器都能初始和其他控制器的通信。這樣在單獨的通信過程中,,控制器既可作為主設(shè)備也可作為從設(shè)備,。傳輸網(wǎng)絡提供的多個內(nèi)部通道可允許同時發(fā)生的多個傳輸進程執(zhí)行。 在消息位,,Modbus協(xié)議仍提供了主-從原則,,盡管網(wǎng)絡通信方法是“對等”,如果一個控制器發(fā)送一條消息,,它只是作為主設(shè)備,,并期望從從設(shè)備得到回應。同樣,,當控制器接收到一條消息,,它將建立一個從設(shè)備回應格式并返回給發(fā)送該消息的控制器。
在標準的Modbus網(wǎng)絡中,,控制器可以設(shè)置為RTU和ASCII兩種通訊模式中的任何一種,,在配置控制器的時候用戶一旦選定某種模式(包括對應的串口通信參數(shù)),那么在同一Modbus網(wǎng)絡上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù),。 兩種不同的傳輸模式對應的傳輸數(shù)據(jù)單元有不同的格式: RTU模式
ASCII模式
選定了的傳輸模式僅適用于標準的Modbus傳輸網(wǎng)絡,,它定義了在網(wǎng)絡上傳輸?shù)南⒌拿恳蛔止?jié)消息段的意義,以及怎樣將消息進行打包和解析,。 在其他網(wǎng)絡上,,例如MAP或Modbus Plus,Modbus消息首先被轉(zhuǎn)換成與串行無關(guān)的消息幀,,再進行傳輸,。 1、 RTU傳輸模式 RTU通信模式,,在Modbus網(wǎng)絡上傳輸?shù)南⒅忻總€8bit字節(jié)包含兩個4bit的十六進制數(shù),。這種傳輸方式的優(yōu)點是:同樣的波特率下,,比ASCII模式傳輸?shù)臄?shù)據(jù)更多。 代碼編碼: (1)8bit二進制數(shù)分為兩個4bit十六進制數(shù)0~9,,A~F,。 (2)消息中每個8bit域都是由2個十六進制字符組成。 在RTU傳輸模式下,,消息至少要以3.5個字符時間的停頓間隔開始發(fā)送,。在網(wǎng)絡波特率多樣的字符時間下,這是很容易實現(xiàn)的,,如下面示例中的T1-T2-T3-T4所示,。傳輸?shù)牡谝粋€域是設(shè)備地址,可使用的傳輸字符是十六進制的0~9,,A~F,。網(wǎng)絡設(shè)備不斷偵測網(wǎng)絡總線,包括停頓間隔時間在內(nèi),。當接收到第一個傳輸字符之后,,一個至少3.5個字符時間的停頓標定了消息的結(jié)束。新的消息發(fā)送可在此停頓后開始執(zhí)行,。 RTU模式下,,整個消息的傳輸必須作為一個連續(xù)的流進行。如果在傳輸完成之前有超過1.5個字符時間的停頓時間,,接收設(shè)備將刷新不完整的消息并假定下一字節(jié)是一個新消息的地址域,。同樣地,如果一個新消息在小于3.5個字符時間內(nèi)接著前一個消息開始,,接收的設(shè)備將認為它是前一消息的延續(xù),。這都將導致錯誤的產(chǎn)生,因為在最后CRC域的值不可能是正確的,。典型的RTU消息幀見表1 表1 典型RTU消息幀
2,、 ASCII傳輸模式 ASCII通信模式,在Modbus網(wǎng)絡上傳輸?shù)南⒅忻總€8bit字節(jié)作為兩個ASCII字符發(fā)送,。這種傳輸方式的優(yōu)點是字符發(fā)送的間隔可以達到1s而不產(chǎn)生錯誤,。 代碼編碼: (1)8bit二進制數(shù)表示為兩個ASCII字符,0~9,,A~F,。 (2)消息中每個ASCII字符都是一個十六進制字符組成。 在ASCII傳輸模式下,,消息以冒號(:)字符(ASCII碼3AH)開始,以回車換行符結(jié)束(ASCII碼0DH,,0AH),。 其他域可使用的傳輸字符是十六進制的0~9,,A~F。網(wǎng)絡上的設(shè)備不斷偵測“:”字符,,當有一個冒號接收到時,,每個設(shè)備都解碼下個域(地址域)來判斷是否發(fā)給自己的。 消息中字符間發(fā)送的時間間隔最長不能超過1s,,否則接收的設(shè)備將認為傳輸錯誤,。一個典型ASCII消息幀見表2所示 表2 典型ASCII消息幀
上述段落中,主要講述了Modbus的不同傳輸模式以及對應傳輸模式的消息幀的典型構(gòu)成,,從中可以發(fā)現(xiàn),,兩種傳輸模式在消息的起始端具有不同的特性,消息內(nèi)各域的編碼方式不同之外,,沒有其他的區(qū)別,。下面將統(tǒng)一進行消息內(nèi)各域的解析講解。 1,、 地址域 消息幀的地址包含兩個字符(ASCII)或8bits(RTU),。可能的從設(shè)備地址是0~247(十進制),。單個設(shè)備的地址范圍是1~247.主設(shè)備把要聯(lián)系的從設(shè)備的地址放入消息中的地址域,,發(fā)送出去,選通從設(shè)備,。當從設(shè)備發(fā)送回應消息時,,它把自己的地址放入回應的地址域中,以便主設(shè)備知道是哪一個從設(shè)備作出了回應,。 地址0是用作廣播地址,,以使所有的從設(shè)備都能認識。當Modbus協(xié)議用于更高水準的網(wǎng)絡,,可能是不允許廣播或以其他方式代替,。 2、 功能代碼域 消息幀中的功能代碼域包含了兩個字符(ASCII)或8bits(RTU),??赡艿拇a范圍是十進制的1~255.當然,有些代碼是適用于所有控制器,,有些是應用于某種控制器,,還有些保留以備后用。 當消息從主設(shè)備發(fā)往從設(shè)備時,,功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行為,。例如去讀取輸入的開關(guān)狀態(tài),讀一組寄存器的數(shù)據(jù)內(nèi)容,,讀從設(shè)備的診斷狀態(tài),,允許調(diào)入,、記錄、校驗在從設(shè)備中的程序等,。 當從設(shè)備回應時,,它使用功能代碼域來指示是正常回應(無誤)還是產(chǎn)生某種錯誤(稱作異?;貞?。對正常回應,,從設(shè)備僅回應相應的功能代碼,。對異議回應,從設(shè)備返回一等同于正常代碼的代碼,,但最重要的位置為邏輯1. 例如:一由主設(shè)備發(fā)往從設(shè)備的消息要求讀一組保持寄存器,,將產(chǎn)生如下功能代碼: 00000011(十六進制 03H) 對正常回應,,從設(shè)備僅回應同樣的功能代碼,。對異常回應,,它返回: 10000011(十六進制83H) 除功能代碼因異議錯誤作了修改外,,從設(shè)備將一獨特的代碼放到回應消息的數(shù)據(jù)域中,以便告訴主設(shè)備發(fā)生了什么錯誤,。 主設(shè)備應用程序得到異常的回應后,,典型的處理過程是重發(fā)消息,或者診斷發(fā)給從設(shè)備的消息并報告給操作員,。 3,、 數(shù)據(jù)域 數(shù)據(jù)域是由兩個十六進制數(shù)集合構(gòu)成的,取值范圍00~FF,。根據(jù)網(wǎng)絡傳輸模式,,這可以是由一對ASCII字符組成或由一RTU字符組成。 主設(shè)備發(fā)給從設(shè)備消息的數(shù)據(jù)域包含如下附加信息:從設(shè)備用于執(zhí)行由功能代碼所定義的功能所必需的參數(shù),,包括了寄存器地址,、處理項的數(shù)目、域中實際數(shù)據(jù)字節(jié)數(shù)等,。 例如,,如果主設(shè)備需要從設(shè)備讀取一組保持寄存器的數(shù)據(jù)(功能代碼03),數(shù)據(jù)域指定了起始寄存器以及要讀的寄存器數(shù)量,。主設(shè)備要寫一組從設(shè)備的寄存器(功能代碼十六制10)數(shù)據(jù)域則指明了要寫的起始寄存器以及要寫的寄存器數(shù)量,、數(shù)據(jù)域的數(shù)據(jù)字節(jié)數(shù)、要寫入寄存器的數(shù)據(jù)。 如果沒有錯誤發(fā)生,,從設(shè)備返回的數(shù)據(jù)域包含請求的數(shù)據(jù),。如果有錯誤發(fā)生,此域包含了一個異常代碼,,主設(shè)備應用程序可以用來判斷以采取下一步行動。 在某種消息中數(shù)據(jù)域可以是不存在的(0長度),。例如,,主設(shè)備要求從設(shè)備回應通信事件記錄(功能代碼十六進制0B),從設(shè)備不需任何附加的信息,。 4,、 差錯校驗域 標準的Modbus串行網(wǎng)絡采用兩種錯誤檢測方法。奇偶校驗對每個字符都可用,,幀檢測(LRC或CRC)應用于整個消息,。它們都是在消息發(fā)送前由主設(shè)備產(chǎn)生的,從設(shè)備在接收過程中檢測每個字符和整個消息幀,。 用戶要給主設(shè)備配置預定義的超時時間間隔,,這個時間間隔要足夠長,以使所有從設(shè)備都能作出正常反應,。如果從設(shè)備檢測到傳輸錯誤,,將不會接收消息,也不會向主設(shè)備作出回應,。這時,,超時事件將觸發(fā)主設(shè)備來處理錯誤。發(fā)往不存在的從設(shè)備的地址也會產(chǎn)生超時,。 |
|
來自: 金玉滿堂jjnla8 > 《485通訊》