(* 1、III型Modbus TCP客户端模块 2、为了实现通用化 *) FUNCTION_BLOCK ModbusTCP_Server VAR_IN_OUT UnitID: UINT; //ID wPort: WORD; //端口 NumBits: INT; //线圈状态寄存器个数 NumInputBits: INT; //输入状态寄存器个数 NumRegisters: INT; //保持寄存器个数 NumInputRegisters: INT; //输入寄存器个数 //寄存器 tab_bits: ARRAY[0..149] OF BOOL; //线圈状态寄存器 1位,最高300个,客户端只写,服务端只读 tab_inputbits: ARRAY[0..149] OF BOOL; //输入状态寄存器1位,最高300个,客户端只读,服务端只写 tab_regs: ARRAY[0..149] OF INT; //保持寄存器 16位,最高300个,客户端只写,服务端只读 tab_inputregs: ARRAY[0..149] OF INT; //输入寄存器16位,最高300个,客户端只读,服务端只写 END_VAR VAR_OUTPUT Status: INT; error: UINT := 0; END_VAR VAR //实例化 MBUS_TCP_SERVER: HSMBUS.ModbusTcpService; (* modbus tcp server *) bEnableServer: BOOL; END_VAR
//TCP 服务端 MBUS_TCP_SERVER( iId:= UnitID, bEnable:= TRUE, iPort:= wPort, iConnectNums:= 10, iDiscreteInputNums:= INT_TO_UINT(NumInputBits), //写线圈状态寄存器的大小 pDiscreteInputs:= ADR(tab_bits), //读对方线圈状态 iCoilNums:= INT_TO_UINT(NumBits), //读线圈状态寄存器的大小 pCoils:= ADR(tab_bits), //读对方线圈状态 iInputRegisterNums:= INT_TO_UINT(NumInputRegisters), //输入寄存器的大小 pInputRegisers:= ADR(tab_inputregs), //写对方寄存器 iRegiserNums:= INT_TO_UINT(NumRegisters), //读取寄存器的大小 pRegisers:= ADR(tab_regs), //读对方寄存器 iStatus=> Status, iError=> error);