最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

AM400_800系列-通讯-MODBUS元件地址编码和功能码定义

IT圈 admin 35浏览 0评论

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

发布评论

评论列表 (0)

  1. 暂无评论