Esempio n. 1
0
        private async Task GenerateOutageLogic()
        {
            if (!(OutageElement.Count == 1 && OptimumIsolationPoints.Count > 0 && DefaultIsolationPoints.Count > 0))
            {
                string message = $"Rules: OutageElement.Count == 1 && OptimumIsolationPoints.Count > 0 && DefaultIsolationPoints.Count > 0";
                MessageBox.Show(message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }

            var outage = new SimulatedOutage();

            outage.OutageElementGid = OutageElement.First().GID;
            outage.OptimumIsolationPointGids.AddRange(OptimumIsolationPoints.Select(point => point.GID));
            outage.DefaultIsolationPointGids.AddRange(DefaultIsolationPoints.Select(point => point.GID));

            for (int i = 0; i < DefaultIsolationPoints.Count; i++)
            {
                if (!outage.DefaultToOptimumIsolationPointMap.ContainsKey(DefaultIsolationPoints[i].GID) && i < OptimumIsolationPoints.Count)
                {
                    outage.DefaultToOptimumIsolationPointMap.Add(DefaultIsolationPoints[i].GID, OptimumIsolationPoints[i].GID);
                }
            }

            var outageSimulatorUIClient = OutageSimulatorUIClient.CreateClient();
            await outageSimulatorUIClient.GenerateOutage(outage);

            await parentWindow.ChangeTab(TabType.OVERVIEW);

            OutageElement.Clear();
            outageElementGids.Clear();
            OptimumIsolationPoints.Clear();
            optimumIsolationPointsGids.Clear();
            DefaultIsolationPoints.Clear();
            defaultIsolationPointsGids.Clear();

            SetGenerateOutageIsEnabled();
            SetSelectOutageElementIsEnabled();
            SetDeselectOutageElementIsEnabled();
            SetAddOptimumIsolationPointIsEnabled();
            SetRemoveOptimumIsolationPointIsEnabled();
            SetAddDefaultIsolationPointIsEnabled();
            SetRemoveDefaultIsolationPointIsEnabled();
            //OnPropertyChanged("IsGenerateOutageEnabled");
            //OnPropertyChanged("IsSelectOutageElementEnabled");
            //OnPropertyChanged("IsDeSelectOutageElementEnabled");
            //OnPropertyChanged("IsAddOptimumIsolationPointEnabled");
            //OnPropertyChanged("IsRemoveOptimumIsolationPointEnabled");
            //OnPropertyChanged("IsAddDefaultIsolationPointEnabled");
            //OnPropertyChanged("IsRemoveDefaultIsolationPointEnabled");
        }
Esempio n. 2
0
        private async Task InitializeMonitoredPoints(SimulatedOutage outage)
        {
            var measurementMapClient    = MeasurementMapClient.CreateClient();
            var measurementToElementGid = await measurementMapClient.GetMeasurementToElementMap();

            var scadaClient = ScadaIntegrityUpdateClient.CreateClient();
            var publication = await scadaClient.GetIntegrityUpdateForSpecificTopic(Common.Cloud.Topic.SWITCH_STATUS);

            if (!(publication.Message is MultipleDiscreteValueSCADAMessage multipleDiscreteValueSCADAMessage))
            {
                string errorMessage = $"SCADA returned wrong value for in SCADAPublication. {typeof(MultipleDiscreteValueSCADAMessage)} excepted.";
                Logger.LogError(errorMessage);
                throw new Exception(errorMessage);
            }

            foreach (var measurementGid in multipleDiscreteValueSCADAMessage.Data.Keys)
            {
                if (!measurementToElementGid.ContainsKey(measurementGid))
                {
                    continue;
                }

                var elementGid = measurementToElementGid[measurementGid];

                if (!outage.ElementsOfInteres.Contains(elementGid))
                {
                    continue;
                }

                var modbusData = multipleDiscreteValueSCADAMessage.Data[measurementGid];

                var monitoredPoint = new MonitoredIsolationPoint()
                {
                    IsolationElementGid       = elementGid,
                    DiscreteMeasurementGid    = measurementGid,
                    SimulatedOutageElementGid = outage.OutageElementGid,
                    DiscreteModbusData        = modbusData,
                    IsolationPointType        = outage.OptimumIsolationPointGids.Contains(elementGid) ?
                                                IsolationPointType.OPTIMUM :
                                                outage.DefaultIsolationPointGids.Contains(elementGid) ?
                                                IsolationPointType.DEFAULT :
                                                0,
                };

                await MonitoredIsolationPoints.SetAsync(measurementGid, monitoredPoint);
            }
        }
Esempio n. 3
0
        public async Task <bool> GenerateOutage(SimulatedOutage outage)
        {
            while (!ReliableDictionariesInitialized)
            {
                await Task.Delay(1000);
            }

            if (await SimulatedOutages.ContainsKeyAsync(outage.OutageElementGid))
            {
                return(false);
            }

            await InitializeMonitoredPoints(outage);

            await SimulatedOutages.SetAsync(outage.OutageElementGid, outage);

            return(true);
        }
Esempio n. 4
0
 public Task <bool> GenerateOutage(SimulatedOutage outage)
 {
     return(InvokeWithRetryAsync(client => client.Channel.GenerateOutage(outage)));
 }