private async Task <AnalogMeasurement> GetPopulatedAnalogMeasurement(ResourceDescription rs) { string verboseMessage = $"{baseLogString} entering GetPopulatedAnalogMeasurement method."; Logger.LogVerbose(verboseMessage); AnalogMeasurement measurement = new AnalogMeasurement(); try { measurement.Id = rs.Id; measurement.Address = rs.GetProperty(ModelCode.MEASUREMENT_ADDRESS).AsString(); measurement.IsInput = rs.GetProperty(ModelCode.MEASUREMENT_ISINPUT).AsBool(); measurement.CurrentValue = rs.GetProperty(ModelCode.ANALOG_CURRENTVALUE).AsFloat(); measurement.MaxValue = rs.GetProperty(ModelCode.ANALOG_MAXVALUE).AsFloat(); measurement.MinValue = rs.GetProperty(ModelCode.ANALOG_MINVALUE).AsFloat(); measurement.NormalValue = rs.GetProperty(ModelCode.ANALOG_NORMALVALUE).AsFloat(); measurement.Deviation = rs.GetProperty(ModelCode.ANALOG_DEVIATION).AsFloat(); measurement.ScalingFactor = rs.GetProperty(ModelCode.ANALOG_SCALINGFACTOR).AsFloat(); measurement.SignalType = (AnalogMeasurementType)rs.GetProperty(ModelCode.ANALOG_SIGNALTYPE).AsEnum(); var connection = await GetAllReferencedElements(rs); if (connection.Count < 0) { Logger.LogError($"{baseLogString} GetPopulatedAnalogMeasurement => Analog measurement with GID: {rs.Id:X16} is not connected to any element."); } else if (connection.Count > 1) { Logger.LogWarning($"{baseLogString} GetPopulatedAnalogMeasurement => Analog measurement with GID: {rs.Id:X16} is connected to more then one element."); if (!await MeasurementToConnectedTerminalMap.ContainsKeyAsync(rs.Id)) { await MeasurementToConnectedTerminalMap.SetAsync(rs.Id, connection.First()); } } else { if (!await MeasurementToConnectedTerminalMap.ContainsKeyAsync(rs.Id)) { await MeasurementToConnectedTerminalMap.SetAsync(rs.Id, connection.First()); } } } catch (Exception e) { Logger.LogError($"{baseLogString} GetPopulatedAnalogMeasurement => Failed to populate analog measurement with GID {rs.Id:X16}." + $"{Environment.NewLine} Exception message: {e.Message}" + $"{Environment.NewLine} Stack trace: {e.StackTrace}"); } return(measurement); }
private async Task <DiscreteMeasurement> GetPopulatedDiscreteMeasurement(ResourceDescription rs) { string verboseMessage = $"{baseLogString} entering GetPopulatedDiscreteMeasurement method."; Logger.LogVerbose(verboseMessage); DiscreteMeasurement measurement = new DiscreteMeasurement(); try { measurement.Id = rs.Id; measurement.Address = rs.GetProperty(ModelCode.MEASUREMENT_ADDRESS).AsString(); measurement.IsInput = rs.GetProperty(ModelCode.MEASUREMENT_ISINPUT).AsBool(); measurement.CurrentOpen = rs.GetProperty(ModelCode.DISCRETE_CURRENTOPEN).AsBool(); measurement.MaxValue = rs.GetProperty(ModelCode.DISCRETE_MAXVALUE).AsInt(); measurement.MinValue = rs.GetProperty(ModelCode.DISCRETE_MINVALUE).AsInt(); measurement.NormalValue = rs.GetProperty(ModelCode.DISCRETE_NORMALVALUE).AsInt(); measurement.MeasurementType = (DiscreteMeasurementType)rs.GetProperty(ModelCode.DISCRETE_MEASUREMENTTYPE).AsEnum(); var connection = await GetAllReferencedElements(rs); if (connection.Count < 0) { Logger.LogError($"{baseLogString} GetPopulatedDiscreteMeasurement => Discrete measurement with GID {rs.Id:X16} is not connected to any element."); } else if (connection.Count > 1) { Logger.LogWarning($"{baseLogString} GetPopulatedDiscreteMeasurement => Discrete measurement with GID {rs.Id:X16} is connected to more then one element."); if (!await MeasurementToConnectedTerminalMap.ContainsKeyAsync(rs.Id)) { await MeasurementToConnectedTerminalMap.SetAsync(rs.Id, connection.First()); } } else { if (!await MeasurementToConnectedTerminalMap.ContainsKeyAsync(rs.Id)) { await MeasurementToConnectedTerminalMap.SetAsync(rs.Id, connection.First()); } } } catch (Exception e) { Logger.LogError($"[NMSManager] Failed to populate discrete measurement with GID: {rs.Id:X16}." + $"{Environment.NewLine} Exception message: {e.Message}" + $"{Environment.NewLine} Stack trace: {e.StackTrace}"); } return(measurement); }