程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 通訊-求問C# 怎麼開發這個協議,從來沒做過,求個demo

通訊-求問C# 怎麼開發這個協議,從來沒做過,求個demo

編輯:編程解疑
求問C# 怎麼開發這個協議,從來沒做過,求個demo

一個完整的協議幀包括10部分:系統識別碼、整幀長度、包序號、幀類型、源地址長度、源地址、目的地址長度、目的地址、幀類型、幀校驗。
CRC32
CRC16

系統
識別碼 整幀長度 包序號 幀類型 源地址長度 源地址 目的地址長度 目的
地址 幀內容 幀校驗
3字節 2字節 1字節 1字節 1字節 6字節 1字節 6字節 不超過1400字節 1字節

2.1.1 系統識別碼
用途 保證系統安全性。作為辨別本系統成員身份的識別碼。
格式 3字節,十六進制,高字節在前
舉例 系統識別碼為123456時,填入0x12 0x34 0x56

2.1.2 整幀長度
用途 從系統識別碼部分到幀校驗部分整個幀所有字節數量
格式 2字節,十六進制,高字節在前
舉例 整幀長度為361個字節時,填入0x01 0x69

2.1.3 包序號
用途 無意義
格式 1字節,十六進制,固定值0x80
舉例 組協議幀時,填入0x80;解協議幀時,不必作處理

2.1.4 幀類型
用途 區分各種用途的數據幀
格式 1字節,十六進制,詳細分類見下表
舉例

各種幀類型列表如下:
幀類型名稱 幀類型
取值(16進制) 用途描述
GPRS方式數據幀 0x01 GPRS方式數據傳輸
短信方式數據幀 0x02 短信方式數據傳輸
GPRS方式參數幀 0x03 GPRS方式參數操作
短信方式參數幀 0x04 短信方式參數操作
撥號鏈路幀 0x05 數據中心計算機利用A型傳輸模塊給B型傳輸模塊振鈴
GPRS方式鏈路幀 0x06 GPRS方式鏈路維護
短信方式鏈路幀 0x07 短信方式鏈路維護
反饋信息幀 0x08 數據中心計算機發送的數據幀有錯誤時A型傳輸模塊向數據中心計算機反饋的信息幀
手機短信方式數據幀 0x09 與手機間進行數據傳輸
手機短信方式參數幀 0x0A 使用手機進行參數操作
協議轉發參數幀 0x0B 協議轉發模塊參數操作
手機短信方式主動上報數據幀 0x0C 未使用
收短信處理激活幀 0x0D A型收到此幀後開始向外輸出收到的短信。幀內容不填,源地址與目的地址填00000000001。上位機應以1至5秒為間隔向A型發送此幀。
遠程升級幀 0x0E 遠程升級A型、B型傳輸器
GPRS方式監控幀 0x21

短信方式監控幀 0x22

電池供電GPRS方式上報幀 0x31

電池供電參數幀 0x32

電池供電穿透幀 0x33

電池供電結束通訊幀 0x34

電池供電短信方式上報幀 0x35

電池供電短信方式校時幀 0x36

鏈路信息幀 0x50 用於獲得A型Modem的狀態。

2.1.5 源地址長度
用途 數據幀發起方的傳輸模塊地址長度,即SIM卡號數字位數
格式 1字節,十六進制
舉例 傳輸模塊地址為13603292541時,源地址長度為0x0B

2.1.6 源地址
用途 數據幀發起方的傳輸模塊地址,即SIM卡號
格式 地址不足12位數字時末尾補0。6字節,BCD碼。
舉例 傳輸模塊地址為13603292541時,首先末尾補0變成12位數字的地址136032925410,最終填入0x13 0x60 0x32 0x92 0x54 0x10

2.1.7 目的地址長度
用途 數據幀接收方的傳輸模塊地址長度,即SIM卡號數字位數
格式 與源地址長度相同
舉例 與源地址長度相同

