新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Modbus協議的常用基本定義——(RS485總線系統應用之2)續

        Modbus協議的常用基本定義——(RS485總線系統應用之2)續

        作者: 時間:2016-12-15 來源:網絡 收藏

        當消息從主設備發往從設備時,功能代碼域將告之從設備需要執行哪些行為。例如去讀取輸入的開關狀態,或讀一組寄存器的數據內容,或讀從設備的診斷狀態,或允許在從設備中調入、記錄、校驗程序等。

        當從設備回應時,它使用功能代碼域來指示是正常回應(無誤)還是有某種錯誤發生(稱作異議回應)。對正常回應,從設備僅回應相應的功能代碼。對異議回應,從設備返回功能代碼的最高位為“1”。例如:

        一條主設備發往從設備的消息要求讀一組保持寄存器,將產生如下功能代碼:

        0 0 0 0 0 0 1 1(十六進制03H)

        對正常回應,從設備返回同樣的功能代碼。對異議回應,它將返回:

        1 0 0 0 0 0 1 1(十六進制83H)

        除功能代碼因異議回應作了修改外,從設備還將一個獨特的代碼放到回應消息的數據域中,告訴主設備發生了什么錯誤。

        主設備得到異議回應后,典型的處理過程是重發消息。或者請求技術員,幫助診斷發給從設備的消息是否有錯。

        3.5數據域

        根據網絡傳輸模式,數據域可以由若干個ASCII字符或RTU字節組成。數據域的值由十六進制數構成,范圍為00H~FFH。

        主設備發給從設備消息的數據域包含從設備必須完成的由功能代碼所定義的行為。其中包括了不連續的寄存器地址、要處理項的數目、域中實際數據字節數。

        例如,如果主設備需要從從設備讀取一組保持寄存器(功能代碼03),則必須在數據域中指定起始寄存器地址以及要讀的寄存器個數。如果主設備需要向從設備寫一組的寄存器(功能代碼10十六進制),則必須在數據域中指明要寫的寄存器起始地址、要寫的寄存器個數以及要寫入的數據。

        在某種消息中,數據域可以是不存在的(0長度)。例如,主設備要求從設備回應通信事件記錄(功能代碼0BH),從設備不需任何附加的信息。

        3.6錯誤檢測域

        標準的Modbus網絡有兩種錯誤檢測模式。錯誤檢測域的內容視所選的檢測模式而定。

        ASCII模式:

        當選用ASCII模式時,錯誤檢測域包含兩個ASCII字符。這是使用LRC(縱向冗長檢測)方法對消息內容計算得出的,不包括開始的冒號符及回車換行符。LRC字符處在回車換行符前面。

        RTU模式:

        當選用RTU模式時,錯誤檢測域包含一個16Bits值(用兩個8位的字符來實現)。錯誤檢測域的內容是通過CRC(循環冗長檢測)方法得出的。CRC域附加在消息的最后,CRC的高位字節是發送消息的最后一個字節。

        4. Modbus的錯誤檢測方法

        標準的Modbus串行網絡采用兩種錯誤檢測方法。奇偶校驗對每個字符都可用,幀檢測(LRC或CRC)應用于整個消息。它們都是在消息發送前由主設備產生的,從設備在接收過程中檢測每個字符和整個消息幀。

        用戶要給主設備配置一個預先定義的超時時間間隔,這個時間間隔要足夠長,以使任何從設備都能作出正常反應。如果從設備檢測到傳輸錯誤,消息將不會被接收,也不會向主設備作出回應。這樣產生的超時事件將觸發主設備來處理錯誤。發往不存在的從設備的地址也會產生超時。

        4.1奇偶校驗

        用戶可以配置控制器是奇校驗或偶校驗,也可以是無校驗。如果指定了奇或偶校驗,將計算每個字符(8個Bit)中“1”的位數(ASCII模式7個數據Bit,RTU中8個數據Bit)。例如字符C5H包含以下8個數據Bit:

        1 1 0 0 0 1 0 1

        整個字符“1”的位數是4個。如果便用了偶校驗,因為4是偶數,幀的奇偶校驗位將是0,使得整個幀的“1”的個數仍是偶數(4)。如果使用了奇校驗,幀的奇偶校驗位將是1,便得整個幀的“1”的個數是奇數(4+1=5)。

        如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測。此時,在要傳輸的字符幀中增加一個停止位。

        4.2 LRC校驗

        被應用于ASCII模式,消息包括了一個基于LRC方法的錯誤檢測域。LRC域檢測了消息域中除開始的冒號及結束的回車換行號以外的內容。

        LRC域是一個包含8位二進制值的字節。LRC值由發送設備計算并放到消息幀中,接收設備在接收消息的過程中重新計算LRC,并將它和接收消息中的LRC值比較,如果兩值不等,說明有錯誤。

        LRC方法是將消息中的8Bit的字節連續累加,丟棄了進位。

        4.3 CRC校驗

        被應用于RTU模式,消息包括了一個基于CRC方法的錯誤檢測域。CRC域檢測了整個消息的內容。

        CRC域是兩個字節,包含一個16位的二進制值。它由傳輸設備計算后加入到消息中。接收設備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。

        CRC方法比LRC方法繁瑣得多,受篇幅限制在此不作介紹。如需了解,請參見本人發表的《CRC校驗原理與程序設計》一文。

        一個通信實例:

        表3是一個以RTU方式讀取整數數據的例子。主機向01H號從機發出04H號(讀取輸入寄存器)功能碼,要求讀取從0000H地址開始的2個(16Bit)輸入寄存器的值。CB71H是01H、04H、00H、00H、00H、02H六個數據的CRC校驗值。從機應答時將地址和功能碼原樣發回,并將2個(16Bit)輸入寄存器的值0107H和0251H分成4個(8Bit)數據01H、07H、02H、51H發回。258BH是01H、04H、04H、01H、07H、02H、51H七個數據的CRC校驗值。

        主機請求消息幀(8個字節)

        地址

        功能碼

        被讀首個寄存器的高位地址

        被讀首個寄存器的低位地址

        被讀寄存器的數量的高位

        被讀寄存器的數量的低位

        CRC低位

        CRC高位

        01

        04

        00

        00

        00

        02

        71

        CB

        從機應答消息幀(9個字節)

        地址

        功能碼

        數據個數

        第1個數據

        第2個數據

        第3個數據

        第4個數據

        CRC低位

        CRC高位

        01

        04

        04

        01

        07

        02

        51

        8B

        25

        表3.以RTU方式讀取整數數據

        參考文獻:

        ①GB/T 19582.1-2008《基于Modbus協議的工業自動化網絡規范》

        ②Modbus協議中文版可在互聯網上下載


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阜康市| 定州市| 卓资县| 玛多县| 墨竹工卡县| 定边县| 敦化市| 隆昌县| 溆浦县| 深圳市| 长葛市| 双峰县| 谷城县| 延吉市| 延寿县| 辽中县| 广安市| 乾安县| 开江县| 乌拉特前旗| 尖扎县| 宁国市| 平塘县| 清原| 含山县| 梓潼县| 安塞县| 文水县| 黄山市| 铜鼓县| 罗甸县| 福贡县| 阿克陶县| 微博| 墨竹工卡县| 东乡县| 太原市| 吴桥县| 江口县| 梁河县| 宿迁市|