IEnumerable <long> GetMeasurements()
        {
            List <long>  measurements = new List <long>();
            NetworkModel nm           = PubSub.Model;

            foreach (long terminalGID in io.Terminals)
            {
                Terminal terminal = (Terminal)nm.Get(terminalGID);

                if (terminal == null)
                {
                    continue;
                }

                foreach (long measGID in terminal.Measurements)
                {
                    measurements.Add(measGID);
                }
            }

            return(measurements);
        }
예제 #2
0
        public override void Update()
        {
            Grid measGrid = (Grid)((Border)((StackPanel)panel.Children[1]).Children[0]).Child;

            if (measGrid.Children.Count > 5)
            {
                measGrid.Children.RemoveRange(5, measGrid.Children.Count - 5);
            }

            if (measGrid.RowDefinitions.Count > 1)
            {
                measGrid.RowDefinitions.RemoveRange(1, measGrid.RowDefinitions.Count - 1);
            }

            int                row      = 0;
            NetworkModel       nm       = pubSub.Model;
            IEnumerable <long> measGIDs = measurementsGetter();

            if (measGIDs == null)
            {
                measGIDs = new long[0];
            }

            foreach (long measGID in measurementsGetter())
            {
                ++row;
                Measurement meas = (Measurement)nm.Get(measGID);

                if (meas == null)
                {
                    continue;
                }

                measGrid.RowDefinitions.Add(new RowDefinition());
                TextBlock mridTextBlock = CreateHyperlink(meas.MRID, () => new ElementWindow(measGID, pubSub)
                {
                    Owner = Application.Current.MainWindow
                }.Show());
                AddToGrid(measGrid, mridTextBlock, row, 0);
                AddToGrid(measGrid, new TextBlock()
                {
                    Text = meas.MeasurementType.ToString()
                }, row, 2);

                string valueText;
                bool   isNormal;

                if (ModelCodeHelper.GetTypeFromGID(measGID) == DMSType.Analog)
                {
                    float  value;
                    bool   available = pubSub.Measurements.GetAnalogInput(measGID, out value);
                    Analog a         = (Analog)meas;

                    isNormal  = !available || (value <= a.MaxValue && value >= a.MinValue);
                    valueText = available ? value.ToString() : "N/A";
                }
                else
                {
                    int      value;
                    bool     available = pubSub.Measurements.GetDiscreteInput(measGID, out value);
                    Discrete d         = (Discrete)meas;

                    isNormal  = !available || (value <= d.MaxValue && value >= d.MinValue);
                    valueText = available ? value.ToString() : "N/A";
                }

                AddToGrid(measGrid, new TextBlock()
                {
                    Text = valueText, Foreground = isNormal ? Brushes.Black : Brushes.White, Background = isNormal ? Brushes.White : Brushes.Red, FontWeight = isNormal ? FontWeights.Regular : FontWeights.Bold, TextAlignment = TextAlignment.Right
                }, row, 4);
            }

            int splitterRowSpan = int.MaxValue;

            if (row == 0)
            {
                measGrid.RowDefinitions.Add(new RowDefinition());
                Grid.SetColumnSpan(AddToGrid(measGrid, new TextBlock()
                {
                    Text = "No measurements.", HorizontalAlignment = HorizontalAlignment.Center
                }, 1, 0), 5);
                splitterRowSpan = 1;
            }

            Grid.SetRowSpan(measGrid.Children[3], splitterRowSpan);
            Grid.SetRowSpan(measGrid.Children[4], splitterRowSpan);

            measGrid.RowDefinitions.Last().Height = new GridLength(1, GridUnitType.Star);

            initialized = true;
        }