2.1.8 目的地址
用途 數據幀接收方的傳輸模塊地址,即SIM卡號
格式 與源地址相同
舉例 與源地址相同

2.1.9 幀內容
用途 被傳輸的數據
格式 數據保持不變
舉例 數據保持不變

2.1.10 幀校驗
用途 從系統識別碼部分到幀內容部分所有字節計算異或校驗
格式 1字節,十六進制,異或校驗方法見附錄A
舉例 見表

MODBUS協議
物理層、鏈路層格式:
通信格式:MODBUS(RTU格式)
物理層 :RS485光電隔離、最大長度200米
物理配置:最多32個設備
247個邏輯地址(1到247),其中0是廣播地址,默認101。
鏈路層 :異步傳輸
數據格式:8位
數據數率:300,600,1200,2400,4800,9600,19200bit/S,默認為9600bps.
字節校驗:無校驗
停止位 :1
字符間隔時間:4到127(默認20)字符
錯誤校驗:CRC16
協議層格式:
MODBUS協議命令定義

功能碼(HEX) 作用
04 讀模擬量寄存器
02 讀開關量輸入狀態
05 控制繼電器輸出成功
03 讀保持寄存器(參數區)
10 寫多個保持寄存器(參數區)
2C 主動上報數據
2D 召測歷史記錄
2F 主動上報歷史記錄
30

34 讀模擬量寄存器擴展命令
32 讀開關量輸入狀態擴展命令
35 控制繼電器輸出成功擴展命令
33 讀保持寄存器(參數區)擴展命令
40 寫多個保持寄存器(參數區)擴展命令
36 讀描述(描述區)
37 寫描述(描述區)
38 讀單個設備描述
39 寫單個設備描述
3A 主動上報歷史記錄(下行含校時)6301
3B 主動上報事件歷史記錄(下行含校時)
DATA86VER 讀產品信息
寫產品信息

1、讀模擬量寄存器
功能碼:04,不支持廣播
首地址:30001
命令幀格式:下行
從機地址 功能碼 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:讀從設備1的地址35001開始的2個輸入寄存器:
01 04 13 88 00 02 F5 65
其中:
01 (HEX):從機地址
04 (HEX):功能碼
13 (HEX):起始地址(35001-30001)高字節
88 (HEX):起始地址(35001-30001)低字節
00 (HEX):寄存器數量高字節
02 (HEX):寄存器數量低字節
F5 (HEX):CRC校驗高字節
65 (HEX):CRC校驗低字節
應答幀格式:上行
從機地 址 功能碼 字節數 量 數據1高字節 數據1低字節 。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節
例如:讀從設備1的地址35001開始的2個輸入寄存器的響應:
01 04 04 00 25 00 36 6A 59
其中:
01 (HEX):從機地址
04 (HEX):功能碼
04 (HEX):(寄存器數量х2)
00 (HEX):地址35001的數據的高字節
25 (HEX):地址35001的數據的低字節
00 (HEX):地址35002的數據的高字節
36 (HEX):地址35002的數據的低字節
6A (HEX):CRC校驗高字節
59 (HEX):CRC校驗低字節
2、 讀開關量輸入狀態
功能碼:02,不支持廣播
首地址:10001
命令幀格式:下行
從機地址 功能碼 起始地址高字節 起始地址低字節 觸點數量高字節 觸點數量低字節 校驗高字節 校驗低字節
例如:讀從設備1的開關量輸入15001—15010:
01 02 13 88 00 0A 7C A3
其中:
01 (HEX):從機地址
02 (HEX):功能碼
13 (HEX):起始地址(15001-10001)高字節
88 (HEX):起始地址(15001-10001)低字節
00 (HEX):觸點數量高字節
0A (HEX):觸點數量低字節
7C (HEX):CRC校驗高字節
A3 (HEX):CRC校驗高字節
應答幀格式:上行
從機地址 功能碼 字節數量 數據1 。。。 數據N 校驗高字節 校驗低字節
例如:讀從設備1的開關量輸入寄存器15001—15010的響應:
01 (HEX):從機地址
02 (HEX):功能碼
02 (HEX):字節數量
40 (HEX):開關量輸入15001-15008狀態,其中位0是15001,位7是15008
02 (HEX):開關量輸入15009-15010狀態,其中位0是15009,位1是15010
09 (HEX):CRC校驗高字節
B9 (HEX):CRC校驗低字節
3、控制繼電器輸出成功
功能碼:05,支持廣播
首地址:00001
命令幀格式:下行
從機地址 功能碼 起始地址高字節 起始地址低字節 數據高字節 數據低字節 校驗高字節 校驗低字節
例如:強制從設備1的5001線圈閉合(ON):
01 05 13 88 FF 00 08 94
其中:
01 (HEX):從機地址
05 (HEX):功能碼
13 (HEX):線圈地址(5001-1)高字節
88 (HEX):線圈地址(5001-1)低字節
FF (HEX):數據高字節
00 (HEX):數據低字節
08 (HEX):校驗高字節
94 (HEX):校驗低字節

強制從設備1的5001線圈斷開(OFF):
01 05 13 88 00 00 49 64
其中:
01 (HEX):從機地址
05 (HEX):功能碼
13 (HEX):線圈地址(5001-1)高字節
88 (HEX):線圈地址(5001-1)低字節
00 (HEX):數據高字節
00 (HEX):數據低字節
49 (HEX):校驗高字節
64 (HEX):校驗低字節
應答幀格式:上行
從機地址 功能碼 起始地址高字節 起始地址低字節 數據高字節 數據低字節 校驗高字節 校驗低字節
例如:強制從設備1的5001線圈閉合(ON)的響應:
01 05 13 88 FF 00 08 94
其中:
01 (HEX):從機地址
05 (HEX):功能碼
13 (HEX):線圈地址(5001)高字節
88 (HEX):線圈地址(5001)低字節
FF (HEX):數據高字節
00 (HEX):數據低字節
08 (HEX):校驗高字節
94 (HEX):校驗低字節

強制從設備1的5001線圈斷開(OFF)的響應:
01 05 13 88 00 00 49 64
其中:
01 (HEX):從機地址
05 (HEX):功能碼
13 (HEX):線圈地址(5001)高字節
88 (HEX):線圈地址(5001)低字節
00 (HEX):數據高字節
00 (HEX):數據低字節
49 (HEX):校驗高字節
64 (HEX):校驗低字節
4、 讀保持寄存器(參數區)
功能碼:03,不支持廣播
首地址:40001
命令幀格式:下行
從機地址 功能碼 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:讀從設備2的地址40002開始的2個保持寄存器:
02 03 00 01 00 02 95 F8
其中:
02 (HEX):從機地址
03 (HEX):功能碼
00 (HEX):起始地址(40002-40001)高字節
01 (HEX):起始地址(40002-40001)低字節
00 (HEX):寄存器數量高字節
02 (HEX):寄存器數量低字節
95 (HEX):CRC校驗高字節
F8 (HEX):CRC校驗低字節
應答幀格式:上行
從機地 址 功能碼 字節數 量 數據1高字節 數據1低字節 。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節
例如:讀從設備2的地址40002開始的2個保持寄存器的響應:
02 03 04 00 55 00 02 58 E2
其中:
02 (HEX):從機地址
03 (HEX):功能碼
04 (HEX):字節數量
00 (HEX):40002地址的數據的高字節
55 (HEX):40002地址的數據的低字節
00 (HEX):40003地址的數據的高字節
02 (HEX):40003地址的數據的低字節
58 (HEX):CRC校驗高字節
E2 (HEX):CRC校驗低字節
5、寫多個保持寄存器(參數區)
功能碼:10(HEX),支持廣播
首地址:40001
命令幀格式:下行
從機地址 功能碼 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 字節數量 數據1高字節 數據1低字節 。。。

