

智能电批MODBUS-RTU使用说明


1.1 连接说明
在设备与用户 MODBUS-RTU 连接之前,请确保满足以下规格要求:
通信接口
: 设备支持 MODBUS-RTU 通信协议,且作为从机,走 RS-485 接口;
ID 地址
: 触屏版控制器可通过上位机或者在控制器上设置通讯 ID 地址,机用版控制
器可通过拨码配置 ID 地址;
支持指令
: 读功能码 (0x03)操作和写 16 位功能码 (0x06);
通讯波特率
:可通过上位机或者在控制器上设置 485 通讯波特率为 9600bps,19200bps,
38400bps,57600bps,115200bps;
通讯数据格式 :可通过上位机或者在控制器上设置通讯数据格式,支持:
a 数据实际传输位数为 11 位,其中 1 位起始位,8 位数据位,2 位结束位
b 数据实际传输位数为 11 位:1 位起始位,8 位数据位,1 位偶校验位,1 位结束位
c 数据实际传输位数为 11 位:1 位起始位,8 位数据位,1 位奇校验位,1 位结束位
1.2 读地址数据(0x03)
主机请求数据格式:
ADD
控制器 ID 号
CMD
0x03
DATA[0]
地址 16 进制高 8 位,如峰值扭力地址 0x0110,DATA[0] = 0x01
DATA[1]
地址 16 进制低 8 位,如峰值扭力地址 0x0110,DATA[1] = 0x10
DATA[2]
读地址数据个数( 高 8 位)
DATA[2] = 0x00
DATA[3]
读地址数据个数( 低 8 位)
DATA[3] = 0x01
读取一个长度的地址数据
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
操作成功控制器返回数据格式:
ADD
控制器 ID 号
CMD
0x03
DATALENGTH
返回数据字节数 0x02
DATA[0]
返回数据,高 8 位
DATA[1]
返回数据,低 8 位
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
操作失败控制器返回数据格式:
ADD
控制器 ID 号
CMD
0x83
DATA[0]
0x00
DATA[1]
0x00
DATA[2]
错误码( 高 8 位)
DATA[3]
错误码( 低 8 位)
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
错误码:
0x0001
非法功能
0x0002
非法数据地址
0x0003
非法数据值
0x0004
从站设备故障
0x0006
从属设备忙
0x0012
不支持写入
0x000A
设定值超范围1.3 写地址数据(0x06)
主机请求数据格式:
ADD
控制器 ID 号
CMD
0x06
DATA[0]
写入地址 16 进制高 8 位,如切换任务号 0x0201,DATA[0] = 0x02
DATA[1]
写入地址 16 进制低 8 位,如切换任务号 0x0201,DATA[1] = 0x01
DATA[2]
写入地址数值( 高 8 位),如写入 17(0x11),DATA[2] = 0x00
DATA[3]
写入地址数值( 低 8 位),如写入 17(0x11),DATA[3] = 0x11
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
操作成功控制器返回数据格式:
ADD
控制器 ID 号
CMD
0x06
DATA[0]
被写入地址 16 进制高 8 位,如切换任务号 0x0201,DATA[0] = 0x02
DATA[1]
被写入地址 16 进制低 8 位,如切换任务号 0x0201,DATA[1] = 0x01
DATA[2]
被写入地址实际数值( 高 8 位),如写入后是 17(0x11),DATA[2] = 0x00
DATA[3]
被写入地址实际数值( 低 8 位),如写入后是 17(0x11),DATA[3] = 0x11
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
操作失败控制器返回数据格式:
ADD
控制器 ID 号
CMD
0x86
DATA[0]
0x00
DATA[1]
0x00
DATA[2]
错误码( 高 8 位)
DATA[3]
错误码( 低 8 位)
CRCL
CRC 校验有效字节( 低 8 位)
CRCH
CRC 校验有效字节( 高 8 位)
错误码:
0x0001
非法功能
0x0002
非法数据地址
0x0003
非法数据值
0x0004
从站设备故障
0x0006
从属设备忙
0x0012
不支持写入
0x000A
设定值超范围1.4 CRC 校验
485 通信,必须采用一致的CRC 检验算法,否则产生 CRC 校验错误。本控制器采用 16
位 CRC 校验,低字节在前,高字节在后,CRC 计算函数如下:
Uint16 Modbus_Crc(const Uint16 *data, Uint16 len)
{
Uint16 crc = 0xffff;
int16 i=0;
while (len--)
{
crc ^= *data++;
for (i = 0; i < 8; i++)
{
if (crc & 0x0001)
{
crc = (crc >> 1) ^ 0xA001;
}
else
{
crc = crc >> 1;
}
}
}
return (crc);
}