init
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
using DTS.Common.Enums.DASFactory;
|
||||
using DTS.Common.Interface.DASFactory;
|
||||
using DTS.Common.Utilities;
|
||||
using DTS.DASLib.Command.Classes;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
|
||||
namespace DTS.DASLib.Command.SLICE.MulticastCommands
|
||||
{
|
||||
public class MulticastUdpQueryQATS : MulticastCommandBase
|
||||
{
|
||||
private const int COMMAND_PAYLOAD_SIZE = 63;
|
||||
private const int RESPONSE_PAYLOAD_SIZE = 215; // 278;
|
||||
|
||||
protected override Commands Command => Commands.UdpQueryQTAS;
|
||||
|
||||
protected override bool StopAfterFirstMessage { get { return false; } }
|
||||
|
||||
private uint _deviceClass;
|
||||
private byte _responseOption;
|
||||
private IPAddress _address;
|
||||
private int _port = (int)Ports.Response;
|
||||
|
||||
private void SetMulticastConfig()
|
||||
{
|
||||
IPAddress.TryParse(MulticastReceiveAddress, out _address);
|
||||
|
||||
string config = _address.ToString() + ":" + _port.ToString();
|
||||
command.SetParameter(41, config);
|
||||
}
|
||||
|
||||
public DFConstantsAndEnums.MultiCastDeviceClasses DeviceClass { set { _deviceClass = (uint)value; command.SetParameter(36, (int)_deviceClass); } }
|
||||
public ResponseOptions ResponseOption { set { _responseOption = (byte)value; command.SetParameter(40, _responseOption); } }
|
||||
public IPAddress Address { set { _address = value; SetMulticastConfig(); } }
|
||||
public int Port { set { _port = value; SetMulticastConfig(); } }
|
||||
private static object MyLock = new object();
|
||||
|
||||
public List<IUDPQATSEntry> QATSEntry { get; set; } = new List<IUDPQATSEntry>();
|
||||
public MulticastUdpQueryQATS(ICommunication sock)
|
||||
: base(sock)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
public MulticastUdpQueryQATS(string macAddress)
|
||||
: base(null)
|
||||
{
|
||||
Init(macAddress);
|
||||
}
|
||||
public MulticastUdpQueryQATS(int timeoutMillisec)
|
||||
: base(null, timeoutMillisec)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public MulticastUdpQueryQATS(string macAddress, int timeoutMillisec)
|
||||
: base(null, timeoutMillisec)
|
||||
{
|
||||
Init(macAddress);
|
||||
}
|
||||
|
||||
public void Init(string macAddress = "")
|
||||
{
|
||||
command.Parameter = new byte[COMMAND_PAYLOAD_SIZE];
|
||||
HostMac = string.IsNullOrEmpty(macAddress) ? GetMacAddress() : macAddress;
|
||||
command.SetParameter(HOST_MAC_ADDRESS_OFFSET, HostMac);
|
||||
DeviceClass = DFConstantsAndEnums.MultiCastDeviceClasses.Any;
|
||||
ResponseOption = ResponseOptions.AlwaysRespond;
|
||||
ReceiveTimeoutMs = 5000;
|
||||
SetMulticastConfig();
|
||||
}
|
||||
public MulticastUdpQueryQATS(ICommunication sock, int TimeoutMillisec)
|
||||
: base(sock, TimeoutMillisec)
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
protected const int QATS_OFFSET = 74;
|
||||
protected override CommandReceiveAction WholePackage()
|
||||
{
|
||||
|
||||
if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError)
|
||||
{
|
||||
var responseHostMac = string.Empty;
|
||||
response.GetParameter(HOST_MAC_ADDRESS_OFFSET, out responseHostMac);
|
||||
|
||||
if ((null == responseHostMac) || !HostMac.Equals(responseHostMac))
|
||||
{
|
||||
response.Status = DFConstantsAndEnums.CommandStatus.StatusInvalidPacket;
|
||||
return CommandReceiveAction.StopReceiving;
|
||||
}
|
||||
|
||||
if (response.ParameterLength < RESPONSE_PAYLOAD_SIZE)
|
||||
{
|
||||
response.Status = DFConstantsAndEnums.CommandStatus.StatusAttributeInvalidLength;
|
||||
return CommandReceiveAction.StopReceiving;
|
||||
}
|
||||
|
||||
var responseClientMac = string.Empty;
|
||||
response.GetParameter(CLIENT_MAC_ADDRESS_OFFSET, out responseClientMac);
|
||||
var qatsSerialNumber = string.Empty;
|
||||
response.GetParameter(QATS_OFFSET, out qatsSerialNumber); /*! serial = 10B */
|
||||
var armState = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 10, out armState); /*! 10 */
|
||||
var armMode = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 11, out armMode); /*! 11 */
|
||||
var started = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 12, out started); /*! 12 */
|
||||
var eventTrigger = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 13, out eventTrigger); /*! 13 */
|
||||
var faultFlags = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 14, out faultFlags); /*! 14 */
|
||||
var sampleRate = (uint)0;
|
||||
response.GetParameter(QATS_OFFSET + 15, out sampleRate); /*! 15 + 4 */
|
||||
var totalSamples = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 19, out totalSamples); /*! 19 + 8 */
|
||||
var currentSample = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 27, out currentSample); /*! 27 + 8 */
|
||||
var eventNumber = (ushort)0;
|
||||
response.GetParameter(QATS_OFFSET + 35, out eventNumber); /*! 35 + 2 */
|
||||
var faultSampleNumber = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 37, out faultSampleNumber); /*! 37 + 8 */
|
||||
var legacyFaultFlag = (ushort)0;
|
||||
response.GetParameter(QATS_OFFSET + 45, out legacyFaultFlag); /*! 45 + 2 */
|
||||
var inputVoltage = 0F;
|
||||
response.GetParameter(QATS_OFFSET + 47, out inputVoltage); /*! 47 + 4 */
|
||||
var backupVoltage = 0F;
|
||||
response.GetParameter(QATS_OFFSET + 51, out backupVoltage); /*! 51 + 4 */
|
||||
var batterySoC = 0F;
|
||||
response.GetParameter(QATS_OFFSET + 55, out batterySoC); /*! 55 + 4 */
|
||||
var actualCurrentSample = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 59, out actualCurrentSample); /*! 59 + 8 used by software to estimate remaining time in Circular mode */
|
||||
var estimateMaxSamples = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 67, out estimateMaxSamples); /*! 67 + 8 used by software to calculate current storage remaining */
|
||||
/*! ^^^^ SPS Legacy end here ^^^^^^^*/
|
||||
|
||||
/*! Added by S6/S6A product */
|
||||
var tiltSensorCh1 = (short)0;
|
||||
response.GetParameter(QATS_OFFSET + 75, out tiltSensorCh1); /*! 75 + 2 */
|
||||
var tiltSensorCh2 = (short)0;
|
||||
response.GetParameter(QATS_OFFSET + 77, out tiltSensorCh2); /*! 77 + 2 */
|
||||
var tiltSensorCh3 = (short)0;
|
||||
response.GetParameter(QATS_OFFSET + 79, out tiltSensorCh3); /*! 79 + 2 */
|
||||
|
||||
var sysTempC = 0F;
|
||||
response.GetParameter(QATS_OFFSET + 81, out sysTempC); /*! 71 + 4 */
|
||||
// response.GetParameter(DOUBLE_MAC_ADDR_SIZE + 75, out _sensorData); /*! 75 + 12 channel 1 - 6 for S6/S6A */
|
||||
|
||||
/*! added for synchronization status in S6/S6A/S6DB/TSR-AIR ... */
|
||||
var syncClockEnable = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 129, out syncClockEnable); /*! 129 + 1 */
|
||||
var adcExtClockSyncEnable = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 130, out adcExtClockSyncEnable); /*! 130 + 1 */
|
||||
var syncClockStatus = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 131, out syncClockStatus); /*! 131 + 1 */
|
||||
var adcExtClockSyncStatus = (byte)0;
|
||||
response.GetParameter(QATS_OFFSET + 132, out adcExtClockSyncStatus); /*! 132 + 1 */
|
||||
var triggerSample = 0UL;
|
||||
response.GetParameter(QATS_OFFSET + 133, out triggerSample); /*! 133 + 8 */
|
||||
|
||||
var curOffset = QATS_OFFSET + 133 + 4;
|
||||
var stackChannelOffsetMV = new float[6];
|
||||
for (var i = 0; i < 6; i++)
|
||||
{
|
||||
response.GetParameter(curOffset, out stackChannelOffsetMV[i]);
|
||||
curOffset += 4;
|
||||
}
|
||||
|
||||
var shuntDeviationPercent = new float[6];
|
||||
for (var i = 0; i < 6; i++)
|
||||
{
|
||||
response.GetParameter(curOffset, out shuntDeviationPercent[i]);
|
||||
curOffset += 4;
|
||||
}
|
||||
|
||||
var timeStamp = DateTime.Now;
|
||||
lock (MyLock)
|
||||
{
|
||||
QATSEntry.Add(
|
||||
new UDPQATSEntry(responseHostMac, responseClientMac,
|
||||
qatsSerialNumber, armState, armMode, started, eventTrigger, faultFlags, sampleRate, totalSamples,
|
||||
currentSample, eventNumber, faultSampleNumber, legacyFaultFlag, inputVoltage,
|
||||
backupVoltage, batterySoC, estimateMaxSamples, tiltSensorCh1, tiltSensorCh2, tiltSensorCh3,
|
||||
sysTempC, syncClockEnable, adcExtClockSyncEnable, syncClockStatus, adcExtClockSyncStatus, triggerSample,
|
||||
stackChannelOffsetMV,
|
||||
shuntDeviationPercent,
|
||||
timeStamp));
|
||||
}
|
||||
}
|
||||
|
||||
return CommandReceiveAction.StopReceiving;
|
||||
}
|
||||
/// <summary>
|
||||
/// returns any waiting QATS, clear the list
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public IUDPQATSEntry[] GetUDPQATs()
|
||||
{
|
||||
lock (MyLock)
|
||||
{
|
||||
var quats = QATSEntry.ToArray();
|
||||
QATSEntry.Clear();
|
||||
return quats;
|
||||
}
|
||||
}
|
||||
public override void CommandToString(ref List<List<string>> lines)
|
||||
{
|
||||
base.CommandToString(ref lines);
|
||||
lines.Add(new List<string>() { string.Format("UdpQueryQATS: [{0}] {1} : {1}", HostMac, _address, _port) });
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user