Exemplo n.º 1
0
 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);
             }
         }
     }
 }
Exemplo n.º 2
0
        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));
        }