施耐德PLC常用通讯指令解析
一、Quantum PLC通讯指令解析
CREAD_REG、CWRITE_REG、READ_REG、WRITE_REG 和 MBP_MSTR 功能块各使用 1 条数据事务路径,并且需要经过多个循环才能完成一项操作。
可用的事务路径数取决于使用的通讯端口:
·Modbus Plus 嵌入式端口或 NOM 模块同时最多支持 4 个功能块
·TCP/IP 以太网嵌入式端口同时最多支持 4 个功能块
·TCP/IP 以太网 NOE 模块同时最多支持 16 个功能块
可以在同一个通讯端口上对更多的通讯功能块进行编程。但是,对于超过该端口支持的最大数目的通讯功能块,将不再提供服务,直到释放一条事务路径为止。当事务路径资源空闲时,同一个端口上的下一个功能块才会变为活动状态,并开始使用释放的路径。
所有路由信息包含在 ADDRFLD 输入的 WordArr5 数据结构中。功能块为此输入分配的类型由所用的网络定义。
请使用:
·对于功能块 ModbusP_ADDR,使用 Modbus Plus
·对于功能块 TCP_IP_ADDR,使用 TCP/IP 以太网
·对于功能块 SYMAX_IP_ADDR,使用 SY/MAX 以太网
1、CREAD_REG
功能描述:
此功能块连续读取寄存器区域。它借助 Modbus Plus、TCP/IP 以太网或 SY/MAX 以太网从定址节点读取数据。
参数描述 :
SLAVEREG :从站中要读取源数据的区域起始地址。源区域始终驻留在 %MW 寄存器区域内。该参数可作为地址、定位变量、非定位变量或数值输入。
注意: 对于非 Unity Pro PLC 的从站:
源区域始终驻留在 4x 寄存器区域内。SLAVEREG 默认的源参考偏移在 4x 区域之内。必须忽略前导的"4"(例如,59(变量内容或数值)= 40059)。
NO_REG :要从定址从站读取的地址的数目 (1 ... 100)。 该参数可作为地址、定位变量或非定位变量输入。
REG_READ :对于此参数,必须确保 ARRAY 大小与请求的传输大小相等 (≥ NO_REG)。该数组的名称定义为一个参数。如果该数组定义得过小,则仅传输数组中的数据量。
该参数必须定义为定位变量。
STATUS :如果在执行功能时出错,则循环的错误代码仍然保留在此输出中。
功能块配置:
该功能块需和地址功能块一起配置,如下:
TCP_IP_ADDR功能块的MAP_IDX引脚配置为目标设备的MB+站号(本例用Modbus Slave软件仿真从站,站号设为1,因此该引脚配置为1。在昆腾PLC之间通讯,该引脚一般设置为0),SLOT_ID配置为本地通讯模块的槽位号,IP_B1-4配置为IP地址。
通讯解析:
该数据包在Modbus Slave从站抓取,数据如下:
33 AB 00 00 00 06 01 03 00 00 00 05
33 AB 00 00 00 0D 01 03 0A 00 03 00 00 00 37 00 00 00 00
解析如下:
请求 | 33 | AB | 00 | 00 | 00 | 06 | 01 | 03 | 00 | 00 | 00 | 05 | \ | |||||||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | ||||||||||||||
响应 | 33 | AB | 00 | 00 | 00 | 0D | 01 | 03 | 0A | 00 | 03 | 00 | 00 | 00 | 37 | 00 | 00 | 00 | 00 | |
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 数据长度 | 响应数据 | ||||||||||||||
2、CWRITE_REG
功能描述:
此功能块连续写入寄存器区域。它借助 Modbus Plus、TCP/IP 以太网或 SY/MAX 以太网将数据从 PLC 传输到定址从站。
参数描述 :
SLAVEREG :定址从站中写入源数据的区域的开始。源区域始终驻留在 %MW 地址区域内。
注意: 对于非 Unity Pro PLC 的从站:
目标区域始终驻留在 4x 寄存器区域内。SLAVEREG 默认的目标地址偏移在 4x 区域之内。必须忽略前导的"4"(例如,59(变量内容或数值)= 40059)。
该参数可作为地址、定位变量非定位变量或数值输入。
NO_REG :要写入从站处理器的寄存器的数目 (1 ... 100)。该参数可作为地址、定位变量、非定位变量或数值输入。
STATUS :如果在执行功能时出错,则循环的错误代码仍然保留在此输出中。
REG_WRIT :对于此参数,必须确保 ARRAY 大小与请求的传输大小相等 (≥ NO_REG)。此数组的名称被定义为一个参数。如果该数组定义得过小,则仅传输数组中存在的数据量。
该参数必须定义为定位变量。
功能块配置:
该功能块需和地址功能块一起配置,如下:
TCP_IP_ADDR功能块和CREAD_REG相同
通讯解析:
该数据包在Modbus Slave从站抓取,数据如下:
7D E3 00 00 00 11 01 10 00 0A 00 05 0A 00 16 00 00 00 00 00 00 00 00
7D E3 00 00 00 06 01 10 00 0A 00 05
解析如下:
请求 | 7D | E3 | 00 | 00 | 00 | 11 | 01 | 10 | 00 | 0A | 00 | 05 | 0A | 00 | 16 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | |
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | 写数据长度 | 写数据 | ||||||||||||||||
响应 | 7D | E3 | 00 | 00 | 00 | 06 | 01 | 10 | 00 | 0A | 00 | 05 | \ | |||||||||||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | ||||||||||||||||||
3、READ_REG
功能描述:
REQ 输入处出现上升沿时,此功能块将通过 Modbus Plus、TCP/IP 以太网或 SY/MAX 以太网从已定址从站读取一个寄存器区域。
参数描述 :
REQ :上升沿会触发读取事务。
该参数可作为直接地址、定位变量、非定位变量或数值输入。
SLAVEREG :已定址从站中读取源数据的区域的开始。源区域始终驻留在 %MW 寄存器区域内。
注意: 对于非 Unity Pro PLC 的从站:
源区域始终驻留在 4x 寄存器区域内。SLAVEREG 默认的源参考偏移在 4x 区域之内。必须忽略前导的"4"(假如变量内容或数值为 59,则 59 = 40059)。
该参数可作为直接地址、定位变量、非定位变量或数值输入。
NO_REG :要从已定址从站读取的地址的数目 (1 ... 100)。
该参数可作为直接地址、定位变量、非定位变量或数值输入。
NDR :一个程序循环的状态转换为有效表示收到了新数据,可以立即处理。
该参数可作为直接地址、定位变量或非定位变量输入。
错误 :一个程序循环的状态转换为有效表示检测到新错误。
该参数可作为直接地址、定位变量或非定位变量输入。
REG_READ :与请求的传输大小相等的 ARRAY 必须和此参数的 ≥ NO_REG 一致。此数组的名称被定义为一个参数。如果数组定义得太小,则仅传输数组中存在的数据量。
该参数必须定义为定位变量。
STATUS :如果在执行功能时出错,则循环的错误代码将留在此输出中。
功能块配置:
该功能块需和地址功能块一起配置,如下:
TCP_IP_ADDR功能块和CREAD_REG相同
通讯解析:
该数据包在Modbus Slave从站抓取,数据如下:
81 AA 00 00 00 06 01 03 00 00 00 05
81 AA 00 00 00 0D 01 03 0A 00 03 00 00 00 37 00 00 00 00
解析如下:
请求 | 81 | AA | 00 | 00 | 00 | 06 | 01 | 03 | 00 | 00 | 00 | 05 | \ | |||||||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | ||||||||||||||
响应 | 81 | AA | 00 | 00 | 00 | 0D | 01 | 03 | 0A | 00 | 3 | 00 | 00 | 00 | 37 | 00 | 00 | 00 | 00 | |
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 数据长度 | 响应数据 | ||||||||||||||
4、WRITE_REG
功能描述:
REQ 输入处出现上升沿时,此功能块会通过 Modbus Plus、TCP/IP 以太网或 SY/MAX 以太网将一个寄存器区域从 PLC 写入已定址从站。
参数描述 :
REQ :写入事务由上升沿触发。
该参数可作为地址、定位变量、非定位变量或数值输入。
SLAVEREG :已定址从站中写入源数据的区域的开始。源区域始终驻留在 %MW 地址区域内。
注意: 对于非 Unity Pro PLC 的从站:
目标区域始终驻留在 4x 寄存器区域内。SLAVEREG 默认目标地址的偏移在 4x 区域之内。必须忽略前导的"4"(例如,59(变量内容或数值)= 40059)。
该参数可作为地址、定位变量、非定位变量或数值输入。
NO_REG :要写入从站处理器的地址的数目 (1 ... 100)。
该参数可作为地址、定位变量、非定位变量或数值输入。
REG_WRIT :与计划的传输大小相等的 ARRAY 必须与此参数的 (≥ NO_REG) 一致。此数组的名称被定义为一个参数。如果数组定义得太小,则仅传输数组中存在的数据量。
该参数必须定义为定位变量。
完成 :程序扫描的状态转换为有效表示数据已传输。
该参数可作为地址、定位变量或非定位变量输入。
错误 :程序循环的状态转换为有效表示检测到新错误。
该参数可作为地址、定位变量或非定位变量输入。
STATUS :如果在执行功能时出错,则循环的错误代码仍然在此输出中。
功能块配置:
该功能块需和地址功能块一起配置,如下:
TCP_IP_ADDR功能块和CREAD_REG相同
通讯解析:
该数据包在Modbus Slave从站抓取,数据如下:
81 AE 00 00 00 11 01 10 00 0F 00 05 0A 00 01 00 02 00 03 00 04 00 05
81 AE 00 00 00 06 01 10 00 0F 00 05
解析如下:
请求 | 81 | AE | 00 | 00 | 00 | 11 | 01 | 10 | 00 | 0F | 00 | 05 | 0A | 00 | 01 | 00 | 02 | 00 | 03 | 00 | 04 | 00 | 05 | |
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | 写数据长度 | 写数据 | ||||||||||||||||
响应 | 81 | AE | 00 | 00 | 00 | 06 | 01 | 10 | 00 | 0F | 00 | 05 | \ | |||||||||||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | ||||||||||||||||||
5、MBP_MATR
功能描述:
通过使用 MBP_MSTR 功能块,可选择 14 种可用的网络通讯操作之一。本例只介绍用MBP_MSTR功能块发送MODBUS请求,操作功能代码为15。
参数描述 :
输入参数
参数 | 数据类型 | 说明 |
启用 | BOOL | 为 ON 时,启用在 CONTROL 寄存器的第一个元素中指定的操作。 |
ABORT | BOOL | 为 ON 时,中止当前活动的操作。 |
输出参数
参数 | 数据类型 | 说明 |
ACTIVE | BOOL | 当操作为活动状态时为 ON。 |
ERROR | BOOL | 当操作未成功而中止时为 ON。 |
SUCCESS | BOOL | 当操作成功完成时为 ON。 |
CONTROL | WORD | 此字段包含控制功能块。第一个元素 CONTROL[1] 包含要执行的操作的操作代码的编号。序列寄存器的内容由操作确定。 该数据字段必须声明为定位变量。 控制块的结构因所用的网络而异。 |
DATABUF | WORD | 对于提供数据的操作(如写入操作),该数据字段为数据源。对于接收数据的操作(如读取操作),该数据字段是数据目标。 对于以太网 CTE 读取和写入操作,该数据字段保留以太网配置扩展表的内容。在这种情况下,DATABUF 必须定义为至少含有 10 个元素的数组。 该数据字段必须声明为定位变量。 |
功能块配置:
功能块组态配置如下:
Control数据配置:
控制数据块的长度为11
字 | 描述 | ||
CONTROL[1] | 15 = 发送 Modbus 请求 | ||
CONTROL[2] | 指示检测到的错误状态 (不用配置数据) | ||
CONTROL[3] | DATABUF 长度(字)(最大 100) | ||
CONTROL[4] | DATABUF 中响应开头的偏移(字)。 注意: 为避免覆盖请求,响应偏移值乘以 2 后必须大于请求长度 (CONTROL[10])。 | ||
CONTROL[5] | 路由寄存器: 高字节 = 以太网通讯模块插槽 低字节 = MBP on Ethernet transporter (MET) 映射索引(也称为单元 ID) (MB+站号) | ||
CONTROL[6] | IP 地址的字节 4 (MSB) | 例子 | 192 |
CONTROL[7] | IP 地址的字节 3 | 168 | |
CONTROL[8 | IP 地址的字节 2 | 1 | |
CONTROL[9] | IP 地址的字节 1 (LSB) | 2 | |
CONTROL[10] | DATABUF 请求数据的长度(字节) | ||
CONTROL[11] | DATABUF 已收到响应的长度(字节) 注意: 这是只读的,在操作完成后由选件模块设置。 |
Databuf数据配置:
请求数据和响应数据都存储在Databuf数据块中,请求数据的长度在CONTROL[10]中定义,响应数据起始地址在CONTROL[4]中定义。
通讯解析:
读取输入寄存器(%IW区)
控制数据块配置如下:
Databuf数据区配置如下:
Databuf请求数据区寄存器定义如下:
Databuf[1] | Databuf[2] | Databuf[3] | Databuf[4] | Databuf[5] | |||||
高 | 低 | 高 | 低 | 高 | 低 | 高 | 低 | 高 | 低 |
功能码 | 起始地址高 | 起始地址低 | 数据长度高 | 数据长度低 | 空 | 空 | 空 | 空 | 空 |
Databuf响应数据区寄存器定义如下:
Databuf[6] | Databuf[7……100] | |
高 | 低 | 读取数据 |
功能码 | 读取字节数 |
该数据包在Modbus Slave从站抓取,数据如下:
CE 59 00 00 00 06 01 04 00 00 00 05
CE 59 00 00 00 0D 01 04 0A 00 37 00 00 00 00 00 00 00 00
解析如下:
MBP_MSTR 读取%IW区 | 请求 | CE | 59 | 00 | 00 | 00 | 06 | 01 | 04 | 00 | 00 | 00 | 05 | \ | |||||||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 起始地址 | 数据长度 | |||||||||||||||
响应 | CE | 59 | 00 | 00 | 00 | 0D | 01 | 04 | 0A | 00 | 37 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | ||
事务号 | 协议标识 | 包长度 | 站号 | 功能码 | 数据长度 | 响应数据 | |||||||||||||||
MODBUS的其它请求操作和读取%IW区(功能码:04)相同,只需修改功能码即可。
二、M340通讯指令解析
1、READ_VAR
功能描述:
READ_VAR 功能用于读取以下一个或多个语言对象的值:
·内部位
·内部字
读取的对象必须始终是连续的。这些对象可以位于远程 CPU 或连接到通讯通道的设备中。
在 Modicon M340 和 M580 CPU 上,READ_VAR 功能最多可读取远程设备中的 2,000 个连续位。
参数描述 :
参数 | 类型 | 注释 |
ADR | ARRAY [0..5] OF INT(对于 Premium) ARRAY [0..7] OF INT(对于 Modicon M340 和 M580) | 针对不同硬件平台的特定说明: ·Premium: o消息的接收字符模式通道的地址由 ADDR 功能给出。 o交换的目标实体的地址。 禁止使用下列地址: • {Network.Station}APP, • {Network.Station}APP.num。 ·Modicon M340: o消息的接收字符模式通道的地址由 ADDM 功能给出。 o该地址的语法为 ADDM ('r.m.c.node') 类型。 ·Modicon M580: o读取操作的目标实体地址,ADDMX 功能的结果。 |
OBJ | STRING | 要读取的对象类型(对于 Premium PLC): ·’%M’:内部位 ·’%MW’:内部字 ·’%S’:系统位 ·’%SW’:系统字 ·’%I’:状态位 ·’%IW’:输入字 要读取的对象类型(对于 Modicon M340 和 M580 PLC): ·’%M’:内部位 ·’%MW’:内部字 ·’%I’:输入位 ·’%IW’:输入字 |
NUM | DINT | 要读取的第一个对象的索引。 |
NB | INT | 要读取的对象的数量。 |
GEST | ARRAY [0..3] OF INT | R交换管理表 在 Modicon M340 和 M580 CPU 上,在交换管理表的序号为 1 的字中有一个取消位。 此取消位位于序号为 1 的包含 2 个字节的字中: ·最高有效字节:交换号 ·最低有效字节:活动位(序号 0)和取消位(序号 1)。 通过 CANCEL EF 或通过将管理表的取消位设置为 1 可取消 READ_VAR EF。 |
RECP | ARRAY [n..m] OF INT | 包含所读取对象的值的字表。 注意: 接收到的数据的大小(以字节为单位)由系统自动写入管理表的第四个字。 |
功能块配置:
通讯解析:
2、WRITE_VAR
功能描述:
WRITE_VAR 功能用于写入同类型的以下一个或多个语言对象:
·内部位
·内部字
要写入的对象必须始终是连续的。这些对象可以位于远程 CPU 或连接到通讯通道的设备中。
参数描述 :
参数 | 类型 | 注释 |
ADR | ARRAY [0..5] OF INT(对于 Premium) ARRAY [0...7] OF INT(对于 Modicon M340 和 M580) | 针对不同硬件平台的特定说明: ·Premium: o消息的接收字符模式通道的地址由 ADDR 功能给出。 o交换的目标实体的地址。 禁止使用下列地址: • {Network.Station}APP, • {Network.Station}APP.num。 • 广播地址(ALL,对于 TSX SCY 11601 模块为 0)。 ·Modicon M340: o消息的接收字符模式通道的地址由 ADDM 功能给出。 o该地址的语法为 ADDM ('r.m.c.node') 类型。 ·Modicon M580: o写入操作的目标实体地址,ADDMX 功能的结果。 |
OBJ | STRING | 要写入的对象类型(对于 Premium PLC): ·’%M’:内部位 ·’%MW’:内部字 ·’%S’:系统位 ·’%SW’:系统字 要写入的对象类型(对于 Modicon M340 和 M580 PLC): ·’%M’:内部位 ·’%MW’:内部字 |
NUM | DINT | 要写入目标设备的第一个对象的索引。 |
NB | INT | 要写入的对象的数量。 |
EMIS | ARRAY [n..m] OF INT | 包含要写入的对象值的字表。 |
GEST | ARRAY [0..3] OF INT | 交换管理表 在 Modicon M340 和 M580 PLC 上,在交换管理表的序号为 1 的字中有一个取消位。 此取消位位于序号为 1 的包含 2 个字节的字中: ·最高有效字节:交换号 ·最低有效字节:活动位(序号 0)和取消位(序号 1)。 通过 CANCEL EF 或通过将管理表的取消位设置为 1 可取消 WRITE_VAR EF。 |
功能块配置:
通讯解析: