編寫一個字節數的rtu C語言校驗程序,Modbus通信協議中CRC校驗的快速C語言算法

Modbus通信協議中CRC校驗的快速C語言算法

2004年第11期            福 建 電 腦  63

Modbus通信協議中CRC校驗的快速C語言算法

孟開元

(西安石油大學計算機學院陜西西安710065)

【摘 要】 本文主要討論了Modbus通信協議的RTU幀格式中常用的錯誤校驗方法,即循環冗余校驗法(CRC)。

提出了Modbus協議反轉CRC校驗的方法,推導了反轉CRC校驗快速計算表格,并用C語言實現了基于快速查表算法的循環冗余校驗程序。

【關鍵詞】 校驗算法,循環冗余校驗,生成多項式,查表法

1 Modbus協議應用簡介

Modicon可編程控制器,既可以在它們之間,也可以和各種網絡上其他的設備間進行數據傳輸。所支持的網絡包括Mod2bus和ModbusPlus工業網絡,還有標準網絡,如MAP和Ether2net。網絡通過控制器的接入線或者網絡適配器,和Modicon可利用的出口等相連。連接關系圖見圖1

1-780-png_6_0_0_59_453_364_276_862.5_1236-946-0-269-946.jpg

間,它被使用在網絡中(顯示為T1-T2-T3-T4,如表2)。然后被發送的是第一個域設備地址。聯網的設備不斷地監控網絡總線,包括在‘默認’間隔期間。當第一個域(地址域)被接收到時,每臺設備譯解它去查找該地址的設備。在最后一個傳送的字符后面,一個類似的至少3.5字符時間間隔標志者消息的結束。一個新的消息在這個間隔之后開始。整個消息幀必須作為一連續的數據流被傳送。如果超過1.5字符時間的默認間隔在幀結束前發生,2所示2---T4

CRC校驗域

8比特

8比特

n38比特

16比特

結束標志

T1-T2-T3-T4

2.3地址域的處理

信息框架的地址領域包括2個字符的ASCII或8個比特的RTU,有效可使用的設備地址是從1到247(十進制)單個的可使用設備被設置在從1到247。一個主地址通過信息地址領域安排從屬地址。當從屬地址發送響應是,它設置自己的地址在響應領域地址中,讓主地址知道從地址正在工作。

地址0被用在通信地址中,這個通信地址所有的從地址都認識。當Modbus協議被用在高級的網絡上時,通信不能進行,也不能用別的方法代替。例如,Modbus升級版能用一個被全球

圖1 Modbus協議應用框圖

共享的數據庫。這個數據庫能被任意更改。

全部的Modicon控制器應用Modbus數據通信協議。這個

2.4功能域的設置

協議定義了一種信息結構標準,不管信息在何種網絡上傳輸,

信息框架的功能代碼域包括兩個字符的ASCII或八個字

控制器都可以識別和應用這個結構。它描述了控制器通常接

節的RTU。有效代碼范圍從1到255(十進制)。當然,一些代

入其他設備的進程,它如何應答別的設備的請求,如何可以檢

碼能適用所有的Modicon控制器,但是一些代碼只可用于某些

查和顯示錯誤。它為信息域的頁面格式和內容建立了一個標

模式,并且還有一些被保留供以后使用。各信息傳送各子設備

準的格式。

時,功能代碼域告訴子設備所要進行哪種運行類別。例如,讀

為了分析信息,Modbus協議提供了為Modicon控制器所應

一組不連續線圈或輸入端的開/關狀態;讀一組寄存器的內容;

用的內部標準。在Modbus網絡上傳輸期間,協議決定每個控

寫指定線圈或寄存器;或者允許裝載,記錄,或在子設備中驗證

制器如何知道它的設備地址,如何識別信息地址;決定用來操

程序。當子設備反應給主設備時,要用代碼域功能顯示其他的

作的類型;和提取所有的數據或包含在信息中的其他信息。

正常反應或一些錯誤發生(稱為異常反應)。作為正常響應,子

2 Modbus協議中數據幀格式

設備簡單應答原來的功能代碼。作為異常反應,子設備返回一

