Esempio n. 1
0
        public Result WriteSingleRegister(ModBusSingleWriteRequest req)
        {
            if (HardwareInterface.PacketsInSendingList > _maxSendCapacity)
            {
                return(Result.FullBuffer);
            }

            if (Mode == ModBusMode.RTU)
            {
                byte[] message = RtuMakeFunction5(req, ModbusFunctions.WriteSingleRegister);
                return(HardwareInterface.SendOverSerialPort(Port, message));
            }

            return(Result.NotImplemented);
        }
Esempio n. 2
0
        private byte[] RtuMakeFunction5(ModBusSingleWriteRequest req, ModbusFunctions function)
        {
            var message = new byte[8];

            message[0] = (byte)req.SlaveAddress;
            message[1] = (byte)function;
            message[2] = (byte)(req.StartAddress >> 8);
            message[3] = (byte)req.StartAddress;
            message[4] = (byte)(req.NewValue >> 8);
            message[5] = (byte)req.NewValue;

            var crc16 = ModbusUtility.ComputeCRC16(message, 0, message.Length - 2);

            message[message.Length - 2] = crc16[0];
            message[message.Length - 1] = crc16[1];

            return(message);
        }