TIA博途软件为S7-1200CPU实现Modbus TCP通信提供了Modbus TCP客户端指令“MB_CLIENT”和Modbus TCP服务器指令“MB_SERVER”。
1.MB_CLIENT指令
“MB_CLIENT”指令用于将S7-1200 CPU作为Modbus TCP客户端,使得S7-1200 CPU可通过以太网与ModbusTCP服务器进行通信。通过“MB_CLIENT”指令,可以在客户端和服务器之间建立连接、发送Modbus请求、接收响应。
“MB_CLIENT”指令是一个综合性指令,其内部集成了“TCON”、“TSEND”、“TRCV”和“TDISCON”等OUC通信指令,因此Modbus TCP建立连接方式与TCP通信建立连接方式相同。S7-1200CPU作为ModbusTCP客户端时,其本身即为TCP客户端。“MB_CLIENT”指令的调用如图7-42所示。
图7-42 调用MB_CLIENT指令
“MB_CLIENT”指令主要参数定义如下:
•REQ:电平触发Modbus请求作业。
•DISCONNECT:用于控制与ModbusTCP服务器建立和终止连接。DISCONNECT=FALSE时,与参数CONNECT指定的通信伙伴建立TCP连接;DISCONNECT=TRUE时,断开TCP连接。
•MB_MODE:Modbus请求模式,常用模式值有0和1,0为读请求,1为写请求。
•MB_DATA_ADDR:要访问的ModbusTCP服务器数据起始地址。
•MB_DATA_LEN:数据访问的位数或字数。
•MB_DATA_PTR:指向数据缓冲区的指针,支持优化访问或标准访问的数据区,该数据区用于从Modbus服务器读取数据或向Modbus服务器写入数据。
•CONNECT:指向连接描述结构的指针,数据类型为TCON_IP_v4。当S7-1200作为Modbus TCP客户端时需要将参数CONNECT描述通信连
接结构中“ActiveEstablished”设置为TRUE,并需
要指定通信伙伴的IP地址和通信端口,CONNECT参数的设置如图7-43所示。
图7-43 MB_CLIENT指令的CONNECT参数设置
①连接ID不能与OUC通信重叠。
②主动建立连接,“ActiveEstablished”应设置为TRUE。
③必须指定Modbus服务器IP地址。
④必须指定Modbus服务器通信端口。
⑤无需指定本地通信端口。
•DONE:Modbus作业成功完成的那个扫描周期,该状态位为TRUE;
•ERROR:Modbus作业执行出差,错误原因需要参考STATUS;
•STATUS:通信状态字,如果ERROR为TRUE时,可以通过其查看通信错误原因。注意,STATUS只在ERROR为TRUE那一个扫描周期时有效,为了有效读取错误代码,可参考图7-42程序段2。
注意:
•Modbus请求作业开始后,“MB_CLIENT”指令的MB_MODE、MB_DATA_ADDR、MB_DATA_LEN等输入参数在ModbusTCP服务器进行响应或输出错误消息之前不允许修改。
•ModbusTCP客户端如果需要连接多个ModbusTCP服务器,则需要调用多个“MB_CLIENT”指令,每个“MB_CLIENT”指令需要分配不同的背景数据块和不同的连接ID(ID需要通过参数CONNECT指定)。
•当ModbusTCP客户端对同一个ModbusTCP服务器进行多次读写操作时,则需要调用多次“MB_CLIENT”指令,每次调用“MB_CLIENT”指令时需要分配相同的背景数据块和相同的连接ID,且同一时刻只能有一个“MB_CLIENT”指令被触发。
Modbus通信使用不同的功能码对不同的地址区进行读写操作,“MB_CLIENT”指令根据MB_MODE、MB_DATA_ADDR及MB_DATA_LEN等参数来确定功能码及操作地址,见表7-10。
表7-10 Modbus通信模式对应的功能码及操作地址
(www.xing528.com)
(续)
在Modbus TCP通信数据传输时,使用了MBAP报文头用于识别Modbus应用数据单元,MBAP报文头中“单元标识符”用于取代Modbus串行链路上通用的Modbus从站地址域,“MB_CLIENT”指令背景数据块的静态变量MB_UNIT_ID则对应为MBAP中的“单元标识符”,该参数默认值为0xFF。使用“MB_CLIENT”时一般不会使用到MB_UNIT_ID参数,因为通过CONNECT参数中指定的伙伴方IP和端口就可寻址到特定的ModbusTCP服务器。但是,如果S7-1200CPU作为ModbusTCP客户端与用作ModbusRTU协议网关的ModbusTCP服务器通信时,则需要使用MB_UNIT_ID参数标识串行网络中的从站地址。这种情况下,ModbusTCP客户端向ModbusTCP服务器发送请求时,MB_UNIT_ID参数会将请求转发到正确的ModbusRTU从站设备。
“MB_CLIENT”指令背景数据块的静态变量Connected用于指示ModbusTCP连接状态,可使用该变量判断TCP连接是否成功建立。
2.MB_SERVER指令
“MB_SERVER”指令用于将S7-1200CPU作为Modbus TCP服务器,使得S7-1200 CPU可通过以太网与ModbusTCP客户端进行通信。“MB_SERVER”指令将处理ModbusTCP客户端的连接请求、接收和处理Modbus请求,并发送Modbus应答报文。
注意:
ModbusTCP服务器如果需要连接多个ModbusTCP客户端,则需要调用多个“MB_SERVER”指令,每个“MB_SERVER”指令需要分配不同的背景数据块和不同的连接ID(ID需要通过参数CONNECT指定)。“MB_SERVER”指令内部集成了“TCON”、“TSEND”、“TRCV”和“TDISCON”等OUC通信指令,其建立连接方式与TCP通信建立连接方式相同。S7-1200CPU作为Modbus TCP服务器时,其本身即为TCP服务器。“MB_SERVER”指令的调用如图7-44所示。
图7-44 调用MB_SERVER指令
“MB_SERVER”指令主要参数定义如下:
•DISCONNECT:用于建立与ModbusTCP客户端的被动连接。DISCONNECT=FALSE时,可响应参数CONNECT指定的通信伙伴的连接请求;DIS- CONNECT=TRUE时,断开TCP连接。
•MB_HOLD_REG:指向Modbus保持寄存器的指针。S7-1200CPU可以将全局数据块或位存储器(M)映射为Modbus保持寄存器,其中全局数据块支持优化访问或标准访问。Modbus客户端可通过Modbus功能码3(读取保持寄存器)、功能码6(写入单个保持寄存器)和功能码16(写入单个或多个保持寄存器)操作服务器端的保持寄存器。图7-44例子中MB_HOLD_REG参数指向一个Word数组,那么数组中第一个元素即对应Modbus地址40001,MB_HOLD_REG参数与Modbus保持寄存器地址映射关系见表7-11。
表7-11 MB_HOLD_REG参数与Modbus保持寄存器地址映射关系
“MB_SERVER”背景数据块的静态变量HR_Start_Offset可以修改Modbus保持寄存器的地址偏移,HR_Start_Offset功能见表7-12。
表7-12 Modbus保持寄存器地址偏移设置
•CONNECT:指向连接描述结构的指针,数据类型为TCON_IP_v4,CONNECT参数的设置如图7-45所示。
①连接ID时,不能与OUC通信重叠。
②被动建立连接时,“ActiveEstablished”应设置为FALSE。
③无需指定伙伴方的IP地址和通信端口。
④必须指定本地通信端口,默认端口为502。
•NDR:0表示无新数据;1表示从Modbus客户端写入了新数据。
•DR:0表示无数据被读取;1表示有数据被Modbus客户端读取。
•ERROR:调用“MB_SERVER”指令出错,错误原因需要参考STATUS。
•STATUS:通信状态字,如果ERROR为TRUE时,可以通过其查看通信错误原因。
“MB_SERVER”指令除了支持Modbus客户端通过Modbus功能码3(读取保持寄存器)、功能码6(写入单个保持寄存器)和功能码16(写入单个或多个保持寄存器)操作保持寄存器,还支持Modbus功能码1、2、4、5和15直接读取或写入CPU的过程映像输入和输出区。S7-1200CPU作为ModbusTCP服务器时,Modbus地址与CPU过程映像区的映射关系见表7-13。
图7-45 MB_SERVER指令的 CONNECT参数设置
表7-13 Modbus地址与CPU过程映像区的映射关系
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。