📄 modbus_protocal.h
字号:
/*******************************************************************************
读位通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x01) + 位TAG地址 + 读取位数 + LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = M38.6(DEC),读取连续5个位,
设正常通讯读出值为11010,若通讯错误,则设错误代码为16(DEC)
发送帧
帧头 设备地址 功能代码 TAG M38.6(DEC) = M60026(HEX) 读取位数 LRC校验
字节 _1__ ____2____ ____2____ ______________6______________ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x31 0x4E 0x36 0x30 0x30 0x32 0x36 0x30 0x35 0x38 0x38
ASC ':' '1' '6' '0' '1' 'M' '6' '0' '0' '2' '6' '0' '5' '8' '8'
结束符
____2____
HEX 0x0D 0x0A
ASC '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 读取值(字节数为读取位数) LRC校验 结束符
字节 _1__ ____2____ ____2____ ___________5____________ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x31 0x31 0x31 0x30 0x31 0x30 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '0' '1' '1' '1' '0' '1' '0' '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x31 0x31 0x30 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '1' '1' '0' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
写位通讯帧, 协议为MODBUS协议ASCII方式
协议组成 (':' + 设备地址 + 功能代码(0x0F) + 位TAG地址 + 写入位数 + 写入位数据
+ LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = M38.6(DEC),连续写4个位, 写入值分别为1001
若通讯错误,则设错误代码为16(DEC)
发送帧
帧头 设备地址 功能代码 TAG M38.6(DEC) = M60026(HEX) 写入位数
字节 _1__ ____2____ ____2____ ______________6______________ ____2____
HEX 0x3A 0x31 0x36 0x30 0x46 0x4E 0x36 0x30 0x30 0x32 0x36 0x30 0x34
ASC ':' '1' '6' '0' 'F' 'M' '6' '0' '0' '2' '6' '0' '4'
数据(字节数为写入位数) LRC校验 结束符
_________4_________ ____2____ ____2____
HEX 0x31 0x30 0x30 0x31 0x^^ 0x^^ 0x0D 0x0A
ASC '1' '0' '0' '1' '^' '^' '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '0' 'F' '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x46 0x31 0x30 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' 'F' '1' '0' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
读字节通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x03) + 字节TAG地址 + 读取字节数 + LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MB14(DEC),读取连续5个字节,
设正常情况下返加的5个值为十六进制{0x13, 0x12, 0x31, 0x33, 0xA5},
若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MB14(DEC) = MB000E(HEX) 读取字节数 LRC校验
字节 _1__ ____2____ ____2____ ______________6______________ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x33 0x4E 0x42 0x30 0x30 0x30 0x45 0x30 0x35 0x^^ 0x^^
ASC ':' '1' '6' '0' '3' 'M' 'B' '0' '0' '0' 'E' '0' '5' '^' '^'
结束符
____2____
HEX 0x0D 0x0A
ASC '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 读取值(占用字节数为读取字节数 * 2)
字节 _1__ ____2____ ____2____ ________________________10________________________
HEX 0x3A 0x31 0x36 0x30 0x33 0x31 0x33 0x31 0x32 0x33 0x31 0x33 0x33 0x41 0x35
ASC ':' '1' '6' '0' '3' '1' '3' '1' '2' '3' '1' '3' '3' 'A' '5'
LRC校验 结束符
字节 ____2____ ____2____
HEX 0x^^ 0x^^ 0x0D 0x0A
ASC '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x33 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '3' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
写字节通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x04) + 字节TAG地址 + 写入字节数 + 写入值
+ LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MB14(DEC),写入连续4个字节, 写入值为十六进制
{0x12, 0x31, 0x33, 0xA5}, 若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MB14(DEC) = MB000E(HEX) 写入字节数
字节 _1__ ____2____ ____2____ ______________6______________ ____2____
HEX 0x3A 0x31 0x36 0x30 0x34 0x4E 0x42 0x30 0x30 0x30 0x45 0x30 0x34
ASC ':' '1' '6' '0' '4' 'M' 'B' '0' '0' '0' 'E' '0' '4'
写入值(占用字节数为写入字节数 * 2) LRC校验 结束符
__________________8____________________ ____2____ ____2____
HEX 0x31 0x32 0x33 0x31 0x33 0x33 0x41 0x35 0x^^ 0x^^ 0x0D 0x0A
ASC '1' '2' '3' '1' '3' '3' 'A' '5' '^' '^' '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x34 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '0' '4' '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x34 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '4' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
读字通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x05) + 字TAG地址 + 读取字数 + LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MW22(DEC), MW22占用MB22和MB23两个字节,
设读取连续2个字(读取值为MW22、MW24) 设MW22 = 0x1314, MW24 = 0x3245,
若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MW22(DEC) = MW0016(HEX) 读取字数 LRC校验
字节 _1__ ____2____ ____2____ ______________6______________ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x35 0x4E 0x57 0x30 0x30 0x31 0x36 0x30 0x32 0x^^ 0x^^
ASC ':' '1' '6' '0' '5' 'M' 'W' '0' '0' '1' '6' '0' '2' '^' '^'
结束符
____2____
HEX 0x0D 0x0A
ASC '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 读取值(占用字节数 = 读取字数 * 4)
字节 _1__ ____2____ ____2____ ___________________8____________________
HEX 0x3A 0x31 0x36 0x30 0x35 0x31 0x33 0x31 0x34 0x33 0x32 0x34 0x35
ASC ':' '1' '6' '0' '5' '1' '3' '1' '4' '3' '2' '4' '5'
LRC校验 结束符
字节 ____2____ ____2____
HEX 0x^^ 0x^^ 0x0D 0x0A
ASC '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x35 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '5' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
写字通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x06) + 字TAG地址 + 写入字数 + 写入值
+ LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MW14(DEC),写入连续2个字, 写入值为十六进制
{0x1231, 0x33A5}, 若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MW14(DEC) = MW000E(HEX) 写入字数
字节 _1__ ____2____ ____2____ ______________6______________ ____2____
HEX 0x3A 0x31 0x36 0x30 0x36 0x4E 0x57 0x30 0x30 0x30 0x45 0x30 0x32
ASC ':' '1' '6' '0' '6' 'M' 'W' '0' '0' '0' 'E' '0' '2'
写入值(占用字节数 = 写入字数 * 4 ) LRC校验 结束符
__________________8____________________ ____2____ ____2____
HEX 0x31 0x32 0x33 0x31 0x33 0x33 0x41 0x35 0x^^ 0x^^ 0x0D 0x0A
ASC '1' '2' '3' '1' '3' '3' 'A' '5' '^' '^' '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x36 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '0' '6' '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x36 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '6' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
读双字通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x07) + 双字TAG地址 + 读取双字数 + LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MD22(DEC), MD22占用MB22和MB23,MB24,MB26共四个字节,
设读取连续1个双字,设MD22 = 0x13143245,
若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MW22(DEC) = MW0016(HEX) 读取字数 LRC校验
字节 _1__ ____2____ ____2____ ______________6______________ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x37 0x4E 0x44 0x30 0x30 0x31 0x36 0x30 0x31 0x^^ 0x^^
ASC ':' '1' '6' '0' '7' 'M' 'D' '0' '0' '1' '6' '0' '1' '^' '^'
结束符
____2____
HEX 0x0D 0x0A
ASC '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 读取值(占用字节数 = 读取双字数 * 8)
字节 _1__ ____2____ ____2____ ___________________8____________________
HEX 0x3A 0x31 0x36 0x30 0x37 0x31 0x33 0x31 0x34 0x33 0x32 0x34 0x35
ASC ':' '1' '6' '0' '7' '1' '3' '1' '4' '3' '2' '4' '5'
LRC校验 结束符
字节 ____2____ ____2____
HEX 0x^^ 0x^^ 0x0D 0x0A
ASC '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x37 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '7' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
/*******************************************************************************
写双字通讯帧, 协议为MODBUS协议ASCII方式
协议组成(':' + 设备地址 + 功能代码(0x08) + 双字TAG地址 + 写入双字数 + 写入值
+ LRC校验 + 结束符)
EXAMPLE: 设备地址 = 22(DEC), TAG = MD14(DEC),写入连续1个双字, 写入值为十六进制
{0x123133A5}, 若通讯错误,设错误代码为15(DEC)
发送帧
帧头 设备地址 功能代码 TAG MD14(DEC) = MD000E(HEX) 写入双字数
字节 _1__ ____2____ ____2____ ______________6______________ ____2____
HEX 0x3A 0x31 0x36 0x30 0x38 0x4E 0x44 0x30 0x30 0x30 0x45 0x30 0x31
ASC ':' '1' '6' '0' '8' 'M' 'D' '0' '0' '0' 'E' '0' '1'
写入值(占用字节数 = 写入双字数 * 4 ) LRC校验 结束符
__________________8____________________ ____2____ ____2____
HEX 0x31 0x32 0x33 0x31 0x33 0x33 0x41 0x35 0x^^ 0x^^ 0x0D 0x0A
ASC '1' '2' '3' '1' '3' '3' 'A' '5' '^' '^' '\r' '\n'
正常返回帧
帧头 设备地址 功能代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x30 0x38 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '0' '8' '^' '^' '\r' '\n'
错误返回帧
帧头 设备地址 功能代码 错误代码 LRC校验 结束符
字节 _1__ ____2____ ____2____ ____2____ ____2____ ____2____
HEX 0x3A 0x31 0x36 0x38 0x38 0x30 0x46 0x^^ 0x^^ 0x0D 0x0A
ASC ':' '1' '6' '8' '8' '0' 'F' '^' '^' '\r' '\n'
注意:0x^^代表实际运算的校验和, '^'表示对应的校验和的ASCII表达方式
*******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -