發布日期:2022-04-18 點擊率:73
1 引言 現代工業自動控制系統朝智能化、網絡化和開放式結構的方向發展。實現不同種自動化設備之間通信是系統集成的關鍵。現場控制設備具有通信功能,便于構成工廠底層控制網絡。通信標準的公開、一致,使系統具備開放性,設備間具有互可操作性。功能塊與結構的規范化使相同功能的設備間具有互換性。控制功能下放到現場,使控制系統結構具備高度的分散性。利用現場總線技術,將符合同一標準的各種智能設備統一起來,徹底實現整個監測系統的分散控制,將提高系統集成度和數據傳輸效率、延長有效控制距離,并有利于提高系統抗干擾性能和擴展系統功能。基于modbus協議的串口通信是較常用的方式之一。 2 modbus協議簡介 modbus協議具有偵錯能力強、數據傳輸量大、實時性好等特點,因而成為目前自控領域使用非常廣泛的通訊語言。本文通過一個應用實例介紹如何利用單片機編程實現在線通訊modbus消息的工作過程,在可視化語言環境下完成地址域、功能代碼域、數據域的分配及crc校驗。modbus協議是應用于電子控制器的一種通訊語言。利用這個協議,控制器相互之間(例如485、232c等),控制器通過網絡(例如以太網)和其他設備之間進行通訊。它定義了一種控制器能認識使用的消息結構,而不管它們是通過何種網絡實現;描述的是控制器請求訪問其它設備的過程,如何回應來自其它設備的請求,以及怎樣偵錯并記錄;制定了消息域格局和內容的公共格式。modbus通訊規約按照主從設備來規定,如:主站一次可向一個或所有從站發送通信請求(或指令),主設備通過消息幀的地址域來選通從設備。主站發送的消息幀的內容和順序為:從站地址(設備地址)、功能碼、數據域(數據起始地址、數據量、數據內容)、crc校驗碼;從站應答的信息內容和順序與主站信息幀基本相同。modbus除了定義通信功能碼之外,同時還定義了出錯碼,標志出錯信息。主站接收到錯誤碼后,根據錯誤的原因采取相應的措施。從站應答的數據內容依據功能碼進行響應。例如功能代碼03要求讀取從站設備中保持寄存器的內容。 2.1 modbus通訊傳輸模式 modbus通訊實現有兩種傳輸模式(ascii或rtu),abb公司的50系列plc產品采用的是rtu(遠程終端單元)模式,在消息中的每個8bit字節包含兩個4bit的十六進制字符。這種方式的主要優點是:在同樣的波特率下,可比ascii方式傳送更多的數據。 代碼系統: 8位二進制,十六進制數0.。.9,a.。.f。 消息中的每個8位域都是一個兩個十六進制字符組成每個字節的位。 1個起始位。 8個數據位,最小的有效位先發送。 1個奇偶校驗位,無校驗則無。 1個停止位(有校驗時),2個bit(無校驗時)。 錯誤檢測域,crc(循環冗長檢測)。 基于rs485的rtu模式modbus通訊格式為: 它定義了在這些網絡上連續傳輸的消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。 2.2 modbus通訊查詢回應功能 (1) 查詢 查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器并返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。 (2) 回應 如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。 2.3 modbus消息幀 傳輸設備將modbus消息轉為有起點和終點的幀,這就允許接收的設備在消息起始處開始工作,讀地址分配信息,判斷哪一個變量被選中,判知何時信息已完成。部分消息也能偵測到錯誤并且能設置為返回結果。使用rtu模式,消息發送至少要以3.5個字符時間的停頓間隔開始。傳輸的第一個域是變量地址。可以使用的傳輸字符是十六進制的0.。.9,a.。.f。網絡設備不斷偵測網絡總線,包括停頓間隔時間內。當第一個域(地址域)接收到,每個設備都進行解碼以判斷是否發往自己的。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標定了消息的結束。一個新的消息可在此停頓后開始。 整個消息幀必須作為一連續的流轉輸。如果在幀完成之前有超過1.5個字符時間的停頓時間,接收設備將刷新不完整的消息并假定下一字節是一個新消息的地址域。同樣地,如果一個新消息在小于3.5個字符時間內接著前個消息開始,接收的設備將認為它是前一消息的延續。這將導致一個錯誤,因為在最后的crc域的值不可能是正確的。所以在通訊端口初始化時,timer1定時間隔設置為500ms。 2.4 modbus的crc校驗原理 crc校驗實現 modbus通信的rtu模式中,規定信息幀的最后兩個字節用于傳遞crc(cyclic redundancycheck,循環冗余校驗)碼。發送方將信息幀中地址域、功能碼、數據域的所有字節按規定的方式進行位移并進行xor(異或)計算,即可得到2字節的crc碼,并把包含crc校驗碼的信息幀作為一連續的流進行傳輸。接收方在收到該信息幀時按同樣的方式進行計算,并將結果同收到的crc碼的雙字節比較,如果一致就認為通信正確,否則認為通信有誤,從站將發送crc錯誤應答。 rtu模式一般采用crc-16冗余校驗方法,crc-16的校驗碼為16位(2字節),其中低字節在前,高字節在后。實現crc校驗有兩種方法:根據crc校驗的定義公式進行計算,或者在程序中建立crc校驗值表。在程序中使用前者更容易實現,這里需要使用crc生成多項式x16+x15+x2+1。該多項式對應的碼組系數為18005h(16進制),去除最高位,對應的16位余數為8005h,即為crc-16常數。crc-16校驗過程如下:將crc寄存器的每一位預置為1;把該寄存器值與8bit的信息幀數據進行異或,結果存于該寄存器;對crc寄存器從高到低進行移位,在最高位(msb)的位置補零,而最低位(lsb,移位后已經被移出crc寄存器)如果為1,則把寄存器與crc-16常數進行異或,否則如果lsb為零,則無需進行異或。重復上述的由高至低的移位8次,第一個8bit數據處理完畢,用此時寄存器的值與下一個8bit數據異或并進行如前一樣的8次移位。所有的字符處理完成后crc寄存器內的值即為最終的crc值。crc添加到消息中時,先加入低字節,然后高字節。rtu模式的傳輸格式是1個數據位,2個停止位,沒有奇偶校驗位。通信數據安全由控制參數crc-16碼保證。rtu接收設備依靠接收字符間經過的時間判斷一幀的開始,如果經過3個半的字符時間后仍然沒有新的字符或者沒有完成幀,接收設備就會放棄該幀,并設下一個字符為新一幀的開始,應用程序中,modbus協議通信由通訊子模塊實現,包含crc-16計算與驗證、信息幀的編制和分解。 </font
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV