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 { /// /// 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 /// public class DigitalInputSetting : SensorData { /// /// constructor and copy constructor /// 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; } } } }