2.1ASCII幀格式

個代碼,這個代碼等價于原先的功能代碼(在字節中最有效的

在ASCII模式中,消息開始于一個‘:’字符(ASCII碼為

設置)。除了對例外響應的功能代碼修改外,子設備在響應信

3A),結束于一個‘回車/換行’對(CR/LF)(ASCII碼為0D和

息數據域里設置一個唯一的代碼。這樣告訴主設備發生了哪

0A)。聯網的設備不斷地對‘:’字符監控網絡總線。當一個‘:’

類錯誤,和錯誤的原因。

被接收到時,每個設備譯解它去查找該地址的設備。一個典型

3 RTU錯誤校驗域的內容

的消息幀如表1。

3.1CRC校驗域的次序

表1 ASCII消息幀格式

當RTU模式用在字符格式中時,錯誤校驗域包含一個16

開始標志地址域功能域數據域LRC校驗域結束標志

比特位,相當兩個8位字節的校驗值。校驗值是對信息內容計

1字符‘:’2字符2字符n字符2字符2字符CRLF算的CRC結果。CRC域被附加在信息最后,作為信息最后的

域。CRC域內低字節被附加在先,跟在后面的是高字節,CRC2.2RTU幀格式

在RTU模式中,消息開始于一個默認的至少3.5字符時高字節被設置為信息的最后。間的間隔。這是最容易被實現的在波特率中作為一多字符時3.2選擇CRC生成器多項式

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392985.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392985.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392985.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode1319. 連通網絡的操作次數(并查集)

用以太網線纜將 n 臺計算機連接成一個網絡,計算機的編號從 0 到 n-1。線纜用 connections 表示,其中 connections[i] [a, b] 連接了計算機 a 和 b。 網絡中的任何一臺計算機都可以通過網絡直接或者間接訪問同一個網絡中其他任意一臺計算機。 給你這個…

Codeforces 600E Lomsat gelral (樹上啟發式合并)

題目鏈接 Lomsat gelral 占坑……等深入理解了再來補題解…… #include <bits/stdc.h>using namespace std;#define rep(i, a, b) for (int i(a); i < (b); i)typedef long long LL;const int N 600010;int n; int cc[N], col[N], sz[N], son[N]; LL ans[N];vect…

如何讓CloudStack使用KVM創建Windows實例成功識別并掛載數據盤

問題產生背景&#xff1a; 使用CloudStack KVM組合進行資源池納管工作&#xff0c;通過ISO鏡像文件創建了兩個模板&#xff1a; RHEL6U3 64位系統以及WindowsServer2008 R2 SP1 64位系統。然后通過模板創建實例&#xff0c;掛載外接存儲&#xff0c;實例啟動后&#xff0c;通過…

云計算openstack介紹

轉載于:https://www.cnblogs.com/WIU1905/p/11107593.html

C語言Node lt T gt,c語言論壇填空;#includelt;stdio.hgt;# 愛問知識人

填空&#xff1b;#include #include #define N 6typedef struct node {int data;struct node *next;填空&#xff1b;#include #include #define N 6typedef struct node {int data;struct node *next;} NODE;void fun(NODE *h){ NODE *p, *q; int t;/**********found*********…

gitlab設置郵件服務器_如何設置您自己的一次性電子郵件服務器

gitlab設置郵件服務器by Oren Geva由Oren Geva 如何設置您自己的一次性電子郵件服務器 (How To Setup Your Own Disposable Email Server) Disposable email services are online services that provide temporary email addresses for registering or signing up on websites…

leetcode442. 數組中重復的數據

給定一個整數數組 a&#xff0c;其中1 ≤ a[i] ≤ n &#xff08;n為數組長度&#xff09;, 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間并在O(n)時間復雜度內解決這個問題嗎&#xff1f; 示例&#xff1a; 輸入: [4,3,2…

C語言基礎注意點

一、基礎知識篇 &#xff08;一&#xff09;關鍵字 1&#xff0c;存儲類型 A、auto 聲明自動變量&#xff0c;一般不使用 B、static 聲明靜態變量 C、extern 聲明變量是在其他文件正聲明&#xff08;可看做引用變量&#xff09; D、register 聲明積有器變量 2、常用…

