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); }
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); }
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."); }