ModbusTCP Slave功能块
参数表


需注意,老版本中存在ipString接口,此接口参数无效,为实现兼容性,在2.07.9版本重新添加此接口,但不使用。
调用语法 (Structured Text)
PROGRAM _CYCLIC
(************************************************************)
(* Slave核心调用程序段 *)
(************************************************************)
FB_MBserver_0.enable := TRUE;
FB_MBserver_0.serverPort := Ctrl.Para.uServPort;
FB_MBserver_0.TimeOut := 500;
FB_MBserver_0.p_cfg := ADR(modbus_server_cfg);
FB_MBserver_0();
END_PROGRAM
例程代码
PROGRAM _INIT
(*********************************************************************)
(* 端口号设定 *)
(*********************************************************************)
//此端口默认可不设置,仅在测试场景,需一台设备多Slave任务时才需要修改。
Ctrl.Para.uServPort := 502;
(*********************************************************************)
(* 存储数据赋值 *)
(* 需注意,为测试观察方便,索引值为0~MAX_MBTCP_REGISTERS_NUM *)
(* 实际使用请自行调整ModbusTCP库中的MAX_MBTCP_REGISTERS_NUM数据大小 *)
(*********************************************************************)
FOR i := 0 TO MAX_MBTCP_REGISTERS_NUM DO
modbus_server_cfg.unit.p_discrete_inputs[i] := ADR(Ctrl.Status.Data.Slave_DI_Data[i]); //只读,对应寄存器地址10001开始的,从PLC(Server)中读到上位机(Client)的BOOL变量,比如上位读取PLC的报警信息。
modbus_server_cfg.unit.p_coils[i] := ADR(Ctrl.Status.Data.Slave_DO_Data[i]);//读写,对应寄存器地址00001开始的,是从上位(Client)写入到PLC(Server)中的BOOL变量,比如上位发给PLC的启停命令。
modbus_server_cfg.unit.p_input_registers[i] := ADR(Ctrl.Status.Data.Slave_AI_Data[i]); //只读,对应寄存器地址30001开始的,是从PLC(Server)中读到上位机(Client)的整形变量(16位),一一对应。比如上位读取PLC的一些电机温度,实际电机扭矩。
modbus_server_cfg.unit.p_holding_registers[i] := ADR(Ctrl.Status.Data.Slave_AO_Data[i]);//读写,对应寄存器地址40001开始的,是从上位机(Client)写入到PLC(Server)中的整形变量(16位),一一对应,比如上位输入的一些参数,如电机动作指令。
END_FOR;
END_PROGRAM
PROGRAM _CYCLIC
(************************************************************)
(* Slave核心调用程序段 *)
(************************************************************)
FB_MBserver_0.enable := TRUE;
FB_MBserver_0.serverPort := Ctrl.Para.uServPort;
FB_MBserver_0.TimeOut := 500;
FB_MBserver_0.p_cfg := ADR(modbus_server_cfg);
FB_MBserver_0();
END_PROGRAM
PROGRAM _EXIT
END_PROGRAM