久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1708|回復: 0
收起左側

modbus通訊協議 中文版

[復制鏈接]
ID:90154 發表于 2017-1-8 15:51 | 顯示全部樓層 |閱讀模式
Modbus  通信協議
摘 要:工業控制已從單機控制走向集中監控、集散控制,如今已進入網絡時代,工業
控制器連網也為網絡管理提供了方便。s Modbus  就是工業控制器的網絡協議中的一種。關 鍵
詞:s Modbus  協議;串行通信;C LRC  校驗;C CRC  校驗; RS-232C
一、Modbus 協議簡介
Modbus 協議是應用于電子控制器上的一種通用語言。通過此協議,控制器相互之間、控制
器經由網絡(例如以太網)和其它設備之間可以通信。它已經成為一通用工業標準。有了
它,不同廠商生產的控制設備可以連成工業網絡,進行集中監控。
此協議定義了一個控制器能認識使用的消息結構,而不管它們是經過何種網絡進行通信的。
它描述了一控制器請求訪問其它設備的過程,如果回應來自其它設備的請求,以及怎樣偵
測錯誤并記錄。它制定了消息域格局和內容的公共格式。
當在一 Modbus 網絡上通信時,此協議決定了每個控制器須要知道它們的設備地址,識別按
地址發來的消息,決定要產生何種行動。如果需要回應,控制器將生成反饋信息并用 Modb
us 協議發出。在其它網絡上,包含了 Modbus 協議的消息轉換為在此網絡上使用的幀或包
結構。這種轉換也擴展了根據具體的網絡解決節地址、路由路徑及錯誤檢測的方法。
1、在 Modbus網絡上轉輸
標準的 Modbus 口是使用一 RS-232C 兼容串行接口,它定義了連接口的針腳、電纜、信號位、
傳輸波特率、奇偶校驗。控制器能直接或經由 Modem組網。
控制器通信使用主—從技術,即僅一設備(主設備)能初始化傳輸(查詢)。其它設備(從
設備)根據主設備查詢提供的數據作出相應反應。典型的主設備:主機和可編程儀表。典
型的從設備:可編程控制器。
主設備可單獨和從設備通信,也能以廣播方式和所有從設備通信。如果單獨通信,從設備
返回一消息作為回應,如果是以廣播方式查詢的,則不作任何回應。Modbus 協議建立了主
設備查詢的格式:設備(或廣播)地址、功能代碼、所有要發送的數據、一錯誤檢測域。
從設備回應消息也由 Modbus 協議構成,包括確認要行動的域、任何要返回的數據、和一錯
誤檢測域。如果在消息接收過程中發生一錯誤,或從設備不能執行其命令,從設備將建立
一錯誤消息并把它作為回應發送出去。
2、在其它類型網絡上轉輸
在其它網絡上,控制器使用對等技術通信,故任何控制都能初始和其它控制器的通信。這
樣在單獨的通信過程中,控制器既可作為主設備也可作為從設備。提供的多個內部通道可
允許同時發生的傳輸進程。
在消息位,Modbus 協議仍提供了主—從原則,盡管網絡通信方法是“對等”。如果一控制
器發送一消息,它只是作為主設備,并期望從從設備得到回應。同樣,當控制器接收到一
消息,它將建立一從設備回應格式并返回給發送的控制器。
3、查詢—回應周期
(1)查詢
查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行
功能的任何附加信息。例如功能代碼 03 是要求從設備讀保持寄存器并返回它們的內容。數
據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域
為從設備提供了一種驗證消息內容是否正確的方法。
(2)回應
如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回
應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將
被修改以用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢
測域允許主設備確認消息內容是否可用。
二、兩種傳輸方式
控制器能設置為兩種傳輸模式(ASCII 或RTU)中的任何一種在標準的 Modbus網絡通信。
用戶選擇想要的模式,包括串口通信參數(波特率、校驗方式等),在配置每個控制器的
時候,在一個 Modbus 網絡上的所有設備都必須選擇相同的傳輸模式和串口參數。
ASCII 模式
:
地址
功能代碼
數據數量
數據 1
...
數據 n
LRC 高字節
LRC 低字節
回車
換行
RTU 模式
地址
功能代碼
數據數量
數據 1
...
數據 n
CRC 高字節
CRC 低字節
所選的 ASCII或 RTU方式僅適用于標準的 Modbus 網絡,它定義了在這些網絡上連續傳輸的
消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。
在其它網絡上(象 MAP和 Modbus Plus)Modbus消息被轉成與串行傳輸無關的幀。
1、ASCII 模式
當控制器設為在 Modbus 網絡上以 ASCII(美國標準信息交換代碼)模式通信,在消息中的
每個 8Bit 字節都作為兩個 ASCII 字符發送。這種方式的主要優點是字符發送的時間間隔可
達到 1秒而不產生錯誤。
代碼系統
· 十六進制,ASCII 字符 0...9,A...F
· 消息中的每個 ASCII 字符都是一個十六進制字符組成
每個字節的位
· 1 個起始位
· 7 個數據位,最小的有效位先發送
· 1 個奇偶校驗位,無校驗則無
· 1 個停止位(有校驗時),2個 Bit(無校驗時)
錯誤檢測域
· LRC(縱向冗長檢測)
2、RTU 模式
當控制器設為在 Modbus 網絡上以 RTU(遠程終端單元)模式通信,在消息中的每個 8Bit
字節包含兩個 4Bit 的十六進制字符。這種方式的主要優點是:在同樣的波特率下,可比 A
SCII 方式傳送更多的數據。
代碼系統
· 8 位二進制,十六進制數 0...9,A...F
· 消息中的每個 8 位域都是一個兩個十六進制字符組成
每個字節的位
· 1 個起始位
· 8 個數據位,最小的有效位先發送
· 1 個奇偶校驗位,無校驗則無
· 1 個停止位(有校驗時),2個 Bit(無校驗時)
錯誤檢測域
· CRC(循環冗長檢測)
三、Modbus 消息幀
兩種傳輸模式中(ASCII 或RTU),傳輸設備以將 Modbus消息轉為有起點和終點的幀,這
就允許接收的設備在消息起始處開始工作,讀地址分配信息,判斷哪一個設備被選中(廣
播方式則傳給所有設備),判知何時信息已完成。部分的消息也能偵測到并且錯誤能設置
為返回結果。
1、ASCII 幀
使用 ASCII模式,消息以冒號(:)字符(ASCII 碼 3AH)開始,以回車換行符結束(ASCI
I 碼 0DH,0AH)。
其它域可以使用的傳輸字符是十六進制的0...9,A...F。網絡上的設備不斷偵測“:”字符,
當有一個冒號接收到時,每個設備都解碼下個域(地址域)來判斷是否發給自己的。
消息中字符間發送的時間間隔最長不能超過 1秒,否則接收的設備將認為傳輸錯誤。一個
典型消息幀如下所示:
圖 2 ASCII消息幀
2、RTU 幀
使用 RTU模式,消息發送至少要以 3.5個字符時間的停頓間隔開始。在網絡波特率下多樣
的字符時間,這是最容易實現的(如下圖的 T1-T2-T3-T4所示)。傳輸的第一個域是設備地
址。可以使用的傳輸字符是十六進制的 0...9,A...F。網絡設備不斷偵測網絡總線,包括
停頓間隔時間內。當第一個域(地址域)接收到,每個設備都進行解碼以判斷是否發往自
己的。在最后一個傳輸字符之后,一個至少 3.5個字符時間的停頓標定了消息的結束。一
個新的消息可在此停頓后開始。
整個消息幀必須作為一連續的流轉輸。如果在幀完成之前有超過 1.5個字符時間的停頓時
間,接收設備將刷新不完整的消息并假定下一字節是一個新消息的地址域。同樣地,如果
一個新消息在小于 3.5個字符時間內接著前個消息開始,接收的設備將認為它是前一消息
的延續。這將導致一個錯誤,因為在最后的 CRC域的值不可能是正確的。一典型的消息幀
如下所示:
圖 3 RTU消息幀
3、地址域
消息幀的地址域包含兩個字符(ASCII)或 8Bit(RTU)。可能的從設備地址是 0...247 (十
進制)。單個設備的地址范圍是 1...247。主設備通過將要聯絡的從設備的地址放入消息中
的地址域來選通從設備。當從設備發送回應消息時,它把自己的地址放入回應的地址域中,
以便主設備知道是哪一個設備作出回應。
地址 0是用作廣播地址,以使所有的從設備都能認識。當 Modbus 協議用于更高水準的網絡,
廣播可能不允許或以其它方式代替。
4、如何處理功能域
消息幀中的功能代碼域包含了兩個字符(ASCII)或 8Bits(RTU)。可能的代碼范圍是十
進制的 1...255。當然,有些代碼是適用于所有控制器,有此是應用于某種控制器,還有
些保留以備后用。
當消息從主設備發往從設備時,功能代碼域將告之從設備需要執行哪些行為。例如去讀取
輸入的開關狀態,讀一組寄存器的數據內容,讀從設備的診斷狀態,允許調入、記錄、校
驗在從設備中的程序等。
當從設備回應時,它使用功能代碼域來指示是正常回應(無誤)還是有某種錯誤發生(稱作
異議回應)。對正常回應,從設備僅回應相應的功能代碼。對異議回應,從設備返回一等
同于正常代碼的代碼,但最重要的位置為邏輯 1。
例如:一從主設備發往從設備的消息要求讀一組保持寄存器,將產生如下功能代碼:
00000011(十六進制 03H)
對正常回應,從設備僅回應同樣的功能代碼。對異議回應,它返回:
10000011(十六進制 83H)
除功能代碼因異議錯誤作了修改外,從設備將一獨特的代碼放到回應消息的數據域中,這
能告訴主設備發生了什么錯誤。
主設備應用程序得到異議的回應后,典型的處理過程是重發消息,或者診斷發給從設備的
消息并報告給操作員。
5、數據域
數據域是由兩個十六進制數集合構成的,范圍 00...FF。根據網絡傳輸模式,這可以是由
一對 ASCII字符組成或由一 RTU字符組成。
從主設備發給從設備消息的數據域包含附加的信息:從設備必須用于進行執行由功能代碼
所定義的所為。這包括了象不連續的寄存器地址,要處理項的數目,域中實際數據字節數。
例如,如果主設備需要從設備讀取一組保持寄存器(功能代碼 03),數據域指定了起始寄
存器以及要讀的寄存器數量。如果主設備寫一組從設備的寄存器(功能代碼 10 十六進制),
數據域則指明了要寫的起始寄存器以及要寫的寄存器數量,數據域的數據字節數,要寫入
寄存器的數據。
如果沒有錯誤發生,從從設備返回的數據域包含請求的數據。如果有錯誤發生,此域包含
一異議代碼,主設備應用程序可以用來判斷采取下一步行動。
在某種消息中數據域可以是不存在的(0 長度)。例如,主設備要求從設備回應通信事件
記錄(功能代碼 0B 十六進制),從設備不需任何附加的信息。
6、錯誤檢測域
標準的 Modbus 網絡有兩種錯誤檢測方法。錯誤檢測域的內容視所選的檢測方法而定。
ASCII
當選用 ASCII模式作字符幀,錯誤檢測域包含兩個 ASCII字符。這是使用 LRC(縱向冗長
檢測)方法對消息內容計算得出的,不包括開始的冒號符及回車換行符。LRC 字符附加在
回車換行符前面。
RTU
當選用 RTU模式作字符幀,錯誤檢測域包含一 16Bits 值(用兩個 8 位的字符來實現)。錯誤
檢測域的內容是通過對消息內容進行循環冗長檢測方法得出的。CRC 域附加在消息的最后,
添加時先是低字節然后是高字節。故 CRC的高位字節是發送消息的最后一個字節。
7、字符的連續傳輸
當消息在標準的 Modbus 系列網絡傳輸時,每個字符或字節以如下方式發送(從左到右):
最低有效位...最高有效位
使用 ASCII字符幀時,位的序列是:
圖 4. 位順序(ASCII)
圖 4. 位順序(RTU)
四、錯誤檢測方法
標準的 Modbus 串行網絡采用兩種錯誤檢測方法。奇偶校驗對每個字符都可用,幀檢測(LR
C 或CRC)應用于整個消息。它們都是在消息發送前由主設備產生的,從設備在接收過程中
檢測每個字符和整個消息幀。
用戶要給主設備配置一預先定義的超時時間間隔,這個時間間隔要足夠長,以使任何從設
備都能作為正常反應。如果從設備測到一傳輸錯誤,消息將不會接收,也不會向主設備作
出回應。這樣超時事件將觸發主設備來處理錯誤。發往不存在的從設備的地址也會產生超
時。
1、奇偶校驗
用戶可以配置控制器是奇或偶校驗,或無校驗。這將決定了每個字符中的奇偶校驗位是如
何設置的。
如果指定了奇或偶校驗,“1”的位數將算到每個字符的位數中(ASCII 模式 7 個數據位,R
TU 中 8 個數據位)。例如 RTU 字符幀中包含以下 8 個數據位:
11000101
整個“1”的數目是 4 個。如果便用了偶校驗,幀的奇偶校驗位將是 0,便得整個“1”的
個數仍是 4個。如果便用了奇校驗,幀的奇偶校驗位將是 1,便得整個“1”的個數是 5 個。
如果沒有指定奇偶校驗位,傳輸時就沒有校驗位,也不進行校驗檢測。代替一附加的停止
位填充至要傳輸的字符幀中。
2、LRC 檢測
使用 ASCII模式,消息包括了一基于 LRC方法的錯誤檢測域。LRC 域檢測了消息域中除開
始的冒號及結束的回車換行號外的內容。
LRC 域是一個包含一個8 位二進制值的字節。LRC 值由傳輸設備來計算并放到消息幀中,接
收設備在接收消息的過程中計算 LRC,并將它和接收到消息中LRC 域中的值比較,如果兩
值不等,說明有錯誤。
LRC 方法是將消息中的8Bit 的字節連續累加,丟棄了進位。
LRC 簡單函數如下:
static unsignedchar LRC(auchMsg,usDataLen)
unsigned char*auchMsg ; /*要進行計算的消息 */
unsigned short usDataLen ; /*LRC要處理的字節的數量*/
{unsigned charuchLRC = 0 ; /*LRC字節初始化 */
while(usDataLen--)/* 傳送消息*/
uchLRC +=*auchMsg++ ; /*累加*/
return ((unsignedchar)(-((char_uchLRC)));
}
3、CRC 檢測
使用 RTU模式,消息包括了一基于 CRC 方法的錯誤檢測域。CRC 域檢測了整個消息的內容。
CRC 域是兩個字節,包含一 16 位的二進制值。它由傳輸設備計算后加入到消息中。接收設
備重新計算收到消息的 CRC,并與接收到的CRC 域中的值比較,如果兩值不同,則有誤。
CRC 是先調入一值是全“1”的 16 位寄存器,然后調用一過程將消息中連續的8 位字節各
當前寄存器中的值進行處理。僅每個字符中的 8Bit 數據對 CRC 有效,起始位和停止位以及
奇偶校驗位均無效。
CRC 產生過程中,每個8 位字符都單獨和寄存器內容相或(OR),結果向最低有效位方向
移動,最高有效位以 0 填充。LSB 被提取出來檢測,如果 LSB 為 1,寄存器單獨和預置的值
或一下,如果 LSB 為 0,則不進行。整個過程要重復 8 次。在最后一位(第 8 位)完成后,
下一個 8位字節又單獨和寄存器的當前值相或。最終寄存器中的值,是消息中所有的字節
都執行之后的 CRC值。
CRC 添加到消息中時,低字節先加入,然后高字節。
CRC 簡單函數如下:
unsigned short CRC16(puchMsg,usDataLen)
unsigned char*puchMsg ; /*要進行 CRC校驗的消息 */
unsigned short usDataLen ; /*消息中字節數 */
{
unsigned charuchCRCHi = 0xFF;/* 高 CRC 字節初始化*/
unsigned charuchCRCLo = 0xFF;/* 低 CRC 字節初始化 */
unsigned uIndex;/* CRC 循環中的索引 */
while(usDataLen--)/* 傳輸消息緩沖區*/
{
uIndex = uchCRCHi^*puchMsgg++;/* 計算 CRC */
uchCRCHi = uchCRCLo^auchCRCHi[uIndex};
uchCRCLo = auchCRCLo[uIndex] ;
}
return (uchCRCHi <<8|uchCRCLo);
}
/* CRC 高位字節值表*/
static unsignedchar auchCRCHi[] = {
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x01,0xC0,0x80,0x41,0x00,0xC1,0x81,0x40,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40,0x00,0xC1,0x81,0x40,
0x01,0xC0,0x80,0x41,0x01,0xC0,0x80,0x41,0x00,0xC1,
0x81,0x40,0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,
0x00,0xC1,0x81,0x40,0x01,0xC0,0x80,0x41,0x01,0xC0,
0x80,0x41,0x00,0xC1,0x81,0x40
};
/* CRC 低位字節值表*/
static charauchCRCLo[]={
0x00,0xC0,0xC1,0x01,0xC3,0x03,0x02,0xC2,0xC6,0x06,
0x07,0xC7,0x05,0xC5,0xC4,0x04,0xCC,0x0C,0x0D,0xCD,
0x0F,0xCF,0xCE,0x0E,0x0A,0xCA,0xCB,0x0B,0xC9,0x09,
0x08,0xC8,0xD8,0x18,0x19,0xD9,0x1B,0xDB,0xDA,0x1A,
0x1E,0xDE,0xDF,0x1F,0xDD,0x1D,0x1C,0xDC,0x14,0xD4,
0xD5,0x15,0xD7,0x17,0x16,0xD6,0xD2,0x12,0x13,0xD3,
0x11,0xD1,0xD0,0x10,0xF0,0x30,0x31,0xF1,0x33,0xF3,
0xF2,0x32,0x36,0xF6,0xF7,0x37,0xF5,0x35,0x34,0xF4,
0x3C,0xFC,0xFD,0x3D,0xFF,0x3F,0x3E,0xFE,0xFA,0x3A,
0x3B,0xFB,0x39,0xF9,0xF8,0x38,0x28,0xE8,0xE9,0x29,
0xEB,0x2B,0x2A,0xEA,0xEE,0x2E,0x2F,0xEF,0x2D,0xED,
0xEC,0x2C,0xE4,0x24,0x25,0xE5,0x27,0xE7,0xE6,0x26,
0x22,0xE2,0xE3,0x23,0xE1,0x21,0x20,0xE0,0xA0,0x60,
0x61,0xA1,0x63,0xA3,0xA2,0x62,0x66,0xA6,0xA7,0x67,
0xA5,0x65,0x64,0xA4,0x6C,0xAC,0xAD,0x6D,0xAF,0x6F,
0x6E,0xAE,0xAA,0x6A,0x6B,0xAB,0x69,0xA9,0xA8,0x68,
0x78,0xB8,0xB9,0x79,0xBB,0x7B,0x7A,0xBA,0xBE,0x7E,
0x7F,0xBF,0x7D,0xBD,0xBC,0x7C,0xB4,0x74,0x75,0xB5,
0x77,0xB7,0xB6,0x76,0x72,0xB2,0xB3,0x73,0xB1,0x71,
0x70,0xB0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9C,0x5C,
0x5D,0x9D,0x5F,0x9F,0x9E,0x5E,0x5A,0x9A,0x9B,0x5B,
0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4B,0x8B,
0x8A,0x4A,0x4E,0x8E,0x8F,0x4F,0x8D,0x4D,0x4C,0x8C,
0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
0x43,0x83,0x41,0x81,0x80,0x40
};
ModBus 網絡是一個工業通信系統,由帶智能終端的可編程序控制器和計算機通過公用線路
或局部專用線路連接而成。其系統結構既包括硬件、亦包括軟件。它可應用于各種數據采
集和過程監控。下表 1是 ModBus 的功能碼定義。
表 1 ModBus 功能碼
ModBus 網絡只是一個主機,所有通信都由他發出。網絡可支持 247 個之多的遠程從屬控制
器,但實際所支持的從機數要由所用通信設備決定。采用這個系統,各 PC 可以和中心主機
交換信息而不影響各 PC 執行本身的控制任務。表 2 是 ModBus各功能碼對應的數據類型。
表 2 ModBus 功能碼與數據類型對應表
(1)ModBus 的傳輸方式
在 ModBus系統中有 2 種傳輸模式可選擇。這2 種傳輸模式與從機PC通信的能力是同等的。
選擇時應視所用 ModBus 主機而定,每個 ModBus系統只能使用一種模式,不允許 2種模式
混用。一種模式是 ASCII(美國信息交換碼),另一種模式是 RTU(遠程終端設備)這兩種
模式的定義見表 3
ASCII 可打印字符便于故障檢測,而且對于用高級語言(如 Fortan)編程的主計算機及主P
C 很適宜。RTU 則適用于機器語言編程的計算機和 PC主機。
用 RTU模式傳輸的數據是 8位二進制字符。如欲轉換為 ASCII模式,則每個 RTU字符首先
應分為高位和低位兩部分,這兩部分各含 4位,然后轉換成十六進制等量值。用以構成報
文的 ASCII字符都是十六進制字符。ASCII 模式使用的字符雖是 RTU 模式的兩倍,但 ASCII
數據的譯瑪和處理更為容易一些,此外,用 RTU模式時報文字符必須以連續數據流的形式
傳送,用 ASCII模式,字符之間可產生長達 1s 的間隔,以適應速度較快的機器。
表 4給出了以 RTU方式讀取整數據的例子
以 RTU方式讀取整數據的例子
十六進制數 4124 表示的十進制整數為 16676,錯誤校驗值要根據傳輸方式而定。
(2)ModBus 的數據校驗方式
CRC-16(循環冗余錯誤校驗)
CRC-16 錯誤校驗程序如下:報文(此處只涉及數據位,不指起始位、停止位和任選的奇偶
校驗位)被看作是一個連續的二進制,其最高有效位(MSB)首選發送。報文先與 X↑16 相
乘(左移 16 位),然后看X↑16+X↑15+X↑2+1 除,X↑16+X↑15+X↑2+1 可以表示為二進
制數 11000000000000101。整數商位忽略不記,16位余數加入該報文(MSB 先發送),成
為 2個 CRC校驗字節。余數中的 1全部初始化,以免所有的零成為一條報文被接收。經上
述處理而含有 CRC字節的報文,若無錯誤,到接收設備后再被同一多項式(X↑16+X↑15+X
↑2+1)除,會得到一個零余數(接收設備核驗這個 CRC 字節,并將其與被傳送的 CRC 比較)。
全部運算以 2為模(無進位)。
習慣于成串發送數據的設備會首選送出字符的最右位(LSB-最低有效位)。而在生成 CRC
情況下,發送首位應是被除數的最高有效位 MSB。由于在運算中不用進位,為便于操作起
見,計算 CRC時設 MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式
的 MSB略去不記,因其只對商有影響而不影響余數。
生成 CRC-16 校驗字節的步驟如下:
①裝如一個 16 位寄存器,所有數位均為 1。
②該 16 位寄存器的高位字節與開始 8 位字節進行“異或”運算。運算結果放入這個 16位
寄存器。
③把這個 16 寄存器向右移一位。
④若向右(標記位)移出的數位是 1,則生成多項式 1010000000000001和這個寄存器進行
“異或”運算;若向右移出的數位是 0,則返回③。
⑤重復③和④,直至移出 8位。
⑥另外 8位與該十六位寄存器進行“異或”運算。
⑦重復③~⑥,直至該報文所有字節均與 16位寄存器進行“異或”運算,并移位 8次。
⑧這個 16 位寄存器的內容即 2 字節 CRC 錯誤校驗,被加到報文的最高有效位。
另外,在某些非 ModBus 通信協議中也經常使用 CRC16 作為校驗手段,而且產生了一些 CRC
16 的變種,他們是使用 CRC16 多項式 X↑16+X↑15+X↑2+1,單首次裝入的 16 位寄存器為0
000;使用 CRC16 的反序 X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000 或 FFFFH。
LRC(縱向冗余錯誤校驗)
LRC 錯誤校驗用于ASCII 模式。這個錯誤校驗是一個8 位二進制數,可作為2 個ASCII 十
六進制字節傳送。把十六進制字符轉換成二進制,加上無循環進位的二進制字符和二進制
補碼結果生成 LRC錯誤校驗(參見圖)。這個 LRC 在接收設備進行核驗,并與被傳送的 LR
C 進行比較,冒號(:)、回車符號(CR)、換行字符(LF)和置入的其他任何非ASCII
十六進制字符在運算時忽略不計。


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕第一页在线 | 91九色在线观看 | 美日韩免费| 玖玖久久| 99精品欧美一区二区蜜桃免费 | www在线视频 | 日韩一区二区福利视频 | 精品国产一区二区三区日日嗨 | 日本福利在线观看 | 欧美极品在线播放 | 成人妇女免费播放久久久 | 日本小视频网站 | 2018国产精品 | 欧美一区二区三区在线视频 | 99精品国产一区二区三区 | 成年人在线观看视频 | 久草在线在线精品观看 | 91午夜在线 | 国产精品色一区二区三区 | 久久99国产精品 | 中文字幕一区二区三区不卡 | 国产一区二区视频在线 | 亚洲精品久久久一区二区三区 | 九九热免费视频在线观看 | 日韩在线精品视频 | 久久精品久久久久久 | 久久久久久国模大尺度人体 | 九色视频网站 | 精久久久| 亚洲在线视频 | 在线a视频网站 | 97色在线视频 | 成人国产一区二区三区精品麻豆 | 亚洲国产成人久久综合一区,久久久国产99 | 日韩日b视频 | 欧美国产视频一区二区 | 久久久久国产精品一区二区 | 成人在线视频免费观看 | 日韩在线观看网站 | 九色av| 成人在线视频网址 |