2024年2月27日发(作者:长孙同方)
AM400_800系列PLC内置
MODBUS从站通讯协议说明
协议驱动名称建议按通信网络类型分别命名为:
INOVANCE_A400_800_ModbusRTU
INOVANCE_ A400_800_ModbusTCP
版本
V3.0
日期
2019-10-17
作者
FXX
说明
增加通讯格式说明,对外发布
目 录
AM400_800系列PLC内置 MODBUS从站通讯协议说明 ........................................................ 1
目 录 .............................................................................................................................................. 2
概述........................................................................................................................................... 3
可访问I/Q线圈数量 ....................................................................................................... 4
可访问的M寄存器数量 ................................................................................................. 4
1. ModbusRTU通讯帧格式说明 ............................................................................................. 5
1.1功能码0x01:读Q线圈 ........................................................................................... 5
1.2功能码0x02:读I线圈 ............................................................................................ 6
1.3功能码0x03:读M寄存器 ...................................................................................... 7
1.4 功能码0x05:写Q单线圈 ...................................................................................... 8
1.5 功能码0x06:写M单寄存器 ................................................................................. 9
1.6 功能码0x0f:写Q多线圈 ..................................................................................... 10
1.7 功能码0x10:写M多寄存器 ............................................................................... 11
1.8 错误响应帧 .............................................................................................................. 12
2. ModbusTCP通讯帧格式说明 ........................................................................................... 13
2.1功能码0x01:读Q线圈 ......................................................................................... 13
2.2功能码0x02:读I线圈 .......................................................................................... 14
2.3功能码0x03:读M寄存器 .................................................................................... 15
2.4 功能码0x05:写Q单线圈 .................................................................................... 16
2.5 功能码0x06:写M单寄存器 ............................................................................... 17
2.6 功能码0x0f:写Q多线圈 ..................................................................................... 18
2.7 功能码0x10:写M多寄存器 ............................................................................... 19
2.8 错误响应帧 .............................................................................................................. 20
概述
本文档旨在说明将AM400、AM400_800、AC800等(以下简称AM400_800)系列PLC作为MODBUS从站进行访问时,需采用的通讯格式进行说明,并对访问其中各种软元件的索引编址方式进行了说明,便于MODBUS主站侧的编程。
AM400_800的元件有Q区,I区,M区这三种,分别都可以按位,按字节,按字和按双字进行访问。寄存器地址索引规则:
按bit寻址QX0.0QX0.1QX0.2QX0.3QX0.4QX0.5QX0.6QX0.7QX1.0QX1.1QX1.2QX1.3QX1.4QX1.5QX1.6QX1.7QX2.0QX2.1QX2.2QX2.3QX2.4QX2.5QX2.6QX2.7QX3.0QX3.1QX3.2QX3.3QX3.4QX3.5QX3.6QX3.7QX4.0按Byte寻址按Word寻址按DWord寻址按bit寻址MX0.0MX0.1MX0.2MX0.3MX0.4MX0.5MX0.6MX0.7MX1.0MX1.1MX1.2MX1.3MX1.4MX1.5MX1.6MX1.7MX2.0MX2.1MX2.2MX2.3MX2.4MX2.5MX2.6MX2.7MX3.0MX3.1MX3.2MX3.3MX3.4MX3.5MX3.6MX3.7MX4.0按Byte寻址按Word寻址按DWord寻址QB0MB0QW0MW0QB1QD0MB1MD0QB2MB2QW1MW1QB3MB3QB4QW2QD1MB4MW2MD1
AM400_800的Word型寄存器的起始地址,遵循的是起始地址为偶数Byte地址;DWord型寄存器的起始地址,遵循的是起始地址为偶数Word地址对齐,其索引号呈2倍关系的原则。这样方便地址的计算。例如其中QX、QB、QW、QD编址如下:
QB0=(QX0.0~QX0.7)
QW0=(QB0-QB1)=((QX0.0~QX0.7)+ (QX1.0~QX1.7));
QD0=(QW0~QW1)=(QB0~QB4)=((QX0.0~QX0.7) +(QX1.0~QX1.7)+(QX2.0~QX2.7)+(QX3.0~QX3.7))
I区、Q区、M区地址编址规则相同。
可访问I/Q线圈数量
线圈:指位变量,只有两种状态0和1。在本PLC中包含Q区等变量。
变量名称 功能码
0
起始地址 线圈数量
65536
说明
通用标准Modbus协议都可以访问
IW0-IW4095 0X02 0 65536 通用标准Modbus协议都可以访问
QW0-QW4095 0X01,0x05,0x0f
可访问的M寄存器数量
寄存器:指16位(字)变量,在AM400_800系列控制器中,M区为16位变量。
变量名称 功能码
0
起始地址 寄存器数量
65536
说明
通用标准Modbus协议都可以访问
MW0-MW65535 0x03,0x06,0x10
按照通信访问的数据宽度划分,主要有bit型和word型两种变量的数据。依照行业惯例,本文中将bit型变量有时称为“线圈”或“触点”,将word型变量则称为“寄存器”,以方便用户理解。
AM400_800变量读取功能码表
功能代码
0x01
0x02
0x03
0x05
0x06
0x0f
0x10
Modbus规范
读取线圈状态
读取输入状态
读取保持寄存器
写单个线圈
预设单个寄存器
写多个线圈
预设多个寄存器
AM400_800
按位读Q区变量
按位读I区变量
按字读M区变量
按位写Q区变量
按字写M区变量
按位写Q区变量
按字写M区变量
1.
ModbusRTU通讯帧格式说明
1.1功能码0x01:读Q线圈
采用0x01功能码,可以读取Q变量;
请求帧格式:从机地址+0x01+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x01(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x01+字节数+线圈状态+CRC检验
序号
1
2
3
数据(字节)意义
从机地址
0x01(功能码)
字节数
字节数量
1个字节
1个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未4 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
5 CRC校验 高位在前,低位在后
说明
错误响应:见错误响应帧
1.2功能码0x02:读I线圈
采用0x02功能码,可以读取I变量;
请求帧格式:从机地址+0x02+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x02(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x02+字节数+线圈状态+CRC检验
序号
1
2
3
数据(字节)意义
从机地址
0x02(功能码)
字节数
字节数量
1个字节
1个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未4 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
5 CRC校验 高位在前,低位在后
说明
错误响应:见错误响应帧
1.3功能码0x03:读M寄存器
采用0x03功能码,可以读取M变量;
请求帧格式:从机地址+0x03+寄存器起始地址+寄存器数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x03(功能码)
寄存器起始地址
寄存器数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x03+字节数+寄存器值+CRC检验
序号
1
2
3
4
数据(字节)意义
从机地址
0x03(功能码)
字节数
寄存器值
字节数量
1个字节
1个字节
1个字节
N*2个字节
取值1~247
读寄存器
值:N*2
每两字节表示一个寄存器值,高位在前低位在后。寄存器地址小的排在前面
5 CRC校验 2个字节 高位在前,低位在后
说明
错误响应:见错误响应帧
1.4 功能码0x05:写Q单线圈
采用0x05功能码,可以写Q变量。
请求帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x05(功能码)
线圈地址
线圈状态
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
响应帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x05(功能码)
线圈地址
线圈状态
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
错误响应:见错误响应帧
1.5 功能码0x06:写M单寄存器
采用0x06功能码,可以写M变量。
请求帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x06(功能码)
寄存器地址
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单寄存器
高位在前,低位在后,见寄存器值编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
响应帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x06/0x36(功能码)
寄存器地址
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
错误响应:见错误响应帧。
1.6 功能码0x0f:写Q多线圈
采用0x0f功能码,可以写连续的多个Q变量。
请求帧格式:从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数
字节数量
1个字节
1个字节
2个字节
2个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。N,最大为1968
值:值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未6 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
高位在前,低位在后
说明
7 CRC校验
响应帧格式:从机地址+0x05+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x0f/0x3f(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。
高位在前,低位在后
说明
错误响应:见错误响应帧。
1.7 功能码0x10:写M多寄存器
采用0x10功能码,可以写连续的多个M变量。
请求帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值+CRC检验。
序号
1
2
3
4
5
6
7
数据(字节)意义
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
1个字节
N*2(N*4)
2个字节
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
值:N*2
高位在前,低位在后
说明
响应帧格式:从机地址+0x05+线圈起始地址+线圈数量+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
字节数量
1个字节 取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
高位在前,低位在后
说明
0x10/0x40(功能码) 1个字节
寄存器起始地址
寄存器数量
CRC校验
2个字节
2个字节
2个字节
错误响应:见错误响应帧。
1.8 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应格式:从机地址+(功能码+0x80)+错误码+CRC校验。
本错误帧适合所有的操作命令帧。
序号
1
2
3
4
数据(字节)意义
从机地址
功能码+0x80
错误码
CRC校验
字节数量
1个字节
1个字节
1个字节
2个字节
取值1~247
错误功能码
1~4
高位在前,低位在后
说明
2.
ModbusTCP通讯帧格式说明
在以TCP/IP网络中,ModbusTCP通信帧的端口号是:502
从站的地址判别,是以IP地址作为主站访问本站的判别依据,而不是以通信帧中的“从机地址”作为判断依据;
从站在回答帧时, “事务元标识符”和“单元标识符”字段会原样返回主站请求帧中对应字段的数值。
2.1功能码0x01:读Q线圈
采用0x01功能码,可以读取Q变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x01+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x01(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度从机地址+0x01+字节数+线圈状态
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x01(功能码)
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未7 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
2.2功能码0x02:读I线圈
采用0x02功能码,可以读取I变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x02+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x02(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度从机地址+0x02+字节数+线圈状态
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x02(功能码)
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未7 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
2.3功能码0x03:读M寄存器
采用0x03功能码,可以读取M变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x03+寄存器起始地址+寄存器数量
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x03(功能码)
寄存器起始地址
寄存器数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x03+字节数+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x03(功能码)
字节数
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
N*2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读寄存器
值:N*2
每两字节表示一个寄存器值,高位在前低位在后。寄存器地址小的排在前面
错误响应:见错误响应帧
2.4 功能码0x05:写Q单线圈
采用0x05功能码,可以写Q变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈地址+线圈状态
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x05(功能码)
线圈地址
线圈状态
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈地址+线圈状态
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x05(功能码)
线圈地址
线圈状态
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
错误响应:见错误响应帧
2.5 功能码0x06:写M单寄存器
采用0x06功能码,可以写M变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x06+寄存器地址+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x06(功能码)
寄存器地址
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单寄存器
高位在前,低位在后,见寄存器值编址
高位在前,低位在后。非0即为有效
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x06+寄存器地址+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x06(功能码)
寄存器地址
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。非0即为有效
错误响应:见错误响应帧。
2.6 功能码0x0f:写Q多线圈
采用0x0f功能码,可以写连续的多个Q变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态。
序号
1
2
3
4
5
6
7
8
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。N,最大为1968
值:值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未9 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。
2.7 功能码0x10:写M多寄存器
采用0x10功能码,可以写连续的多个M变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值
序号
1
2
3
4
5
6
7
8
9
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
1个字节
N*2(N*4)
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
值:N*2
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈起始地址+线圈数量。
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
错误响应:见错误响应帧。
2.8 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应格式:事务元标识符+协议标识符+长度+从机地址+(功能码+0x80)+错误码+CRC校验。
本错误帧适合所有的操作命令帧。
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
功能码+0x80
错误码
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
错误功能码
1~4
2024年2月27日发(作者:长孙同方)
AM400_800系列PLC内置
MODBUS从站通讯协议说明
协议驱动名称建议按通信网络类型分别命名为:
INOVANCE_A400_800_ModbusRTU
INOVANCE_ A400_800_ModbusTCP
版本
V3.0
日期
2019-10-17
作者
FXX
说明
增加通讯格式说明,对外发布
目 录
AM400_800系列PLC内置 MODBUS从站通讯协议说明 ........................................................ 1
目 录 .............................................................................................................................................. 2
概述........................................................................................................................................... 3
可访问I/Q线圈数量 ....................................................................................................... 4
可访问的M寄存器数量 ................................................................................................. 4
1. ModbusRTU通讯帧格式说明 ............................................................................................. 5
1.1功能码0x01:读Q线圈 ........................................................................................... 5
1.2功能码0x02:读I线圈 ............................................................................................ 6
1.3功能码0x03:读M寄存器 ...................................................................................... 7
1.4 功能码0x05:写Q单线圈 ...................................................................................... 8
1.5 功能码0x06:写M单寄存器 ................................................................................. 9
1.6 功能码0x0f:写Q多线圈 ..................................................................................... 10
1.7 功能码0x10:写M多寄存器 ............................................................................... 11
1.8 错误响应帧 .............................................................................................................. 12
2. ModbusTCP通讯帧格式说明 ........................................................................................... 13
2.1功能码0x01:读Q线圈 ......................................................................................... 13
2.2功能码0x02:读I线圈 .......................................................................................... 14
2.3功能码0x03:读M寄存器 .................................................................................... 15
2.4 功能码0x05:写Q单线圈 .................................................................................... 16
2.5 功能码0x06:写M单寄存器 ............................................................................... 17
2.6 功能码0x0f:写Q多线圈 ..................................................................................... 18
2.7 功能码0x10:写M多寄存器 ............................................................................... 19
2.8 错误响应帧 .............................................................................................................. 20
概述
本文档旨在说明将AM400、AM400_800、AC800等(以下简称AM400_800)系列PLC作为MODBUS从站进行访问时,需采用的通讯格式进行说明,并对访问其中各种软元件的索引编址方式进行了说明,便于MODBUS主站侧的编程。
AM400_800的元件有Q区,I区,M区这三种,分别都可以按位,按字节,按字和按双字进行访问。寄存器地址索引规则:
按bit寻址QX0.0QX0.1QX0.2QX0.3QX0.4QX0.5QX0.6QX0.7QX1.0QX1.1QX1.2QX1.3QX1.4QX1.5QX1.6QX1.7QX2.0QX2.1QX2.2QX2.3QX2.4QX2.5QX2.6QX2.7QX3.0QX3.1QX3.2QX3.3QX3.4QX3.5QX3.6QX3.7QX4.0按Byte寻址按Word寻址按DWord寻址按bit寻址MX0.0MX0.1MX0.2MX0.3MX0.4MX0.5MX0.6MX0.7MX1.0MX1.1MX1.2MX1.3MX1.4MX1.5MX1.6MX1.7MX2.0MX2.1MX2.2MX2.3MX2.4MX2.5MX2.6MX2.7MX3.0MX3.1MX3.2MX3.3MX3.4MX3.5MX3.6MX3.7MX4.0按Byte寻址按Word寻址按DWord寻址QB0MB0QW0MW0QB1QD0MB1MD0QB2MB2QW1MW1QB3MB3QB4QW2QD1MB4MW2MD1
AM400_800的Word型寄存器的起始地址,遵循的是起始地址为偶数Byte地址;DWord型寄存器的起始地址,遵循的是起始地址为偶数Word地址对齐,其索引号呈2倍关系的原则。这样方便地址的计算。例如其中QX、QB、QW、QD编址如下:
QB0=(QX0.0~QX0.7)
QW0=(QB0-QB1)=((QX0.0~QX0.7)+ (QX1.0~QX1.7));
QD0=(QW0~QW1)=(QB0~QB4)=((QX0.0~QX0.7) +(QX1.0~QX1.7)+(QX2.0~QX2.7)+(QX3.0~QX3.7))
I区、Q区、M区地址编址规则相同。
可访问I/Q线圈数量
线圈:指位变量,只有两种状态0和1。在本PLC中包含Q区等变量。
变量名称 功能码
0
起始地址 线圈数量
65536
说明
通用标准Modbus协议都可以访问
IW0-IW4095 0X02 0 65536 通用标准Modbus协议都可以访问
QW0-QW4095 0X01,0x05,0x0f
可访问的M寄存器数量
寄存器:指16位(字)变量,在AM400_800系列控制器中,M区为16位变量。
变量名称 功能码
0
起始地址 寄存器数量
65536
说明
通用标准Modbus协议都可以访问
MW0-MW65535 0x03,0x06,0x10
按照通信访问的数据宽度划分,主要有bit型和word型两种变量的数据。依照行业惯例,本文中将bit型变量有时称为“线圈”或“触点”,将word型变量则称为“寄存器”,以方便用户理解。
AM400_800变量读取功能码表
功能代码
0x01
0x02
0x03
0x05
0x06
0x0f
0x10
Modbus规范
读取线圈状态
读取输入状态
读取保持寄存器
写单个线圈
预设单个寄存器
写多个线圈
预设多个寄存器
AM400_800
按位读Q区变量
按位读I区变量
按字读M区变量
按位写Q区变量
按字写M区变量
按位写Q区变量
按字写M区变量
1.
ModbusRTU通讯帧格式说明
1.1功能码0x01:读Q线圈
采用0x01功能码,可以读取Q变量;
请求帧格式:从机地址+0x01+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x01(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x01+字节数+线圈状态+CRC检验
序号
1
2
3
数据(字节)意义
从机地址
0x01(功能码)
字节数
字节数量
1个字节
1个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未4 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
5 CRC校验 高位在前,低位在后
说明
错误响应:见错误响应帧
1.2功能码0x02:读I线圈
采用0x02功能码,可以读取I变量;
请求帧格式:从机地址+0x02+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x02(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x02+字节数+线圈状态+CRC检验
序号
1
2
3
数据(字节)意义
从机地址
0x02(功能码)
字节数
字节数量
1个字节
1个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未4 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
5 CRC校验 高位在前,低位在后
说明
错误响应:见错误响应帧
1.3功能码0x03:读M寄存器
采用0x03功能码,可以读取M变量;
请求帧格式:从机地址+0x03+寄存器起始地址+寄存器数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x03(功能码)
寄存器起始地址
寄存器数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
读寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后(N)
高位在前,低位在后
说明
响应帧格式:从机地址+0x03+字节数+寄存器值+CRC检验
序号
1
2
3
4
数据(字节)意义
从机地址
0x03(功能码)
字节数
寄存器值
字节数量
1个字节
1个字节
1个字节
N*2个字节
取值1~247
读寄存器
值:N*2
每两字节表示一个寄存器值,高位在前低位在后。寄存器地址小的排在前面
5 CRC校验 2个字节 高位在前,低位在后
说明
错误响应:见错误响应帧
1.4 功能码0x05:写Q单线圈
采用0x05功能码,可以写Q变量。
请求帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x05(功能码)
线圈地址
线圈状态
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
响应帧格式:从机地址+0x05+线圈地址+线圈状态+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x05(功能码)
线圈地址
线圈状态
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
错误响应:见错误响应帧
1.5 功能码0x06:写M单寄存器
采用0x06功能码,可以写M变量。
请求帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x06(功能码)
寄存器地址
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单寄存器
高位在前,低位在后,见寄存器值编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
响应帧格式:从机地址+0x06+寄存器地址+寄存器值+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x06/0x36(功能码)
寄存器地址
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写单寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。非0即为有效
高位在前,低位在后
说明
错误响应:见错误响应帧。
1.6 功能码0x0f:写Q多线圈
采用0x0f功能码,可以写连续的多个Q变量。
请求帧格式:从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数
字节数量
1个字节
1个字节
2个字节
2个字节
1个字节
[(N+7)/8]个字节
2个字节
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。N,最大为1968
值:值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未6 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
高位在前,低位在后
说明
7 CRC校验
响应帧格式:从机地址+0x05+线圈起始地址+线圈数量+CRC检验
序号
1
2
3
4
5
数据(字节)意义
从机地址
0x0f/0x3f(功能码)
线圈起始地址
线圈数量
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
2个字节
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。
高位在前,低位在后
说明
错误响应:见错误响应帧。
1.7 功能码0x10:写M多寄存器
采用0x10功能码,可以写连续的多个M变量。
请求帧格式:从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值+CRC检验。
序号
1
2
3
4
5
6
7
数据(字节)意义
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数
寄存器值
CRC校验
字节数量
1个字节
1个字节
2个字节
2个字节
1个字节
N*2(N*4)
2个字节
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
值:N*2
高位在前,低位在后
说明
响应帧格式:从机地址+0x05+线圈起始地址+线圈数量+CRC检验。
序号
1
2
3
4
5
数据(字节)意义
从机地址
字节数量
1个字节 取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
高位在前,低位在后
说明
0x10/0x40(功能码) 1个字节
寄存器起始地址
寄存器数量
CRC校验
2个字节
2个字节
2个字节
错误响应:见错误响应帧。
1.8 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应格式:从机地址+(功能码+0x80)+错误码+CRC校验。
本错误帧适合所有的操作命令帧。
序号
1
2
3
4
数据(字节)意义
从机地址
功能码+0x80
错误码
CRC校验
字节数量
1个字节
1个字节
1个字节
2个字节
取值1~247
错误功能码
1~4
高位在前,低位在后
说明
2.
ModbusTCP通讯帧格式说明
在以TCP/IP网络中,ModbusTCP通信帧的端口号是:502
从站的地址判别,是以IP地址作为主站访问本站的判别依据,而不是以通信帧中的“从机地址”作为判断依据;
从站在回答帧时, “事务元标识符”和“单元标识符”字段会原样返回主站请求帧中对应字段的数值。
2.1功能码0x01:读Q线圈
采用0x01功能码,可以读取Q变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x01+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x01(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度从机地址+0x01+字节数+线圈状态
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x01(功能码)
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未7 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
2.2功能码0x02:读I线圈
采用0x02功能码,可以读取I变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x02+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x02(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度从机地址+0x02+字节数+线圈状态
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x02(功能码)
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读线圈
值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未7 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
2.3功能码0x03:读M寄存器
采用0x03功能码,可以读取M变量;
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x03+寄存器起始地址+寄存器数量
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x03(功能码)
寄存器起始地址
寄存器数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后(N)
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x03+字节数+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x03(功能码)
字节数
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
N*2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
读寄存器
值:N*2
每两字节表示一个寄存器值,高位在前低位在后。寄存器地址小的排在前面
错误响应:见错误响应帧
2.4 功能码0x05:写Q单线圈
采用0x05功能码,可以写Q变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈地址+线圈状态
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x05(功能码)
线圈地址
线圈状态
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈地址+线圈状态
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x05(功能码)
线圈地址
线圈状态
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。非0即为有效
错误响应:见错误响应帧
2.5 功能码0x06:写M单寄存器
采用0x06功能码,可以写M变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x06+寄存器地址+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x06(功能码)
寄存器地址
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单寄存器
高位在前,低位在后,见寄存器值编址
高位在前,低位在后。非0即为有效
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x06+寄存器地址+寄存器值
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x06(功能码)
寄存器地址
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写单寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。非0即为有效
错误响应:见错误响应帧。
2.6 功能码0x0f:写Q多线圈
采用0x0f功能码,可以写连续的多个Q变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x0f+线圈起始地址+线圈数量+字节数+线圈状态。
序号
1
2
3
4
5
6
7
8
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
1个字节
[(N+7)/8]个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。N,最大为1968
值:值:[(N+7)/8]
每8个线圈合为一个字节,最后一个若不足8位,未9 线圈状态 定义部分填0。前8个线圈在第一个字节,最地址最小的线圈在最低位。依次类推
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈起始地址+线圈数
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x0f(功能码)
线圈起始地址
线圈数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个单线圈
高位在前,低位在后,见线圈编址
高位在前,低位在后。
2.7 功能码0x10:写M多寄存器
采用0x10功能码,可以写连续的多个M变量。
请求帧格式:事务元标识符+协议标识符+长度+从机地址+0x10+寄存器起始地址+寄存器数量+字节数+寄存器值
序号
1
2
3
4
5
6
7
8
9
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数
寄存器值
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
1个字节
N*2(N*4)
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
值:N*2
响应帧格式:事务元标识符+协议标识符+长度+从机地址+0x05+线圈起始地址+线圈数量。
序号
1
2
3
4
5
6
7
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
0x10(功能码)
寄存器起始地址
寄存器数量
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
2个字节
2个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
写多个寄存器
高位在前,低位在后,见寄存器编址
高位在前,低位在后。N,最大为120
错误响应:见错误响应帧。
2.8 错误响应帧
作为通信从站,控制器接收到主站发送的通信帧结构错误、不支持的控制字、寄存器地址错误、数据超限错误等,就会回复“错误响应”帧。
错误响应格式:事务元标识符+协议标识符+长度+从机地址+(功能码+0x80)+错误码+CRC校验。
本错误帧适合所有的操作命令帧。
序号
1
2
3
4
5
6
数据(字节)意义
事务元标识符
协议标识符
长度
从机地址
功能码+0x80
错误码
字节数量
2个字节
2个字节
2个字节
1个字节
1个字节
1个字节
说明
MODBUS 请求/响应事务处理的识别码
0=MODBUS协议
以下字节的数量
取值1~247
错误功能码
1~4