public void sendWriteMessage <T>(ModbusTCPWriteMessage <T> message) { //if we are dealing with bits if (typeof(T) == typeof(bool)) { if (message.functionCode == ModbusTCPWriteMessage <T> .FunctionCode.WriteMultiple) { log("Write multiple coils from " + message.startReg + ", values " + message.registers.Cast <bool>().ToArray().ToString()); _connector.WriteMultipleCoils(message.startReg, message.registers.Cast <bool>().ToArray()); } else if (message.functionCode == ModbusTCPWriteMessage <T> .FunctionCode.WriteSingle) { //send registers individually with single writes foreach (bool bit in message.registers.Cast <bool>()) { log("Write single coil " + message.startReg + ", value " + bit); _connector.WriteSingleCoil(message.startReg, bit); } } else { throw new Exception("Unknown write function code " + message.functionCode.ToString()); } } //if we are dealing with ints else if (typeof(T) == typeof(int)) { if (message.functionCode == ModbusTCPWriteMessage <T> .FunctionCode.WriteMultiple) { log("Write multiple registers from " + message.startReg + ", values " + message.registers.Cast <bool>().ToArray().ToString()); _connector.WriteMultipleRegisters(message.startReg, message.registers.Cast <int>().ToArray()); } else if (message.functionCode == ModbusTCPWriteMessage <T> .FunctionCode.WriteSingle) { //send registers individually with single writes foreach (int reg in message.registers.Cast <int>()) { log("Write single coil " + message.startReg + ", value " + reg); _connector.WriteSingleRegister(message.startReg, reg); } } } }
public void sendWriteMessage_multipleTypeInt_sendMultipleRegister() { var slaveConnector = new Moq.Mock <ITCPSlaveConnector>(); slave = new TCPSlave(slaveConnector.Object); ModbusTCPWriteMessage <int> message = new ModbusTCPWriteMessage <int>() { functionCode = ModbusTCPWriteMessage <int> .FunctionCode.WriteMultiple, startReg = 30, registers = new List <int> { 123, 124, 125 } }; slave.sendWriteMessage <int>(message); //verify the correct send Message is called int[] regs = message.registers.ToArray(); slaveConnector.Verify(s => s.WriteMultipleRegisters(message.startReg, regs)); }