Files
tbf/TBF/BenchControl/ControlBoard/Uni/CommandMsg.cs
T

105 lines
3.7 KiB
C#

///
/// Copyright (c) 2021 Sensus Slovensko a.s.
///
using System;
using System.Diagnostics;
using Dirichlet.Numerics;
namespace TBF.BenchControl.ControlBoard.Uni
{
public class CommandMsg : IOutputMessage
{
public int PayloadLen { get { return 38; } }
public byte MessageCode { get { return (byte)' '; } }
readonly Command cmd;
readonly int etalonNr;
readonly int regValveNr;
readonly int divNr;
readonly ulong totalPulsesCount;
readonly ulong massPuleseCount;
readonly UInt128 route;
public CommandMsg(Command cmd, int etalonNr, int regValveNr, int divNr, ulong totalPulsesCount, ulong massPuleseCount, UInt128 route)
{
this.cmd = cmd;
this.etalonNr = etalonNr;
this.regValveNr = regValveNr;
this.divNr = divNr;
this.totalPulsesCount = totalPulsesCount;
this.massPuleseCount = massPuleseCount;
this.route = route;
}
public byte[] GetMessage()
{
byte[] message = new byte[PayloadLen + 5]; /// headed 3 bytes, checksum 2 bytes
/// Header (3 bytes)
message[0] = Const.STX;
message[1] = 1; /// Control board addres
message[2] = (byte)PayloadLen; /// Payload length
/// Command
message[3] = MessageCode;
message[4] = (byte)cmd;
//message[5] = GetCmdParameter(message[4]);
//message[6] = (byte)(pulsesCount & 0xFF);
//message[7] = (byte)((pulsesCount >> 8) & 0xFF);
//message[8] = (byte)((pulsesCount >> 16) & 0xFF);
//message[9] = 0;
///// Valves
//message[10] = (byte)GetValveChgFlag();
//message[11] = (byte)(route & 0xFF);
//message[12] = (byte)((route >> 8) & 0xFF);
//message[13] = (byte)((route >> 16) & 0xFF);
//message[14] = (byte)((route >> 24) & 0xFF);
//message[15] = (byte)((route >> 32) & 0xFF);
//message[16] = (byte)((route >> 40) & 0xFF);
//message[17] = (byte)((route >> 48) & 0xFF);
//message[18] = (byte)((route >> 56) & 0xFF);
//message[19] = 0;
///// Frequency converter parameters
//message[20] = 0;
//message[21] = 0;
//message[22] = 0;
//message[23] = 0;
//message[24] = 0;
//message[25] = 0;
//message[26] = 0;
//message[27] = 0;
//message[28] = 0;
//message[29] = 0;
//message[30] = (byte)(regValveNrTextBox.Visible ? int.Parse(regValveNrTextBox.Text) : 0);
//message[31] = (byte)GetRegValveMode();
message[32] = 0; /// reg. v. position
message[33] = 0; /// reg. v. frequency
message[34] = 0; /// reg. v. time ticks
message[35] = 0; /// analog v. regul
message[36] = 0; /// analog v. regul
message[37] = 0; /// analog v. regul
message[38] = 0; /// analog v. regul
message[39] = 0; /// analog v. regul
message[40] = 0;
Debug.Assert(40 == PayloadLen + 2);
/// Checksum (2 bytes)
int checksum = 0;
for (int i = 1; i < PayloadLen + 3; i++) checksum += message[i];
message[PayloadLen + 3] = (byte)(checksum & 0xFF);
message[PayloadLen + 4] = (byte)((checksum >> 8) & 0xFF);
return message;
}
public override string ToString()
{
return string.Format("CommandMessage : {0}", cmd);
}
}
}