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); }
private DiscreteMeasurement GetPopulatedDiscreteMeasurement(ResourceDescription rs) { 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 = GetAllReferencedElements(rs); if (connection.Count < 0) { logger.LogWarn($"[NMSManager] Discrete measurement with GID: 0x{rs.Id:X16} is not connected to any element."); } else if (connection.Count > 1) { logger.LogWarn($"[NMSManager] Discrete measurement with GID: 0x{rs.Id:X16} is connected to more then one element."); MeasurementToConnectedTerminalMap.Add(rs.Id, connection.First()); } else { MeasurementToConnectedTerminalMap.Add(rs.Id, connection.First()); } } catch (Exception ex) { logger.LogError($"[NMSManager] Failed to populate discrete measurement with GID: 0x{rs.Id:X16}. Exception message: {ex.Message}"); } return(measurement); }
public async Task <UIModel> ConvertTopologyToUIModel(TopologyModel topology) { string verboseMessage = $"{baseLogString} ConvertTopologyToUIModel method called."; Logger.LogVerbose(verboseMessage); if (topology == null) { string message = $"{baseLogString} ConvertTopologyToUIModel => Provider topology is null."; Logger.LogError(message); throw new Exception(message); } UIModel uIModel = new UIModel(); Stack <long> stack = new Stack <long>(); Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => Calling GetReclosers method from model provider client."); var modelProviderClient = CeModelProviderClient.CreateClient(); var reclosers = await modelProviderClient.GetReclosers(); Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => GetReclosers method from model provider client has been called successfully."); uIModel.FirstNode = topology.FirstNode; stack.Push(topology.FirstNode); long nextElementGid; while (stack.Count > 0) { nextElementGid = stack.Pop(); if (topology.GetElementByGid(nextElementGid, out ITopologyElement element)) { if (!reclosers.Contains(nextElementGid)) { foreach (var child in element.SecondEnd) { long nextElement = child.Id; if (ModelCodeHelper.ExtractTypeFromGlobalId(child.Id) == 0) { if (child is Field field && field.Members.Count > 0) { nextElement = field.Members.First().Id; } else { string message = $"{baseLogString} ConvertTopologyToUIModel => Error while getting field in Topology to UIModel convert. Element is not field or field is empty."; Logger.LogError(message); throw new Exception(message); } } uIModel.AddRelation(element.Id, nextElement); stack.Push(nextElement); } } List <UIMeasurement> measurements = new List <UIMeasurement>(); foreach (var measurementGid in element.Measurements.Keys) { DMSType type = (DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(measurementGid); if (type == DMSType.ANALOG) { Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => Calling GetAnalogMeasurement method from measurement provider client for measurement GID {measurementGid:X16}."); var measurementProviderClient = MeasurementProviderClient.CreateClient(); AnalogMeasurement analogMeasurement = await measurementProviderClient.GetAnalogMeasurement(measurementGid); Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => GetAnalogMeasurement method from measurement provider client has been called successfully."); measurements.Add(new UIMeasurement() { Gid = analogMeasurement.Id, Type = analogMeasurement.GetMeasurementType(), Value = analogMeasurement.GetCurrentValue() }); } else if (type == DMSType.DISCRETE) { Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => Calling GetDiscreteMeasurement method from measurement provider client for measurement GID {measurementGid:X16}."); var measurementProviderClient = MeasurementProviderClient.CreateClient(); DiscreteMeasurement discreteMeasurement = await measurementProviderClient.GetDiscreteMeasurement(measurementGid); Logger.LogDebug($"{baseLogString} ConvertTopologyToUIModel => GetDiscreteMeasurement method from measurement provider client has been called successfully."); measurements.Add(new UIMeasurement() { Gid = discreteMeasurement.Id, Type = discreteMeasurement.GetMeasurementType(), Value = discreteMeasurement.GetCurrentValue() }); } } if (!uIModel.Nodes.ContainsKey(element.Id)) { UINode newUINode = new UINode() { Id = element.Id, Name = element.Name, Mrid = element.Mrid, Description = element.Description, DMSType = element.DmsType, NominalVoltage = element.NominalVoltage, Measurements = measurements, IsActive = element.IsActive, IsRemote = element.IsRemote, NoReclosing = element.NoReclosing }; uIModel.AddNode(newUINode); } }
public Task AddDiscreteMeasurement(DiscreteMeasurement discreteMeasurement) { return(InvokeWithRetryAsync(client => client.Channel.AddDiscreteMeasurement(discreteMeasurement))); }