求问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):校验低字节

4个回答

又不是让你们开发,只是给个例子参考下而已

a22222222q
a22222222q 自己提问自己采纳,真无耻
大约 3 年之前 回复

难道现在比较流行 接了个项目或者是工作 直接 把文档扔出来 就有人给你一份解决的源码? 什么时候 csdn上面有这好事了

caozhy
每个人都有一个梦才不会孤单的说话就有天堂 就是。lz让人干活,自己白捡钱,有这等好事?
3 年多之前 回复

先付钱,再开发,不许骗人

看起来又是共享单车的项目,呵呵。

qq_16699945
qq_16699945 还真不是
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问