如图 1 所示 MODBUS TCP 指令 V6.0 增加了 Modbus 客户端功能码 23,可以在一次请求作业下实现从服务器读取和写入一个或多个保持性寄存器,这样省去了轮询的编程工作量,提高了工作效率。
图 1.MODBUS_TCP 指令
SIMATIC S7-1200 使用要求
对于 Modbus TCP 基础版本 V4.0,请参见:
对于 Modbus TCP V5.0 新增功能,请参见:链接。
在本应用实例中,通过以下产品进行 Modbus TCP V6.0 功能 23 编程,实现了从服务器读取和写入多个保持性寄存器。
软件:
硬件:
1.1、打开 TIA Portal V17 软件,新建一个项目,在项目中添加 CPU1217C DC/DC/DC V4.5,为以太网接口新建一个子网并设置 IP 地址为 "192.168.0.17",如图 2 所示。
图 2.分配子网及 IP
1.2、调用客户端指令并为指令引脚参数创建全局 DB,如图 3 所示。
使用 Modbus 功能码 23 时,MB_MODE 参数的值必须为 123,参数 MB_DATA_ADDR、MB_DATA_LEN 和 MB_DATA_PTR 不可使用,并且这些参数的值必须为默认值,否则将报错返回 STATUS 值 16#818D。Connect 参数与早前版本一致,具体设置请参考以下 V4.0 版本相关说明:Modbus TCP
图 3.客户端指令及 DB 块创建
使用 Modbus 功能码 23 时,将使用六个新参数,如下表 1 所述,这些参数中的每一个参数都以“RD_”或“WR_”开头,用于表明其属于读或写任务,这些参数默认处于隐藏状态,单击指令下方黑色三角展开指令,使用 Modbus 功能码 23 时,这六个参数必须全部使用。如果使用其它 Modbus 功能码,则这六个参数的值必须为 0 或必须为空,否则将报错返回 STATUS 值 16#818D。
表 1 Modbus 功能码 23 引脚参数
参数 | 声明 | 数据类型 | 说明 |
---|---|---|---|
RD_MB_DATA_ADDR |
Input |
UInt |
要读取服务器保持性寄存器的起始地址。允许值:0 到 65535 |
RD_MB_DATA_LEN |
Input |
UInt |
要读取服务器保持性寄存器数量。允许值:1 到 125 |
WR_MB_DATA_ADDR |
Input |
UInt |
要写入服务器保持性寄存器的起始地址。允许值:0 到 65535 |
WR_MB_DATA_LEN | Input |
UInt |
要写入服务器保持性寄存器数量。允许值:1 到 121 |
RD_MB_DATA_PTR |
InOut |
Variant |
指向待从 Modbus 服务器读取的寄存器数据缓冲区指针。允许使用与 MB_DATA_PTR 相同的数据类型。 |
WR_MB_DATA_PTR |
InOut |
Variant |
指向待写入 Modbus 服务器的寄存器数据缓冲区指针。允许使用与 MB_DATA_PTR 相同的数据类型。 |
2.1、在项目中添加 CPU1215FC DC/DC/DC V4.4,为以太网接口新建一个子网并设置 IP地址为 "192.168.0.15"。
2.2、调用服务器指令并为指令引脚参数创建全局 DB,如图 3 所示。
“MB_SERVER”指令支持使用 Modbus 功能码 23 在单个作业中被写入和读取保持寄存器,需要使用 V4 以上版本的 Modbus TCP 的块。
图 4.服务器指令及 DB 块创建
分别下载两个 PLC 程序,设置读取服务器保持性寄存器的起始地址为“0”,长度为“5”;写入服务器保持性寄存器的起始地址为“5”,长度为“5”。触发一次请求,内部执行先写入寄存器数据,再读取寄存器数据。测试结果如图 5 所示。
图 5.测试结果