12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- using System;
- using System.Linq;
- using NModbus.Data;
- using NModbus.Unme.Common;
- namespace NModbus.Message
- {
- public class ReadCoilsInputsResponse : AbstractModbusMessageWithData<DiscreteCollection>, IModbusMessage
- {
- public ReadCoilsInputsResponse()
- {
- }
- public ReadCoilsInputsResponse(byte functionCode, byte slaveAddress, byte byteCount, DiscreteCollection data)
- : base(slaveAddress, functionCode)
- {
- ByteCount = byteCount;
- Data = data;
- }
- public byte ByteCount
- {
- get => MessageImpl.ByteCount.Value;
- set => MessageImpl.ByteCount = value;
- }
- public override int MinimumFrameSize => 3;
- public override string ToString()
- {
- string msg = $"Read {Data.Count()} {(FunctionCode == ModbusFunctionCodes.ReadInputs ? "inputs" : "coils")} - {Data}.";
- return msg;
- }
- protected override void InitializeUnique(byte[] frame)
- {
- if (frame.Length < 3 + frame[2])
- {
- throw new FormatException("Message frame data segment does not contain enough bytes.");
- }
- ByteCount = frame[2];
- Data = new DiscreteCollection(frame.Slice(3, ByteCount).ToArray());
- }
- }
- }
|