133 lines
4.6 KiB
C#
133 lines
4.6 KiB
C#
///
|
|
/// Copyright (c) 2021 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Diagnostics;
|
|
using Dirichlet.Numerics;
|
|
|
|
namespace TBF.BenchControl.ControlBoard.Uni
|
|
{
|
|
public class OutputMessage : IOutputMessage
|
|
{
|
|
public int PayloadLen { get { return 38; } }
|
|
public byte MessageCode { get { return (byte)' '; } }
|
|
|
|
Command command;
|
|
byte startOrStopParams;
|
|
UInt32 totalPulsesCount;
|
|
UInt32 massPuleseCount;
|
|
UInt128 route;
|
|
|
|
OutputMessage()
|
|
{
|
|
command = Command.RequestData;
|
|
startOrStopParams = 0;
|
|
totalPulsesCount = 0;
|
|
massPuleseCount = 0;
|
|
}
|
|
|
|
public static OutputMessage CreateDataRequestMsg()
|
|
{
|
|
var msg = new OutputMessage();
|
|
msg.command = Command.RequestData;
|
|
return msg;
|
|
}
|
|
|
|
public static OutputMessage CreateSetFlowMsg(OutputPath devices, float flowLo, float flowHi, int timeOut)
|
|
{
|
|
var msg = new OutputMessage();
|
|
msg.command = Command.RequestData;
|
|
return msg;
|
|
}
|
|
|
|
public static OutputMessage CreateTestStartCmd(int etalonNr, int regValveNr, int divNr, long totalPulsesCount, long massPulsesCount = -1)
|
|
{
|
|
var msg = new OutputMessage();
|
|
//msg.command = Command.Start;
|
|
//msg.etalonNr = etalonNr;
|
|
//msg.regValveNr = regValveNr;
|
|
//msg.divNr = divNr;
|
|
//msg.totalPulsesCount = totalPulsesCount;
|
|
//msg.massPuleseCount = (massPulsesCount >= 0) ? massPulsesCount : totalPulsesCount;
|
|
return msg;
|
|
}
|
|
|
|
public static OutputMessage CreateTestStopCmd()
|
|
{
|
|
var msg = new OutputMessage();
|
|
msg.command = Command.Stop;
|
|
return msg;
|
|
}
|
|
|
|
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)command;
|
|
message[5] = startOrStopParams;
|
|
message[6] = 0; /// nn | (paralelEt << 3);
|
|
message[7] = (byte)(totalPulsesCount & 0xFF);
|
|
message[8] = (byte)((totalPulsesCount >> 8) & 0xFF);
|
|
message[9] = (byte)((totalPulsesCount >> 16) & 0xFF);
|
|
message[10] = (byte)(massPuleseCount & 0xFF);
|
|
message[11] = (byte)((massPuleseCount >> 8) & 0xFF);
|
|
message[12] = (byte)((massPuleseCount >> 16) & 0xFF);
|
|
|
|
///// Valves
|
|
//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}", command);
|
|
}
|
|
}
|
|
}
|