Innovenergy_trunk/csharp/Lib/Protocols/Modbus/Protocol/Frames/Replies/WriteRegistersResponseFrame.cs

39 lines
1.4 KiB
C#
Raw Normal View History

2023-02-16 12:57:06 +00:00
using InnovEnergy.Lib.Protocols.Modbus.Protocol.Frames.Accessors;
using static InnovEnergy.Lib.Protocols.Modbus.Protocol.FunctionCode;
namespace InnovEnergy.Lib.Protocols.Modbus.Protocol.Frames.Replies;
internal class WriteRegistersResponseFrame : ModbusFrame
{
private const Int32 Size = 6;
2023-03-10 12:46:46 +00:00
public MbWord WriteAddress => Data.WordAt(2);
public MbWord NbWritten => Data.WordAt(4);
2023-02-16 12:57:06 +00:00
internal static Int32 ExpectedSize() => Size;
public WriteRegistersResponseFrame(Byte slave, UInt16 writeAddress, UInt16 nbWritten) : base(Size)
{
SlaveAddress.Set(slave);
FunctionCode.Set(WriteMultipleRegisters);
WriteAddress.Set(writeAddress);
NbWritten .Set(nbWritten);
}
private WriteRegistersResponseFrame(Byte[] data) : this (new ArraySegment<Byte>(data) )
{ }
private WriteRegistersResponseFrame(ArraySegment<Byte> data) : base(data)
{
if (data.Count != Size)
throw new ArgumentException($"Expecting an array of size {Size}", nameof(data));
AssertFunctionCode(WriteMultipleRegisters);
}
public static WriteRegistersResponseFrame Parse(ArraySegment<Byte> data) => new WriteRegistersResponseFrame(data);
public static WriteRegistersResponseFrame Parse(Byte[] data) => new WriteRegistersResponseFrame(data);
public static WriteRegistersResponseFrame Parse(ModbusFrame frame) => new WriteRegistersResponseFrame(frame.Data);
}