。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址40001開始的1個保持寄存器值12 34:
01 10 00 00 00 01 02 12 34 AB 27
其中:
01 (HEX):從機地址
10 (HEX):功能碼
00 (HEX):起始地址(40001-40001)高字節
00 (HEX):起始地址(40001-40001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量低字節
02 (HEX):字節數量
12 (HEX):將要寫入到40001的數據的高字節
34 (HEX):將要寫入到40001的數據的低字節
AB(HEX):CRC校驗高字節
27 (HEX):CRC校驗低字節
應答幀格式:上行
從機地址 功能碼 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址40001開始的1個保持寄存器的響應:
01 10 00 00 00 01 01 C9
其中:
01 (HEX):從機地址
10 (HEX):功能碼
00 (HEX):起始地址(40001-40001)高字節
00 (HEX):起始地址(40001-40001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量高字節
01 (HEX):CRC校驗高字節
C9(HEX):CRC校驗低字節
6、主動上報數據
功能碼:2C(HEX)
命令幀:上行
從機地址 功能碼 數據字節長度高字節 數據字節長度低字節 數據1高字節 數據1低字節

。。。 。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節

響應幀:下行
從機地址 功能碼 數據字節長度高字節 數據長度低字節 校驗高字節 校驗低字節

例如:從設備101主動上報地址35001開始的1個寄存器數據1234:
65 2C 00 02 12 34 C4 9F
其中:
65 (HEX):從機地址
2C (HEX):功能碼
00(HEX):數據長度高字節
02(HEX):數據長度低字節
12 (HEX):數據高字節
34 (HEX):數據低字節
C4(HEX):CRC校驗高字節
9F(HEX):CRC校驗低字節
主站回應:
65 2C 00 02 5E E0
注:此功能碼是平升公司的專用擴展命令,以此支持主動上報功能。
7、召測歷史記錄
功能碼:2D(HEX),支持廣播
命令幀格式:下行
從機地址 功能碼 起始年 起始月 起始日 起始時 起始分 起始秒

終止年 終止月 終止日 終止時 終止分 終止秒 crc_h crc_l
注:如果時間(年月日時分秒)寫為0xff,則不比較。當時間的6個字節全為0xff時,代表從設備中的第一條歷史記錄中開始召測。
例如:召測從設備1的10年1月10日8時~10年1月11日8時的歷史記錄:
01 2D 10 01 10 08 FF FF 10 01 11 08 FF FF F7 50
其中:
01 (HEX):從機地址
2D (HEX):功能碼
10 (BCD):起始年
01 (BCD):起始月
10 (BCD):起始日
08 (BCD):起始時
FF (BCD):起始分 (0xFF-不比較)
FF (BCD):起始秒 (0xFF-不比較)
10 (BCD):終止年
01 (BCD):終止月
11 (BCD):終止日
08 (BCD):終止時
FF (BCD):終止分 (0xFF-不比較)
FF (BCD):終止秒 (0xFF-不比較)
F7 (HEX):CRC校驗高字節
50 (HEX):CRC校驗低字節

應答幀格式:上行
從機地址 功能碼 記錄數量 每條記錄字節數 記錄1第1字節 。。。。。。 記錄1第N字節 。。。。。。

記錄M第1字節 。。。。。。 記錄M第N字節 crc_h crc_l

如果設備中找不到符合條件的記錄,則記錄數量置0。格式如下:
從機地址 功能碼 記錄數量 每條記錄字節數 校驗高字節 校驗低字節
每條記錄內容的格式:
年 月 日 時 分 秒 記錄的量
8、主動上報歷史記錄
功能碼:2F(HEX),支持廣播
上報格式:上行
從機地址 功能碼 記錄數量 每條記錄字節數 記錄1第1字節 。。。。。。 記錄1第N字節 。。。。。。

記錄M第1字節 。。。。。。 記錄M第N字節 crc_h crc_l

回應幀格式:下行
從機地址 功能碼 記錄數量 每條記錄字節數 crc_h crc_l
9、讀模擬量寄存器
功能碼:34(HEX),不支持廣播
首地址:30001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:讀從設備1的地址35001開始的2個輸入寄存器:
01 34 00 13 88 00 02 0A DB
其中:
01 (HEX):從機地址
34 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
13 (HEX):起始地址(35001-30001)高字節
88 (HEX):起始地址(35001-30001)低字節
00 (HEX):寄存器數量高字節
02 (HEX):寄存器數量低字節
0A (HEX):CRC校驗高字節
DB (HEX):CRC校驗低字節
應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 字節數量高字節 字節數量低字節 數據1高字節 數據1低字節 。。。 。。。

數據N高字節 數據N低字節 校驗高字節 校驗低字節

例如:讀從設備1的地址35001開始的2個輸入寄存器的響應:
01 34 01 13 88 00 04 00 25 00 36 67 AE
其中:
01 (HEX):從機地址
34 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
13 (HEX):起始地址(35001-30001)高字節
88 (HEX):起始地址(35001-30001)低字節
00 (HEX):字節數量高字節
04 (HEX):字節數量低字節
00 (HEX):地址35001的數據的高字節
25 (HEX):地址35001的數據的低字節
00 (HEX):地址35002的數據的高字節
36 (HEX):地址35002的數據的低字節
67 (HEX):CRC校驗高字節
AE (HEX):CRC校驗低字節

10、讀開關量輸入狀態
功能碼:32(HEX),不支持廣播
首地址:10001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 觸點數量高字節 觸點數量低字節 校驗高字節 校驗低字節
例如:讀從設備1的開關量輸入15001—15010:
01 32 00 13 88 00 0A 0B 7B
其中:
01 (HEX):從機地址
32 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
13 (HEX):起始地址(15001-10001)高字節
88 (HEX):起始地址(15001-10001)低字節
00 (HEX):觸點數量高字節
0A (HEX):觸點數量低字節
0B (HEX):CRC校驗高字節
7B (HEX):CRC校驗高字節
應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 字節數量高字節 字節數量低字節

數據1 。。。 數據N 校驗高字節 校驗低字節

例如:讀從設備1的開關量輸入寄存器15001—15010的響應:
01 32 01 13 88 00 02 40 02 66 10
其中:
01 (HEX):從機地址
32 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
13 (HEX):起始地址(15001-10001)高字節
88 (HEX):起始地址(15001-10001)低字節
00 (HEX):字節數量高字節
02 (HEX):字節數量低字節
40 (HEX):開關量輸入15001-15008狀態,其中位0是15001,位7是15008
02 (HEX):開關量輸入15009-15010狀態,其中位0是15009,位1是15010
66 (HEX):CRC校驗高字節
10 (HEX):CRC校驗低字節
11、控制繼電器輸出成功
功能碼:35(HEX),支持廣播
首地址:00001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 數據高字節 數據低字節 校驗高字節 校驗低字節
例如:強制從設備1的5001線圈閉合(ON):
01 35 00 13 88 FF 00 CB 3B
其中:
01 (HEX):從機地址
35 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
13 (HEX):線圈地址(5001-1)高字節
88 (HEX):線圈地址(5001-1)低字節
FF (HEX):數據高字節
00 (HEX):數據低字節
CB (HEX):校驗高字節
3B (HEX):校驗低字節

強制從設備1的5001線圈斷開(OFF):
01 35 00 13 88 00 00 37 87
其中:
01 (HEX):從機地址
35 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
13 (HEX):線圈地址(5001-1)高字節
88 (HEX):線圈地址(5001-1)低字節
00 (HEX):數據高字節
00 (HEX):數據低字節
37 (HEX):校驗高字節
87 (HEX):校驗低字節
應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 數據高字節 數據低字節 校驗高字節 校驗低字節
例如:強制從設備1的5001線圈閉合(ON)的響應:
01 35 01 13 88 FF 00 F6 FB
其中:
01 (HEX):從機地址
35 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
13 (HEX):線圈地址(5001)高字節
88 (HEX):線圈地址(5001)低字節
FF (HEX):數據高字節
00 (HEX):數據低字節
F6 (HEX):校驗高字節
FB (HEX):校驗低字節

強制從設備1的5001線圈斷開(OFF)的響應:
01 35 01 13 88 00 00 B7 0B
其中:
01 (HEX):從機地址
35 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
13 (HEX):線圈地址(5001)高字節
88 (HEX):線圈地址(5001)低字節
00 (HEX):數據高字節
00 (HEX):數據低字節
B7 (HEX):校驗高字節
0B (HEX):校驗低字節

10、讀保持寄存器(參數區)
功能碼:33 (HEX),不支持廣播
首地址:40001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:讀從設備2的地址40002開始的2個保持寄存器:
02 33 00 00 01 00 02 ED 02
其中:
02 (HEX):從機地址
33 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(40002-40001)高字節
01 (HEX):起始地址(40002-40001)低字節
00 (HEX):寄存器數量高字節
02 (HEX):寄存器數量低字節
ED (HEX):CRC校驗高字節
02 (HEX):CRC校驗低字節

應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 字節數量高字節 字節數量低字節

數據1高字節 數據1低字節 。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節

例如:讀從設備2的地址40002開始的2個保持寄存器的響應:
02 33 01 00 01 00 04 00 55 00 02 80 ED
其中:
02 (HEX):從機地址
33 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(40002-40001)高字節
01 (HEX):起始地址(40002-40001)低字節
00 (HEX):字節數量高字節
04 (HEX):字節數量低字節
00 (HEX):40002地址的數據的高字節
55 (HEX):40002地址的數據的低字節
00 (HEX):40003地址的數據的高字節
02 (HEX):40003地址的數據的低字節
80 (HEX):CRC校驗高字節
ED (HEX):CRC校驗低字節
11、寫多個保持寄存器(參數區)
功能碼:40(HEX),支持廣播
首地址:40001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 數據1高字節 數據1低字節

。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址40001開始的1個保持寄存器值12 34:
01 40 00 00 00 00 01 12 34 58 C3
其中:
01 (HEX):從機地址
40 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(40001-40001)高字節
00 (HEX):起始地址(40001-40001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量低字節
12 (HEX):將要寫入到40001的數據的高字節
34 (HEX):將要寫入到40001的數據的低字節
58(HEX):CRC校驗高字節
C3 (HEX):CRC校驗低字節
應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址40001開始的1個保持寄存器的響應:
01 40 01 00 00 00 01 F2 30
其中:
01 (HEX):從機地址
40 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(40001-40001)高字節
00 (HEX):起始地址(40001-40001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量高字節
F2 (HEX):CRC校驗高字節
30(HEX):CRC校驗低字節

12、讀描述(描述區)
功能碼:36 (HEX),不支持廣播
首地址:50001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:讀從設備2的地址50002開始的2個保持寄存器:
02 36 00 00 01 00 02 ED 57
其中:
02 (HEX):從機地址
36 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(50002-50001)高字節
01 (HEX):起始地址(50002-50001)低字節
00 (HEX):寄存器數量高字節
02 (HEX):寄存器數量低字節
ED (HEX):CRC校驗高字節
57 (HEX):CRC校驗低字節

應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 字節數量高字節 字節數量低字節

數據1高字節 數據1低字節 。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節

例如:讀從設備2的地址50002開始的2個保持寄存器的響應:
02 36 01 00 01 00 04 00 55 00 02 90 FD
其中:
02 (HEX):從機地址
36 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(50002-50001)高字節
01 (HEX):起始地址(50002-50001)低字節
00 (HEX):字節數量高字節
04 (HEX):字節數量低字節
00 (HEX):50002地址的數據的高字節
55 (HEX):50002地址的數據的低字節
00 (HEX):50003地址的數據的高字節
02 (HEX):50003地址的數據的低字節
90 (HEX):CRC校驗高字節
FD (HEX):CRC校驗低字節
13、寫描述(描述區)
功能碼:37(HEX),支持廣播
首地址:50001
命令幀格式:下行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 數據1高字節 數據1低字節

。。。 。。。 數據N高字節 數據N低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址50001開始的1個保持寄存器值12 34:
01 37 00 00 00 00 01 12 34 19 25
其中:
01 (HEX):從機地址
37 (HEX):功能碼
00 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(50001-50001)高字節
00 (HEX):起始地址(50001-50001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量低字節
12 (HEX):將要寫入到50001的數據的高字節
34 (HEX):將要寫入到50001的數據的低字節
19(HEX):CRC校驗高字節
25 (HEX):CRC校驗低字節
應答幀格式:上行
從機地址 功能碼 命令方向 起始地址高字節 起始地址低字節 寄存器數量高字節 寄存器數量低字節 校驗高字節 校驗低字節
例如:寫從設備1的地址50001開始的1個保持寄存器的響應:
01 37 01 00 00 00 01 F3 87
其中:
01 (HEX):從機地址
37 (HEX):功能碼
01 (HEX):命令方向:00-下行,01-上行
00 (HEX):起始地址(50001-50001)高字節
00 (HEX):起始地址(50001-50001)低字節
00 (HEX):寄存器數量高字節
01 (HEX):寄存器數量高字節
F3 (HEX):CRC校驗高字節
87(HEX):CRC校驗低字節

14、主動上報歷史記錄(下行含校時)
功能碼:3A(HEX),支持廣播
上報格式:上行
從機地址 功能碼 記錄數量 每條記錄字節數 記錄1第1字節 。。。。。。 記錄1第N字節 。。。。。。

記錄M第1字節 。。。。。。 記錄M第N字節 crc_h crc_l

回應幀格式:下行
從機地址 功能碼 記錄數量 每條記錄字節數 年 月

日 時 分 秒 crc_h crc_l

其中年、月、日、時、分、秒為BCD格式。

15、主動上報事件歷史記錄(下行含校時)
功能碼:3B(HEX),支持廣播
上報格式:上行
從機地址 功能碼 事件
類型 記錄數量 每條記錄字節數 記錄1第1字節 。。。。。。 記錄1第N字節 。。。。。。

記錄M第1字節 。。。。。。 記錄M第N字節 crc_h crc_l

回應幀格式:下行
從機地址 功能碼 事件類型 記錄數量 每條記錄字節數 年 月

日 時 分 秒 crc_h crc_l

其中年、月、日、時、分、秒為BCD格式。

16、從設備回應主設備時的附加信息
當從設備回應時,它使用功能代碼域來指示是正常回應(無誤)還是有某種錯誤發生(稱作異議回應)。對正常回應,從設備僅回應相應的功能代碼。對異議回應,從設備返回一等同於正常代碼的代碼,但最高位置為邏輯1。我們還可以利用這一功能向主設備發送重要狀態信息。
對正常回應,從設備僅回應同樣的功能代碼。對異議回應,它返回:
例如主設備發來的功能代碼為03H,正常回應時功能代碼仍為03H,有異議時功能代碼則為83H。
此時從設備將一獨特的代碼放到回應消息的數據域中,這能告訴主設備發生了什麼錯誤或有什麼重要信息。
錯誤代碼:
01 :從設備接收到非法功能碼
02 :從設備接收到非法的讀或寫內存地址
03 :從設備接收到非法的數據。
04 :現場條件不允許開泵。
05:控泵中.
06:控泵失敗
應答幀格式:上行
從機地址 功能碼 錯誤代碼 校驗高字節 校驗低字節
例如:主機寫從設備1的46001地址的保持寄存器,由於模塊不支持此地址,因此應答地址錯誤:
0190 02 CD C1
其中:
01 (HEX):從機地址
90 (HEX):功能碼(0x10 | 0x80)
02 (HEX):錯誤代碼(非法內存地址)
CD(HEX):校驗高字節
C1 (HEX):校驗低字節

最佳回答:


又不是讓你們開發,只是給個例子參考下而已

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved