Files
DP44/DataPRO/SensorDB/DigitalInputSetting.cs
2026-04-17 14:55:32 -04:00

141 lines
6.6 KiB
C#

using System;
using System.Data;
using System.Data.SqlClient;
using DTS.Common.Classes.Sensors;
using DTS.Common.Enums;
using DTS.Common.Enums.Sensors;
using DTS.Common.Interface.Sensors;
using DTS.Common.Storage;
using DTS.Common.Utilities.Logging;
namespace DTS.SensorDB
{
/// <summary>
/// Digital Inputs allow collected data to behave consistently with a digital data source
/// the settings are for configuring firmware appropriately and for transforming data for consumption
/// </summary>
public class DigitalInputSetting : SensorData
{
/// <summary>
/// constructor and copy constructor
/// </summary>
public DigitalInputSetting() : base()
{
SetDefaults(this);
}
public DigitalInputSetting(IDigitalInDbRecord record) : base()
{
SetDefaults(this);
try
{
DatabaseId = record.Id;
SettingName = record.SerialNumber;
ISOCode = record.ISOCode;
ISOChannelName = record.ISOChannelName;
UserCode = record.UserCode;
UserChannelName = record.UserChannelName;
Broken = record.Broken;
DoNotUse = record.DoNotUse;
LastModified = record.LastModified;
LastUpdatedBy = record.LastModifiedBy;
InputMode = record.Mode;
DIUnits = record.MeasurementUnit;
//Since the ISOCode is not stored in the SensorsDigitalIn table like it is in SensorsAnalog, create one
SetFilterAndFilterClassISO(record.FilterClass, true, true); //Always set Filter to 0
EID = record.EID;
UserValue1 = record.UserValue1;
UserValue2 = record.UserValue2;
UserValue3 = record.UserValue3;
TagsBlobBytes = record.UserTags;
Comment = record.UserValue1;
ScaleMultiplier.FromDbSerializeString(record.ScaleMultiplier.ToSerializeDbString());
}
catch (Exception ex)
{
APILogger.Log("Failed to process: ", ex);
}
}
public DigitalInputSetting(IDataRecord reader) : base()
{
SetDefaults(this);
try
{
DatabaseId = Convert.ToInt32(reader["Id"]);
SettingName = Convert.ToString(reader["SerialNumber"]);
ISOCode = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.ISOCode.ToString()]);
ISOChannelName = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.ISOChannelName.ToString()]);
UserCode = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserCode.ToString()]);
UserChannelName = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserChannelName.ToString()]);
Broken = Convert.ToBoolean(reader[DbOperations.DigitalInputSettings.Fields.Broken.ToString()]);
DoNotUse = Convert.ToBoolean(reader[DbOperations.DigitalInputSettings.Fields.DoNotUse.ToString()]);
LastModified = Convert.ToDateTime(reader[DbOperations.DigitalInputSettings.Fields.LastModified.ToString()]);
LastUpdatedBy = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.LastModifiedBy.ToString()]);
InputMode = (DigitalInputModes)Convert.ToInt32(reader[DbOperations.DigitalInputSettings.Fields.SettingMode.ToString()]);
DIUnits = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.MeasurementUnit.ToString()]);
//Since the ISOCode is not stored in the SensorsDigitalIn table like it is in SensorsAnalog, create one
SetFilterAndFilterClassISO(new FilterClass(Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.FilterClass.ToString()])), true, true); //Always set Filter to 0
EID = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.eId.ToString()]);
UserValue1 = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserValue1.ToString()]);
UserValue2 = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserValue2.ToString()]);
UserValue3 = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserValue3.ToString()]);
TagsBlobBytes = (byte[])reader[DbOperations.DigitalInputSettings.Fields.UserTags.ToString()];
Comment = Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.UserValue1.ToString()]);
ScaleMultiplier.FromDbSerializeString(Convert.ToString(reader[DbOperations.DigitalInputSettings.Fields.ScaleMultiplier.ToString()]));
}
catch (Exception ex)
{
APILogger.Log("Failed to process: ", ex);
}
}
public DigitalInputSetting(DigitalInputSetting copy)
: base(copy)
{
SetDefaults(this);
}
public static void SetDefaults(SensorData sd)
{
sd.AxisNumber = 0;
sd.NumberOfAxes = 1;
sd.Capacity = 2400;
sd.Bridge = SensorConstants.BridgeType.DigitalInput;
sd.Capacity = 1;
sd.DisplayUnit = "V";
sd.BridgeResistance = double.NaN;
sd.CheckOffset = false;
sd.Manufacturer = "Generic";
sd.OffsetToleranceHigh = 2500;
sd.OffsetToleranceLow = 2500;
sd.Model = "Digital Input Setting";
sd.Shunt = ShuntMode.None;
sd.MeasureExcitation = false;
sd.MeasureNoise = false;
}
public DigitalInputSetting(SensorData sd)
: base(sd)
{
Bridge = SensorConstants.BridgeType.DigitalInput;
SetDefaults(this);
UserSerialNumber = sd.UserSerialNumber;
SerialNumber = sd.SerialNumber;
UserValue1 = sd.UserValue1;
UserValue2 = sd.UserValue2;
UserValue3 = sd.UserValue3;
}
public static void Commit(SensorData setting)
{
SetDefaults(setting);
var record = new DigitalInDbRecord(setting, setting.TagsBlobBytes, setting.ScaleMultiplier);
var hr = DbOperations.SensorsDigitalInUpdateInsert(record);
if (0 == hr)
{
setting.Id = record.Id;
}
}
}
}