Пример #1
0
        private bool Apply(WriteSingleMessage message)
        {
            if (Type == ConstraintType.DenyAll)
            {
                return(false);
            }

            if (Type == ConstraintType.AllowAll)
            {
                return(true);
            }

            if (Filters == null || Filters.Count == 0)
            {
                return(true);
            }

            foreach (var filter in Filters)
            {
                if (filter.Apply(message.Address, 1, message.Function))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        public static WriteSingleMessage Decode(byte[] message)
        {
            int index = 0;
            WriteSingleMessage msg = new WriteSingleMessage();

            msg.MessageType   = (ModbusMessageType)message[7];
            msg.TransactionId = (ushort)((message[index++] << 0x08) | message[index++]);
            msg.ProtocolId    = (ushort)((message[index++] << 0x08) | message[index++]);
            msg.Length        = (ushort)((message[index++] << 0x08) | message[index++]);
            msg.UnitId        = Convert.ToByte(message[index++]);
            msg.Function      = Convert.ToByte(message[index++]);
            msg.Address       = (ushort)((message[index++] << 0x08) | message[index++]);

            return(msg);
        }
Пример #3
0
        public static ModbusTcpMessage Create(byte[] message)
        {
            if (message[7] <= 4 || message[7] == 15 || message[7] == 16)
            {
                return(BasicModbusMessage.Decode(message));
            }

            if (message[7] > 4 && message[7] < 7)
            {
                return(WriteSingleMessage.Decode(message));
            }

            if (message[7] == 8 || message[7] == 11 || message[7] == 12)
            {
                return(DiagnosticsMessage.Decode(message));
            }

            throw new InvalidCastException("Invalid modbus message type.");
        }