Files
DP44/Common/DTS.Common.DataModel/ChannelRepresentation.cs

343 lines
14 KiB
C#
Raw Normal View History

2026-04-17 14:55:32 -04:00
using System;
using System.Linq;
using DataPROWin7.DataModel.Classes.Hardware;
using DTS.Common.Converters;
using DTS.Common.Enums.Hardware;
using DTS.Common.Enums.Sensors;
using DTS.Common.Interface.DataRecorders;
using DTS.Common.SharedResource.Strings;
using DTS.Common.Constant.DASSpecific;
namespace DataPROWin7
{
public class ChannelRepresentation
{
public enum ChannelTypeEnum
{
SQUIB,
TOMDigital,
DigitalInput,
Other
}
private readonly ChannelTypeEnum _channelType = ChannelTypeEnum.Other;
public ChannelRepresentation(DataModel.DASHardware h, DTS.DASLib.Service.DASChannel c,
int startingChannelNumber)
{
//adjust the starting channel number (which appears to be a DAS channel number) to a module channel number
if (h.CareAboutModules)
{
startingChannelNumber = 1 + c.ModuleChannelNumber;
}
if (c is DTS.DASLib.Service.OutputSquibChannel)
{
startingChannelNumber = DoSquibConversion(startingChannelNumber);
_channelType = ChannelTypeEnum.SQUIB;
}
else if (c is DTS.DASLib.Service.OutputTOMDigitalChannel)
{
_channelType = ChannelTypeEnum.TOMDigital;
}
else
{
if (((c as DTS.DASLib.Service.AnalogInputDASChannel).SupportedBridges.Length == 1) &&
((c as DTS.DASLib.Service.AnalogInputDASChannel).SupportedBridges[0] ==
SensorConstants.BridgeType.DigitalInput))
{
_channelType = ChannelTypeEnum.DigitalInput;
}
}
ConvertChannelNumbers(h.DASTypeEnum, startingChannelNumber, h.SerialNumber, c.OwningModule.SerialNumber(),
_channelType);
}
private int GetModuleChannelNumber(DataModel.HardwareChannel c)
{
if (null == c.Hardware)
{
return 1 + c.ChannelNumber;
}
var moduleChannelNumber = 0;
var moduleArrayIndex = -1;
foreach (var ch in c.Hardware.Channels)
{
if (ch.ModuleArrayIndex != moduleArrayIndex)
{
moduleChannelNumber = 0;
moduleArrayIndex = ch.ModuleArrayIndex;
}
moduleChannelNumber++;
if (ch.ChannelNumber == c.ChannelNumber)
{
return moduleChannelNumber;
}
}
return 1 + c.ChannelNumber;
}
public ChannelRepresentation(DataModel.HardwareChannel c, int startingChannelNumber, IDASHardware[] hardwares = null)
{
if (null != c.Hardware && c.Hardware.CareAboutModules)
{
startingChannelNumber = GetModuleChannelNumber(c);
}
if (c.IsSupportedBridgeType(SensorConstants.BridgeType.SQUIB))
{
startingChannelNumber = DoSquibConversion(startingChannelNumber);
_channelType = ChannelTypeEnum.SQUIB;
}
else if (c.IsSupportedBridgeType(SensorConstants.BridgeType.TOMDigital))
{
_channelType = ChannelTypeEnum.TOMDigital;
}
else if (c.IsSupportedBridgeType(SensorConstants.BridgeType.DigitalInput))
{
_channelType = ChannelTypeEnum.DigitalInput;
}
var moduleSerialNumber = c.ModuleSerialNumber;
var dasSerialNumber = c.Hardware.SerialNumber;
var h = c.Hardware.GetHardware();
if (h.StandIn)
{
dasSerialNumber = EnumDescriptionTypeConverter.GetEnumDescription(h.DASTypeEnum);
switch (c.Hardware.DASTypeEnum)
{
case HardwareTypes.TDAS_LabRack:
case HardwareTypes.TDAS_Pro_Rack:
break;
default:
moduleSerialNumber = dasSerialNumber;
break;
}
}
else if (c.Hardware.IsPseudoRackModule() && c.Hardware.IsModule())
{
moduleSerialNumber = c.Hardware.SerialNumber;
dasSerialNumber = c.Hardware.ParentDAS;
}
else if (c.Hardware.IsTSRAIRModule() && c.Hardware.IsModule())
{
moduleSerialNumber = c.Hardware.SerialNumber;
dasSerialNumber = string.IsNullOrWhiteSpace(c.Hardware.ParentDAS) ?
c.Hardware.Connection.Split(new[] { "xEMB" }, StringSplitOptions.RemoveEmptyEntries)[0] :
c.Hardware.ParentDAS;
}
ConvertChannelNumbers(c.Hardware.DASTypeEnum, startingChannelNumber, dasSerialNumber, moduleSerialNumber,
_channelType, hardwares);
if (!c.Hardware.IsTSRAIR())
{
DASSerialNumber = dasSerialNumber;
}
}
public string DASSerialNumber { get; set; } = string.Empty;
public string SerialNumber //Module
{
get;
set;
} = string.Empty;
public string ChannelNumberString { get; set; } = string.Empty;
public int ChannelNumber { get; set; } = 0;
private int DoSquibConversion(int squibChannelNumber)
{
Math.DivRem(squibChannelNumber, 8, out var remainder);
switch (remainder)
{
case 1:
return 1;
case 3:
return 2;
case 5:
return 3;
case 7:
return 4;
default:
return 0;
}
}
private void ConvertChannelNumbers(HardwareTypes dasType, int startingChannelNumber, string dasSerialNumber,
string moduleSerialNumber,
ChannelTypeEnum channelType, IDASHardware[] hardwares = null)
{
var displayChannelNumber = 0;
switch (dasType)
{
case HardwareTypes.TDAS_Pro_Rack:
case HardwareTypes.TDAS_LabRack:
if (string.IsNullOrWhiteSpace(moduleSerialNumber))
{
SerialNumber = StringResources.UnknownModule;
Math.DivRem(startingChannelNumber - 1, 8, out displayChannelNumber);
}
else
{
SerialNumber = moduleSerialNumber;
if (moduleSerialNumber.StartsWith("DIM"))
{
Math.DivRem(startingChannelNumber - 1, 16, out displayChannelNumber);
}
else
{
Math.DivRem(startingChannelNumber - 1, 8, out displayChannelNumber);
}
}
displayChannelNumber++;
DASSerialNumber = dasSerialNumber;
break;
case HardwareTypes.SLICE2_TOM:
case HardwareTypes.SLICE2_SLT:
// Start counting the Digital Output channels from 1
Math.DivRem(startingChannelNumber - 1, 8, out displayChannelNumber);
displayChannelNumber++;
SerialNumber = dasSerialNumber;
DASSerialNumber = StringResources.ChannelDASNA;
break;
case HardwareTypes.G5VDS: // Start counting the Digital Input channels from 1
case HardwareTypes.G5INDUMMY:
Math.DivRem(startingChannelNumber - 1, 32, out displayChannelNumber);
displayChannelNumber++;
SerialNumber = dasSerialNumber;
DASSerialNumber = StringResources.ChannelDASNA;
break;
case HardwareTypes.SLICE1_G5Stack:
displayChannelNumber = startingChannelNumber;
SerialNumber = dasSerialNumber;
DASSerialNumber = StringResources.ChannelDASNA;
break;
case HardwareTypes.SLICE_Base: //Is this the micro base?
case HardwareTypes.SLICE_Micro_Base: //Is this the micro base?
case HardwareTypes.SLICE1_5_Nano_Base: //This is for nano
case HardwareTypes.SLICE1_5_Micro_Base: //This is for micro
case HardwareTypes.SLICE_NANO_Base: //This is for nano
Math.DivRem(startingChannelNumber - 1, 3, out displayChannelNumber);
displayChannelNumber++;
if (string.IsNullOrWhiteSpace(moduleSerialNumber))
{
SerialNumber = StringResources.UnknownModule;
}
else
{
SerialNumber = moduleSerialNumber;
}
DASSerialNumber = dasSerialNumber;
break;
case HardwareTypes.SLICE2_SLS:
case HardwareTypes.SLICE2_SIM:
case HardwareTypes.SLICE2_Base:
case HardwareTypes.SLICE2_DIM:
case HardwareTypes.SLICE2_SLD:
case HardwareTypes.SLICE6_Base:
case HardwareTypes.SLICE6_AIR:
case HardwareTypes.SLICE6_AIR_BR:
case HardwareTypes.SLICE_PRO_CAN_FD:
bool isPseudoDAS = false;
IDASHardware[] list = null;
if (null != hardwares)
{
list = hardwares;
}
else { list = DASHardwareList.GetAllHardware(); }
if (list.Any())
{
//13096 Unhandled exception clicking save in hardware disco (test setup)
var matches = from das in list where das.SerialNumber == dasSerialNumber select das;
if (matches.Any())
{
isPseudoDAS = matches.First().IsPseudoRack();
}
}
displayChannelNumber = startingChannelNumber;
SerialNumber = isPseudoDAS ? moduleSerialNumber : dasSerialNumber;
DASSerialNumber = dasSerialNumber;
break;
case HardwareTypes.EMB_ANG_ARS:
case HardwareTypes.EMB_ATM:
case HardwareTypes.EMB_LIN_ACC_HI:
case HardwareTypes.EMB_LIN_ACC_LO:
displayChannelNumber = startingChannelNumber;
SerialNumber = moduleSerialNumber; //dasSerialNumber;
DASSerialNumber = dasSerialNumber; //.Substring(0, dasSerialNumber.IndexOf('-'));
break;
case HardwareTypes.TSR_AIR:
case HardwareTypes.TSR_AIR_RevB:
case HardwareTypes.DIR:
case HardwareTypes.DKR:
Math.DivRem(startingChannelNumber - 1, 3, out displayChannelNumber);
displayChannelNumber++;
displayChannelNumber = startingChannelNumber;
if (string.IsNullOrWhiteSpace(moduleSerialNumber))
{
SerialNumber = StringResources.UnknownModule;
}
else
{
SerialNumber = moduleSerialNumber;
}
DASSerialNumber = dasSerialNumber;
break;
case HardwareTypes.SLICE6_AIR_TC:
if (string.IsNullOrWhiteSpace(moduleSerialNumber))
{
var displayModuleNumber = Math.DivRem(startingChannelNumber - 1, SLICE6AIRTC.ThermocouplersPerModule, out displayChannelNumber);
SerialNumber = string.Format(StringResources.ModuleNumber, displayModuleNumber.ToString());
}
else
{
SerialNumber = moduleSerialNumber;
if (moduleSerialNumber.StartsWith(StringResources.StreamOut))
{
//Stream out
displayChannelNumber = 1;
}
else
{
//Thermocoupler
SerialNumber = dasSerialNumber;
displayChannelNumber = startingChannelNumber;
}
}
DASSerialNumber = dasSerialNumber;
break;
default:
displayChannelNumber = startingChannelNumber;
SerialNumber = dasSerialNumber;
DASSerialNumber = dasSerialNumber;
break;
}
if (channelType == ChannelTypeEnum.SQUIB)
{
ChannelNumberString = StringResources.ChannelPrefix_Squib + displayChannelNumber.ToString("00");
}
else if (channelType == ChannelTypeEnum.TOMDigital)
{
ChannelNumberString = StringResources.ChannelPrefix_DigitalOut +
displayChannelNumber.ToString("00");
}
else if (channelType == ChannelTypeEnum.DigitalInput)
{
ChannelNumberString = StringResources.ChannelPrefix_DigitalIn +
displayChannelNumber.ToString("00");
}
else
{
ChannelNumberString = StringResources.ChannelPrefix_Other + displayChannelNumber.ToString("00");
}
ChannelNumber = displayChannelNumber;
}
}
}