public Metadata(MetadataRecord metadata) { MetadataRecord = metadata; Instance = metadata.PlantCode; PointID = metadata.HistorianID; PointName = metadata.Name; PointDescription = metadata.Description; }
/// <summary> /// Compares the current <see cref="MetadataRecord"/> object to <paramref name="obj"/>. /// </summary> /// <param name="obj">Object against which the current <see cref="MetadataRecord"/> object is to be compared.</param> /// <returns> /// Negative value if the current <see cref="MetadataRecord"/> object is less than <paramref name="obj"/>, /// Zero if the current <see cref="MetadataRecord"/> object is equal to <paramref name="obj"/>, /// Positive value if the current <see cref="MetadataRecord"/> object is greater than <paramref name="obj"/>. /// </returns> public virtual int CompareTo(object obj) { MetadataRecord other = obj as MetadataRecord; if (other == null) { return(1); } return(m_historianID.CompareTo(other.HistorianID)); }
/// <summary> /// Initializes a new instance of the <see cref="MetadataRecordSummary"/> class. /// </summary> /// <param name="record">A <see cref="MetadataRecord"/> object.</param> public MetadataRecordSummary(MetadataRecord record) { HistorianID = record.HistorianID; ExceptionLimit = record.AnalogFields.ExceptionLimit; Enabled = record.GeneralFlags.Enabled; HighWarning = record.AnalogFields.HighWarning; LowWarning = record.AnalogFields.LowWarning; HighAlarm = record.AnalogFields.HighAlarm; LowAlarm = record.AnalogFields.LowAlarm; HighRange = record.AnalogFields.HighRange; LowRange = record.AnalogFields.LowRange; }
/// <summary> /// Returns an <see cref="MetadataRecord"/> object for this <see cref="SerializableMetadataRecord"/>. /// </summary> /// <returns>An <see cref="MetadataRecord"/> object.</returns> public MetadataRecord Deflate() { MetadataRecord metadataRecord = new MetadataRecord(HistorianID, MetadataFileLegacyMode.Enabled); metadataRecord.GeneralFlags.DataType = (DataType)DataType; metadataRecord.Name = Name; metadataRecord.Synonym1 = Synonym1; metadataRecord.Synonym2 = Synonym2; metadataRecord.Synonym3 = Synonym3; metadataRecord.Description = Description; metadataRecord.HardwareInfo = HardwareInfo; metadataRecord.Remarks = Remarks; metadataRecord.PlantCode = PlantCode; metadataRecord.UnitNumber = UnitNumber; metadataRecord.SystemName = SystemName; metadataRecord.SourceID = SourceID; metadataRecord.GeneralFlags.Enabled = Enabled; metadataRecord.ScanRate = ScanRate; metadataRecord.CompressionMinTime = CompressionMinTime; metadataRecord.CompressionMaxTime = CompressionMaxTime; metadataRecord.SecurityFlags.ChangeSecurity = ChangeSecurity; metadataRecord.SecurityFlags.AccessSecurity = AccessSecurity; metadataRecord.GeneralFlags.StepCheck = StepCheck; metadataRecord.GeneralFlags.AlarmEnabled = AlarmEnabled; metadataRecord.AlarmFlags.Value = AlarmFlags; metadataRecord.GeneralFlags.AlarmToFile = AlarmToFile; metadataRecord.GeneralFlags.AlarmByEmail = AlarmByEmail; metadataRecord.GeneralFlags.AlarmByPager = AlarmByPager; metadataRecord.GeneralFlags.AlarmByPhone = AlarmByPhone; metadataRecord.AlarmEmails = AlarmEmails; metadataRecord.AlarmPagers = AlarmPagers; metadataRecord.AlarmPhones = AlarmPhones; if (DataType == 0) { // Analog properties. metadataRecord.AnalogFields.EngineeringUnits = EngineeringUnits; metadataRecord.AnalogFields.LowWarning = LowWarning; metadataRecord.AnalogFields.HighWarning = HighWarning; metadataRecord.AnalogFields.LowAlarm = LowAlarm; metadataRecord.AnalogFields.HighAlarm = HighAlarm; metadataRecord.AnalogFields.LowRange = LowRange; metadataRecord.AnalogFields.HighRange = HighRange; metadataRecord.AnalogFields.CompressionLimit = CompressionLimit; metadataRecord.AnalogFields.ExceptionLimit = ExceptionLimit; metadataRecord.AnalogFields.DisplayDigits = DisplayDigits; metadataRecord.AnalogFields.AlarmDelay = AlarmDelay; } else if (DataType == 1) { // Digital properties. metadataRecord.DigitalFields.SetDescription = SetDescription; metadataRecord.DigitalFields.ClearDescription = ClearDescription; metadataRecord.DigitalFields.AlarmState = AlarmState; metadataRecord.DigitalFields.AlarmDelay = AlarmDelay; } return metadataRecord; }
/// <summary> /// Initializes a new instance of the <see cref="SerializableMetadataRecord"/> class. /// </summary> /// <param name="metadataRecord"><see cref="MetadataRecord"/> from which <see cref="SerializableMetadataRecord"/> is to be initialized.</param> /// <exception cref="ArgumentNullException"><paramref name="metadataRecord"/> is null.</exception> public SerializableMetadataRecord(MetadataRecord metadataRecord) : this() { if (metadataRecord == null) throw new ArgumentNullException("metadataRecord"); HistorianID = metadataRecord.HistorianID; DataType = (int)metadataRecord.GeneralFlags.DataType; Name = metadataRecord.Name; Synonym1 = metadataRecord.Synonym1; Synonym2 = metadataRecord.Synonym2; Synonym3 = metadataRecord.Synonym3; Description = metadataRecord.Description; HardwareInfo = metadataRecord.HardwareInfo; Remarks = metadataRecord.Remarks; PlantCode = metadataRecord.PlantCode; UnitNumber = metadataRecord.UnitNumber; SystemName = metadataRecord.SystemName; SourceID = metadataRecord.SourceID; Enabled = metadataRecord.GeneralFlags.Enabled; ScanRate = metadataRecord.ScanRate; CompressionMinTime = metadataRecord.CompressionMinTime; CompressionMaxTime = metadataRecord.CompressionMaxTime; ChangeSecurity = metadataRecord.SecurityFlags.ChangeSecurity; AccessSecurity = metadataRecord.SecurityFlags.AccessSecurity; StepCheck = metadataRecord.GeneralFlags.StepCheck; AlarmEnabled = metadataRecord.GeneralFlags.AlarmEnabled; AlarmFlags = metadataRecord.AlarmFlags.Value; AlarmToFile = metadataRecord.GeneralFlags.AlarmToFile; AlarmByEmail = metadataRecord.GeneralFlags.AlarmByEmail; AlarmByPager = metadataRecord.GeneralFlags.AlarmByPager; AlarmByPhone = metadataRecord.GeneralFlags.AlarmByPhone; AlarmEmails = metadataRecord.AlarmEmails; AlarmPagers = metadataRecord.AlarmPagers; AlarmPhones = metadataRecord.AlarmPhones; if (DataType == 0) { // Analog properties. EngineeringUnits = metadataRecord.AnalogFields.EngineeringUnits; LowWarning = metadataRecord.AnalogFields.LowWarning; HighWarning = metadataRecord.AnalogFields.HighWarning; LowAlarm = metadataRecord.AnalogFields.LowAlarm; HighAlarm = metadataRecord.AnalogFields.HighAlarm; LowRange = metadataRecord.AnalogFields.LowRange; HighRange = metadataRecord.AnalogFields.HighRange; CompressionLimit = metadataRecord.AnalogFields.CompressionLimit; ExceptionLimit = metadataRecord.AnalogFields.ExceptionLimit; DisplayDigits = metadataRecord.AnalogFields.DisplayDigits; AlarmDelay = metadataRecord.AnalogFields.AlarmDelay; } else if (DataType == 1) { // Digital properties. SetDescription = metadataRecord.DigitalFields.SetDescription; ClearDescription = metadataRecord.DigitalFields.ClearDescription; AlarmState = metadataRecord.DigitalFields.AlarmState; AlarmDelay = metadataRecord.DigitalFields.AlarmDelay; } }
private string GetDeviceName(MetadataRecord record) { string signalReference = record.Synonym1; return signalReference.Remove(signalReference.LastIndexOf('!')).Replace("LOCAL$", ""); }
/// <summary> /// Processes <see cref="PacketType4"/>. /// </summary> /// <returns>An <see cref="IEnumerable{T}"/> object containing the binary images of <see cref="MetadataRecord.Summary"/> for the <see cref="QueryPacketBase.RequestIDs"/>.</returns> protected virtual IEnumerable<byte[]> Process() { if (Archive == null) yield break; byte[] data; MetadataRecord record; if (RequestIDs.Count == 0 || (RequestIDs.Count == 1 && RequestIDs[0] == -1)) { // Information for all defined records is requested. int id = 0; while (true) { data = Archive.ReadMetaData(++id); if (data == null) { // No more records. break; } record = new MetadataRecord(id, MetadataFileLegacyMode.Enabled, data, 0, data.Length); // Only send information that has changed. if (record.GeneralFlags.Changed) { // Reset the "changed" field. record.GeneralFlags.Changed = false; Archive.WriteMetaData(id, record.BinaryImage()); yield return record.Summary.BinaryImage(); } } } else { // Information for specific records is requested. foreach (int id in RequestIDs) { data = Archive.ReadMetaData(id); if (data == null) { // ID is invalid. continue; } record = new MetadataRecord(id, MetadataFileLegacyMode.Enabled, data, 0, data.Length); // Only send information that has changed. if (record.GeneralFlags.Changed) { // Reset the "changed" field. record.GeneralFlags.Changed = false; Archive.WriteMetaData(id, record.BinaryImage()); yield return record.Summary.BinaryImage(); } } } yield return new MetadataRecord(-1, MetadataFileLegacyMode.Enabled).Summary.BinaryImage(); // To indicate EOT. }
/// <summary> /// Updates the <see cref="Metadata"/> from <paramref name="tableData"/> /// </summary> /// <param name="tableData"><see cref="DataTable"/> containing the new metadata.</param> /// <exception cref="ArgumentNullException"><paramref name="tableData"/> is null.</exception> /// <exception cref="ArgumentException"><paramref name="tableData"/> does not contain 43 columns.</exception> public void UpdateMetadata(DataTable tableData) { if (tableData == null) throw new ArgumentNullException(nameof(tableData)); if (tableData.Rows[0].ItemArray.Length != 43) throw new ArgumentException("tableData must contain 43 columns"); // Column 00: HistorianID // Column 01: DataType // Column 02: Name // Column 03: Synonym1 // Column 04: Synonym2 // Column 05: Synonym3 // Column 06: Description // Column 07: HardwareInfo // Column 08: Remarks // Column 09: PlantCode // Column 10: UnitNumber // Column 11: SystemName // Column 12: SourceID // Column 13: Enabled // Column 14: ScanRate // Column 15: CompressionMinTime // Column 16: CompressionMaxTime // Column 17: EngineeringUnits // Column 18: LowWarning // Column 19: HighWarning // Column 20: LowAlarm // Column 21: HighAlarm // Column 22: LowRange // Column 23: HighRange // Column 24: CompressionLimit // Column 25: ExceptionLimit // Column 26: DisplayDigits // Column 27: SetDescription // Column 28: ClearDescription // Column 29: AlarmState // Column 30: ChangeSecurity // Column 31: AccessSecurity // Column 32: StepCheck // Column 33: AlarmEnabled // Column 34: AlarmFlags // Column 35: AlarmDelay // Column 36: AlarmToFile // Column 37: AlarmByEmail // Column 38: AlarmByPager // Column 39: AlarmByPhone // Column 40: AlarmEmails // Column 41: AlarmPagers // Column 42: AlarmPhones MetadataRecord newMetadataRecord; foreach (MetadataRecord existingMetadataRecord in m_metadata.Read()) existingMetadataRecord.GeneralFlags.Enabled = false; foreach (DataRow row in tableData.Rows) { newMetadataRecord = new MetadataRecord(Convert.ToInt32(row[0]), MetadataFileLegacyMode.Enabled); if (!Convert.IsDBNull(row[1])) newMetadataRecord.GeneralFlags.DataType = (DataType)Convert.ToInt32(row[1]); if (!Convert.IsDBNull(row[2])) newMetadataRecord.Name = Convert.ToString(row[2]); if (!Convert.IsDBNull(row[3])) newMetadataRecord.Synonym1 = Convert.ToString(row[3]); if (!Convert.IsDBNull(row[4])) newMetadataRecord.Synonym2 = Convert.ToString(row[4]); if (!Convert.IsDBNull(row[5])) newMetadataRecord.Synonym3 = Convert.ToString(row[5]); if (!Convert.IsDBNull(row[6])) newMetadataRecord.Description = Convert.ToString(row[6]); if (!Convert.IsDBNull(row[7])) newMetadataRecord.HardwareInfo = Convert.ToString(row[7]); if (!Convert.IsDBNull(row[8])) newMetadataRecord.Remarks = Convert.ToString(row[8]); if (!Convert.IsDBNull(row[9])) newMetadataRecord.PlantCode = Convert.ToString(row[9]); if (!Convert.IsDBNull(row[10])) newMetadataRecord.UnitNumber = Convert.ToInt32(row[10]); if (!Convert.IsDBNull(row[11])) newMetadataRecord.SystemName = Convert.ToString(row[11]); if (!Convert.IsDBNull(row[12])) newMetadataRecord.SourceID = Convert.ToInt32(row[12]); if (!Convert.IsDBNull(row[13])) newMetadataRecord.GeneralFlags.Enabled = Convert.ToBoolean(row[13]); if (!Convert.IsDBNull(row[14])) newMetadataRecord.ScanRate = Convert.ToSingle(row[14]); if (!Convert.IsDBNull(row[15])) newMetadataRecord.CompressionMinTime = Convert.ToInt32(row[15]); if (!Convert.IsDBNull(row[16])) newMetadataRecord.CompressionMaxTime = Convert.ToInt32(row[16]); if (!Convert.IsDBNull(row[30])) newMetadataRecord.SecurityFlags.ChangeSecurity = Convert.ToInt32(row[30]); if (!Convert.IsDBNull(row[31])) newMetadataRecord.SecurityFlags.AccessSecurity = Convert.ToInt32(row[31]); if (!Convert.IsDBNull(row[32])) newMetadataRecord.GeneralFlags.StepCheck = Convert.ToBoolean(row[32]); if (!Convert.IsDBNull(row[33])) newMetadataRecord.GeneralFlags.AlarmEnabled = Convert.ToBoolean(row[33]); if (!Convert.IsDBNull(row[34])) newMetadataRecord.AlarmFlags.Value = Convert.ToInt32(row[34]); if (!Convert.IsDBNull(row[36])) newMetadataRecord.GeneralFlags.AlarmToFile = Convert.ToBoolean(row[36]); if (!Convert.IsDBNull(row[37])) newMetadataRecord.GeneralFlags.AlarmByEmail = Convert.ToBoolean(row[37]); if (!Convert.IsDBNull(row[38])) newMetadataRecord.GeneralFlags.AlarmByPager = Convert.ToBoolean(row[38]); if (!Convert.IsDBNull(row[39])) newMetadataRecord.GeneralFlags.AlarmByPhone = Convert.ToBoolean(row[39]); if (!Convert.IsDBNull(row[40])) newMetadataRecord.AlarmEmails = Convert.ToString(row[40]); if (!Convert.IsDBNull(row[41])) newMetadataRecord.AlarmPagers = Convert.ToString(row[41]); if (!Convert.IsDBNull(row[42])) newMetadataRecord.AlarmPhones = Convert.ToString(row[42]); if (newMetadataRecord.GeneralFlags.DataType == DataType.Analog) { if (!Convert.IsDBNull(row[17])) newMetadataRecord.AnalogFields.EngineeringUnits = Convert.ToString(row[17]); if (!Convert.IsDBNull(row[18])) newMetadataRecord.AnalogFields.LowWarning = Convert.ToSingle(row[18]); if (!Convert.IsDBNull(row[19])) newMetadataRecord.AnalogFields.HighWarning = Convert.ToSingle(row[19]); if (!Convert.IsDBNull(row[20])) newMetadataRecord.AnalogFields.LowAlarm = Convert.ToSingle(row[20]); if (!Convert.IsDBNull(row[21])) newMetadataRecord.AnalogFields.HighAlarm = Convert.ToSingle(row[21]); if (!Convert.IsDBNull(row[22])) newMetadataRecord.AnalogFields.LowRange = Convert.ToSingle(row[22]); if (!Convert.IsDBNull(row[23])) newMetadataRecord.AnalogFields.HighRange = Convert.ToSingle(row[23]); if (!Convert.IsDBNull(row[24])) newMetadataRecord.AnalogFields.CompressionLimit = Convert.ToSingle(row[24]); if (!Convert.IsDBNull(row[25])) newMetadataRecord.AnalogFields.ExceptionLimit = Convert.ToSingle(row[25]); if (!Convert.IsDBNull(row[26])) newMetadataRecord.AnalogFields.DisplayDigits = Convert.ToInt32(row[26]); if (!Convert.IsDBNull(row[35])) newMetadataRecord.AnalogFields.AlarmDelay = Convert.ToSingle(row[35]); } else if (newMetadataRecord.GeneralFlags.DataType == DataType.Digital) { if (!Convert.IsDBNull(row[27])) newMetadataRecord.DigitalFields.SetDescription = Convert.ToString(row[27]); if (!Convert.IsDBNull(row[28])) newMetadataRecord.DigitalFields.ClearDescription = Convert.ToString(row[28]); if (!Convert.IsDBNull(row[29])) newMetadataRecord.DigitalFields.AlarmState = Convert.ToInt32(row[29]); if (!Convert.IsDBNull(row[35])) newMetadataRecord.DigitalFields.AlarmDelay = Convert.ToSingle(row[35]); } m_metadata.Write(newMetadataRecord.HistorianID, newMetadataRecord); } m_metadata.Save(); }
/// <summary> /// Updates the <see cref="Metadata"/> from <paramref name="readerData"/> /// </summary> /// <param name="readerData"><see cref="IDataReader"/> providing the new metadata.</param> /// <exception cref="ArgumentNullException"><paramref name="readerData"/> is null.</exception> /// <exception cref="ArgumentException"><paramref name="readerData"/> does not contain 43 columns.</exception> public void UpdateMetadata(IDataReader readerData) { if (readerData == null) throw new ArgumentNullException(nameof(readerData)); if (readerData.FieldCount != 43) throw new ArgumentException("readerData must contain 43 columns"); MetadataRecord newMetadataRecord; foreach (MetadataRecord existingMetadataRecord in m_metadata.Read()) existingMetadataRecord.GeneralFlags.Enabled = false; while (readerData.Read()) { newMetadataRecord = new MetadataRecord(Convert.ToInt32(readerData[0]), m_metadata.LegacyMode); if (!Convert.IsDBNull(readerData[1])) newMetadataRecord.GeneralFlags.DataType = (DataType)Convert.ToInt32(readerData[1]); if (!Convert.IsDBNull(readerData[2])) newMetadataRecord.Name = Convert.ToString(readerData[2]); if (!Convert.IsDBNull(readerData[3])) newMetadataRecord.Synonym1 = Convert.ToString(readerData[3]); if (!Convert.IsDBNull(readerData[4])) newMetadataRecord.Synonym2 = Convert.ToString(readerData[4]); if (!Convert.IsDBNull(readerData[5])) newMetadataRecord.Synonym3 = Convert.ToString(readerData[5]); if (!Convert.IsDBNull(readerData[6])) newMetadataRecord.Description = Convert.ToString(readerData[6]); if (!Convert.IsDBNull(readerData[7])) newMetadataRecord.HardwareInfo = Convert.ToString(readerData[7]); if (!Convert.IsDBNull(readerData[8])) newMetadataRecord.Remarks = Convert.ToString(readerData[8]); if (!Convert.IsDBNull(readerData[9])) newMetadataRecord.PlantCode = Convert.ToString(readerData[9]); if (!Convert.IsDBNull(readerData[10])) newMetadataRecord.UnitNumber = Convert.ToInt32(readerData[10]); if (!Convert.IsDBNull(readerData[11])) newMetadataRecord.SystemName = Convert.ToString(readerData[11]); if (!Convert.IsDBNull(readerData[12])) newMetadataRecord.SourceID = Convert.ToInt32(readerData[12]); if (!Convert.IsDBNull(readerData[13])) newMetadataRecord.GeneralFlags.Enabled = Convert.ToBoolean(readerData[13]); if (!Convert.IsDBNull(readerData[14])) newMetadataRecord.ScanRate = Convert.ToSingle(readerData[14]); if (!Convert.IsDBNull(readerData[15])) newMetadataRecord.CompressionMinTime = Convert.ToInt32(readerData[15]); if (!Convert.IsDBNull(readerData[16])) newMetadataRecord.CompressionMaxTime = Convert.ToInt32(readerData[16]); if (!Convert.IsDBNull(readerData[30])) newMetadataRecord.SecurityFlags.ChangeSecurity = Convert.ToInt32(readerData[30]); if (!Convert.IsDBNull(readerData[31])) newMetadataRecord.SecurityFlags.AccessSecurity = Convert.ToInt32(readerData[31]); if (!Convert.IsDBNull(readerData[32])) newMetadataRecord.GeneralFlags.StepCheck = Convert.ToBoolean(readerData[32]); if (!Convert.IsDBNull(readerData[33])) newMetadataRecord.GeneralFlags.AlarmEnabled = Convert.ToBoolean(readerData[33]); if (!Convert.IsDBNull(readerData[34])) newMetadataRecord.AlarmFlags.Value = Convert.ToInt32(readerData[34]); if (!Convert.IsDBNull(readerData[36])) newMetadataRecord.GeneralFlags.AlarmToFile = Convert.ToBoolean(readerData[36]); if (!Convert.IsDBNull(readerData[37])) newMetadataRecord.GeneralFlags.AlarmByEmail = Convert.ToBoolean(readerData[37]); if (!Convert.IsDBNull(readerData[38])) newMetadataRecord.GeneralFlags.AlarmByPager = Convert.ToBoolean(readerData[38]); if (!Convert.IsDBNull(readerData[39])) newMetadataRecord.GeneralFlags.AlarmByPhone = Convert.ToBoolean(readerData[39]); if (!Convert.IsDBNull(readerData[40])) newMetadataRecord.AlarmEmails = Convert.ToString(readerData[40]); if (!Convert.IsDBNull(readerData[41])) newMetadataRecord.AlarmPagers = Convert.ToString(readerData[41]); if (!Convert.IsDBNull(readerData[42])) newMetadataRecord.AlarmPhones = Convert.ToString(readerData[42]); if (newMetadataRecord.GeneralFlags.DataType == DataType.Analog) { if (!Convert.IsDBNull(readerData[17])) newMetadataRecord.AnalogFields.EngineeringUnits = Convert.ToString(readerData[17]); if (!Convert.IsDBNull(readerData[18])) newMetadataRecord.AnalogFields.LowWarning = Convert.ToSingle(readerData[18]); if (!Convert.IsDBNull(readerData[19])) newMetadataRecord.AnalogFields.HighWarning = Convert.ToSingle(readerData[19]); if (!Convert.IsDBNull(readerData[20])) newMetadataRecord.AnalogFields.LowAlarm = Convert.ToSingle(readerData[20]); if (!Convert.IsDBNull(readerData[21])) newMetadataRecord.AnalogFields.HighAlarm = Convert.ToSingle(readerData[21]); if (!Convert.IsDBNull(readerData[22])) newMetadataRecord.AnalogFields.LowRange = Convert.ToSingle(readerData[22]); if (!Convert.IsDBNull(readerData[23])) newMetadataRecord.AnalogFields.HighRange = Convert.ToSingle(readerData[23]); if (!Convert.IsDBNull(readerData[24])) newMetadataRecord.AnalogFields.CompressionLimit = Convert.ToSingle(readerData[24]); if (!Convert.IsDBNull(readerData[25])) newMetadataRecord.AnalogFields.ExceptionLimit = Convert.ToSingle(readerData[25]); if (!Convert.IsDBNull(readerData[26])) newMetadataRecord.AnalogFields.DisplayDigits = Convert.ToInt32(readerData[26]); if (!Convert.IsDBNull(readerData[35])) newMetadataRecord.AnalogFields.AlarmDelay = Convert.ToSingle(readerData[35]); } else if (newMetadataRecord.GeneralFlags.DataType == DataType.Digital) { if (!Convert.IsDBNull(readerData[27])) newMetadataRecord.DigitalFields.SetDescription = Convert.ToString(readerData[27]); if (!Convert.IsDBNull(readerData[28])) newMetadataRecord.DigitalFields.ClearDescription = Convert.ToString(readerData[28]); if (!Convert.IsDBNull(readerData[29])) newMetadataRecord.DigitalFields.AlarmState = Convert.ToInt32(readerData[29]); if (!Convert.IsDBNull(readerData[35])) newMetadataRecord.DigitalFields.AlarmDelay = Convert.ToSingle(readerData[35]); } m_metadata.Write(newMetadataRecord.HistorianID, newMetadataRecord); } m_metadata.Save(); }
// openHistorian 2.0 currently uses the database for its metadata repository - so we just expose the metadata record // as read from the database for exposure via metadata web service interface private MetadataRecord ReadMetadataRecord(int historianID) { MetadataRecord record = new MetadataRecord(historianID, MetadataFileLegacyMode.Enabled); using (AdoDataConnection database = new AdoDataConnection("systemSettings")) { IDbConnection connection = database.Connection; string query = string.Format("SELECT * FROM HistorianMetadata WHERE HistorianID = {0}", historianID); DataRow row = connection.RetrieveRow(database.AdapterType, query); // Make sure record exists for this point ID if (Convert.IsDBNull(row[0]) || Convert.ToInt32(row[0]) != historianID) return null; if (!Convert.IsDBNull(row[1])) record.GeneralFlags.DataType = (DataType)Convert.ToInt32(row[1]); if (!Convert.IsDBNull(row[2])) record.Name = Convert.ToString(row[2]); if (!Convert.IsDBNull(row[3])) record.Synonym1 = Convert.ToString(row[3]); if (!Convert.IsDBNull(row[4])) record.Synonym2 = Convert.ToString(row[4]); if (!Convert.IsDBNull(row[5])) record.Synonym3 = Convert.ToString(row[5]); if (!Convert.IsDBNull(row[6])) record.Description = Convert.ToString(row[6]); if (!Convert.IsDBNull(row[7])) record.HardwareInfo = Convert.ToString(row[7]); if (!Convert.IsDBNull(row[8])) record.Remarks = Convert.ToString(row[8]); if (!Convert.IsDBNull(row[9])) record.PlantCode = Convert.ToString(row[9]); if (!Convert.IsDBNull(row[10])) record.UnitNumber = Convert.ToInt32(row[10]); if (!Convert.IsDBNull(row[11])) record.SystemName = Convert.ToString(row[11]); if (!Convert.IsDBNull(row[12])) record.SourceID = Convert.ToInt32(row[12]); if (!Convert.IsDBNull(row[13])) record.GeneralFlags.Enabled = Convert.ToBoolean(row[13]); if (!Convert.IsDBNull(row[14])) record.ScanRate = Convert.ToSingle(row[14]); if (!Convert.IsDBNull(row[15])) record.CompressionMinTime = Convert.ToInt32(row[15]); if (!Convert.IsDBNull(row[16])) record.CompressionMaxTime = Convert.ToInt32(row[16]); if (!Convert.IsDBNull(row[30])) record.SecurityFlags.ChangeSecurity = Convert.ToInt32(row[30]); if (!Convert.IsDBNull(row[31])) record.SecurityFlags.AccessSecurity = Convert.ToInt32(row[31]); if (!Convert.IsDBNull(row[32])) record.GeneralFlags.StepCheck = Convert.ToBoolean(row[32]); if (!Convert.IsDBNull(row[33])) record.GeneralFlags.AlarmEnabled = Convert.ToBoolean(row[33]); if (!Convert.IsDBNull(row[34])) record.AlarmFlags.Value = Convert.ToInt32(row[34]); if (!Convert.IsDBNull(row[36])) record.GeneralFlags.AlarmToFile = Convert.ToBoolean(row[36]); if (!Convert.IsDBNull(row[37])) record.GeneralFlags.AlarmByEmail = Convert.ToBoolean(row[37]); if (!Convert.IsDBNull(row[38])) record.GeneralFlags.AlarmByPager = Convert.ToBoolean(row[38]); if (!Convert.IsDBNull(row[39])) record.GeneralFlags.AlarmByPhone = Convert.ToBoolean(row[39]); if (!Convert.IsDBNull(row[40])) record.AlarmEmails = Convert.ToString(row[40]); if (!Convert.IsDBNull(row[41])) record.AlarmPagers = Convert.ToString(row[41]); if (!Convert.IsDBNull(row[42])) record.AlarmPhones = Convert.ToString(row[42]); if (record.GeneralFlags.DataType == DataType.Analog) { if (!Convert.IsDBNull(row[17])) record.AnalogFields.EngineeringUnits = Convert.ToString(row[17]); if (!Convert.IsDBNull(row[18])) record.AnalogFields.LowWarning = Convert.ToSingle(row[18]); if (!Convert.IsDBNull(row[19])) record.AnalogFields.HighWarning = Convert.ToSingle(row[19]); if (!Convert.IsDBNull(row[20])) record.AnalogFields.LowAlarm = Convert.ToSingle(row[20]); if (!Convert.IsDBNull(row[21])) record.AnalogFields.HighAlarm = Convert.ToSingle(row[21]); if (!Convert.IsDBNull(row[22])) record.AnalogFields.LowRange = Convert.ToSingle(row[22]); if (!Convert.IsDBNull(row[23])) record.AnalogFields.HighRange = Convert.ToSingle(row[23]); if (!Convert.IsDBNull(row[24])) record.AnalogFields.CompressionLimit = Convert.ToSingle(row[24]); if (!Convert.IsDBNull(row[25])) record.AnalogFields.ExceptionLimit = Convert.ToSingle(row[25]); if (!Convert.IsDBNull(row[26])) record.AnalogFields.DisplayDigits = Convert.ToInt32(row[26]); if (!Convert.IsDBNull(row[35])) record.AnalogFields.AlarmDelay = Convert.ToSingle(row[35]); } else if (record.GeneralFlags.DataType == DataType.Digital) { if (!Convert.IsDBNull(row[27])) record.DigitalFields.SetDescription = Convert.ToString(row[27]); if (!Convert.IsDBNull(row[28])) record.DigitalFields.ClearDescription = Convert.ToString(row[28]); if (!Convert.IsDBNull(row[29])) record.DigitalFields.AlarmState = Convert.ToInt32(row[29]); if (!Convert.IsDBNull(row[35])) record.DigitalFields.AlarmDelay = Convert.ToSingle(row[35]); } } return record; }
// openHistorian 2.0 currently uses the database for its metadata repository - so we just update the database using the // provided metadata record as received from the metadata web service interface void IArchive.WriteMetaData(int historianID, byte[] metadata) { MetadataRecord record = new MetadataRecord(historianID, MetadataFileLegacyMode.Enabled, metadata, 0, metadata.Length); using (AdoDataConnection database = new AdoDataConnection("systemSettings")) { IDbConnection connection = database.Connection; // TODO: To enable update signal type, associated device, destination historian, etc. - look up key ID values in advance of measurement record update // Only updating readily available fields - to make this more useful in the future, will need to update (or add a new) web service metadata format... string query = database.ParameterizedQueryString("UPDATE Measurement SET PointTag={0}, SignalReference={1}, AlternateTag={2}, Enabled={3} WHERE HistorianID = {4}", "pointTag", "signalReference", "alternateTag", "enabled", "historianID"); // Update metadata fields connection.ExecuteNonQuery(query, record.Name, record.Synonym1, record.Synonym3, record.GeneralFlags.Enabled, historianID); } }