**加密解密基礎、PKI及SSL、創建私有CA**

進程間通信 socket通信 客戶端-->請求--> 路由轉發 --> 服務端&#xff0c;取出資源 --> 封裝為可響應給客戶端的請求報文從接收請求端口發出 SSL/TLS協議的實現 OpenSSL OpenSSL程序組件 1234[rootlocalhost CA]# rpm -ql openssl /usr/lib/libcrypto.so.10 //加…

json 文件打讀取

1。獲取文件路徑 /** BookController.class.getClassLoader().getResource("static/json/book_nav.json").getPath() 獲取當期運行時的項目json文件路徑*/JSONObject json JsonResourceUtils.getJsonObjFromResource(BookController.class.getClassLoader().getReso…

16F877A和24C02通信匯編語言,pic單片機IIC通信讀24C02程序例 16F877A 主頻4M

#define _iic_h_//pic單片機IIC通信初始化函數聲明void iiccsh(void);//pic單片機IIC通信讀外圍設備函數聲明//功能&#xff1a;傳送一個8位地址&#xff0c;返回一個8位數據unsigned char iicread(unsigned char data);//pic單片機IIC通信給外圍器件發送函數聲明//功能&#x…

如何從XMLHttpRequest創建自定義獲取API

What is your worst nightmare?你最可怕的噩夢是什么&#xff1f; That sounded dark, but it’s not a rhetorical question. I really want to know because I am about to tell you mine. Along the way, we will learn some things like how the fetch API works and als…

leetcode637. 二叉樹的層平均值

給定一個非空二叉樹, 返回一個由每層節點平均值組成的數組。示例 1&#xff1a;輸入&#xff1a;3/ \9 20/ \15 7 輸出&#xff1a;[3, 14.5, 11] 解釋&#xff1a; 第 0 層的平均值是 3 , 第1層是 14.5 , 第2層是 11 。因此返回 [3, 14.5, 11] 。/*** Definition for a b…

5.3 上午

觀看英語課程——《戀練有詞》 學習Linux 轉載于:https://www.cnblogs.com/bgd140206110/p/6801164.html

AD庫轉換為KiCAD庫的方法

AD庫轉換為KiCAD庫的方法 參照博主另外一篇文檔&#xff1a; AD轉換為KiCAD的方法&#xff0c;點擊此處轉載于:https://www.cnblogs.com/zhiqiang_zhang/p/11109560.html

遺傳算法求解裝箱問題c語言,求解裝箱問題的遺傳算法-南昌航空大學期刊網.pdf...

求解裝箱問題的遺傳算法-南昌航空大學期刊網1998 2 Journal of Nanchang Institute of Aeronautical Technology 21998方 平    李 娟( 南昌航空工業學院)  ( 西北工業大學): ( Bin Packing) ,, , D( irst it De-creasing) ,: ; ; ;: TP301. 6( )( Bin Packing) , :1 2 …

mysql索引隨記

為什么80%的碼農都做不了架構師&#xff1f;>>> 先了解下Btree&#xff1a;https://my.oschina.net/u/3646190/blog/1593094 為什么每個數據項&#xff0c;即索引字段要盡量的小&#xff0c;比如int占4字節&#xff0c;要比bigint8字節少一半&#xff1f; 通過上面…

leetcode79. 單詞搜索(回溯算法)

給定一個二維網格和一個單詞&#xff0c;找出該單詞是否存在于網格中。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。 示例: board [ [‘A’,‘…

react鉤子_迷上了鉤子:如何使用React的useReducer()

react鉤子So the React Conference just happened and as always something new happened. Hooks happened! The React team talked about suspense, lazy loading, concurrent rendering, and hooks :D.因此&#xff0c;React會議剛剛發生&#xff0c;并且一如既往地發生了一些…

開發注意事項

明確需求 - 溝通 - 定好上下游接口 次序亂不得轉載于:https://www.cnblogs.com/zslzz/p/6802437.html