Ejemplo n.º 1
0
        public override void Calculate(IDictionary <Guid, SignalDataBase> signals)
        {
            Dependencies[0].Calculate(signals);

            SignalDataBase origionalSignal = signals[Dependencies[0].UniqueId];

            SignalDataBase newSignal = TryGetSignal(m_newSignal, signals);

            if (newSignal == null || newSignal.IsComplete)
            {
                return;
            }

            int pos = 0;

            while (pos < origionalSignal.Count)
            {
                ulong  time;
                double vm;
                origionalSignal.GetData(pos, out time, out vm);
                pos++;

                newSignal.AddData(time, vm);
            }
            newSignal.Completed();
        }
        public override void Calculate(IDictionary <Guid, SignalDataBase> signals)
        {
            Dependencies[0].Calculate(signals);
            Dependencies[1].Calculate(signals);

            SignalDataBase signal          = signals[Dependencies[0].UniqueId];
            SignalDataBase signalReference = signals[Dependencies[1].UniqueId];

            SignalDataBase newSignal = TryGetSignal(m_newSignal, signals);

            if (newSignal == null || newSignal.IsComplete)
            {
                return;
            }

            int pos    = 0;
            int posRef = 0;

            while (pos < signal.Count && posRef < signalReference.Count)
            {
                ulong  time, timeRef;
                double ang, angRef;
                signal.GetData(pos, out time, out ang);
                signalReference.GetData(posRef, out timeRef, out angRef);

                if (time == timeRef)
                {
                    pos++;
                    posRef++;

                    double delta = ang - angRef;
                    if (delta > 180.0)
                    {
                        delta -= 360.0;
                    }
                    if (delta < -180.0)
                    {
                        delta += 360.0;
                    }

                    newSignal.AddData(time, delta);
                }
                else
                {
                    if (time < timeRef)
                    {
                        pos++;
                    }
                    else
                    {
                        posRef++;
                    }
                }
            }
            newSignal.Completed();
        }
Ejemplo n.º 3
0
        public override void Calculate(IDictionary <Guid, SignalDataBase> signals)
        {
            Dependencies[0].Calculate(signals);
            Dependencies[1].Calculate(signals);
            Dependencies[2].Calculate(signals);
            Dependencies[3].Calculate(signals);

            SignalDataBase pointListVM = signals[Dependencies[0].UniqueId];
            SignalDataBase pointListVA = signals[Dependencies[1].UniqueId];
            SignalDataBase pointListIM = signals[Dependencies[2].UniqueId];
            SignalDataBase pointListIA = signals[Dependencies[3].UniqueId];

            SignalDataBase pointListW    = TryGetSignal(Watt, signals);
            SignalDataBase pointListPF   = TryGetSignal(PowerFactor, signals);
            SignalDataBase pointListVAmp = TryGetSignal(VoltAmpre, signals);
            SignalDataBase pointListVAR  = TryGetSignal(VoltAmpreReactive, signals);

            if (pointListW != null && pointListW.IsComplete)
            {
                return;
            }
            if (pointListPF != null && pointListPF.IsComplete)
            {
                return;
            }
            if (pointListVAmp != null && pointListVAmp.IsComplete)
            {
                return;
            }
            if (pointListVAR != null && pointListVAR.IsComplete)
            {
                return;
            }

            int posVM = 0;
            int posVA = 0;
            int posIM = 0;
            int posIA = 0;

            while (posVM < pointListVM.Count && posVA < pointListVA.Count && posIM < pointListIM.Count &&
                   posIA < pointListIA.Count)
            {
                pointListVM.GetData(posVM, out ulong timeVM, out double vm);
                pointListVA.GetData(posVA, out ulong timeVA, out double va);
                pointListIM.GetData(posIM, out ulong timeIM, out double im);
                pointListIA.GetData(posIA, out ulong timeIA, out double ia);

                ulong time = timeVM;

                if (timeVM == timeVA && timeVM == timeIM && timeVM == timeIA)
                {
                    posVM++;
                    posVA++;
                    posIM++;
                    posIA++;

                    double angleDiffRadians = (va - ia) * TwoPieOver360;
                    double mva  = vm * im * 3;
                    double pf   = Math.Cos(angleDiffRadians);
                    double mw   = mva * pf;
                    double mvar = mva * Math.Sin(angleDiffRadians);

                    if (pointListW != null)
                    {
                        pointListW.AddData(time, mw);
                    }
                    if (pointListVAR != null)
                    {
                        pointListVAR.AddData(time, mvar);
                    }
                    if (pointListVAmp != null)
                    {
                        pointListVAmp.AddData(time, mva);
                    }
                    if (pointListPF != null)
                    {
                        pointListPF.AddData(time, pf);
                    }
                }
                else
                {
                    ulong maxTime = Math.Max(timeVM, timeVA);
                    maxTime = Math.Max(maxTime, timeIM);
                    maxTime = Math.Max(maxTime, timeIA);

                    if (timeVM < maxTime)
                    {
                        posVM++;
                    }
                    if (timeVA < maxTime)
                    {
                        posVA++;
                    }
                    if (timeIM < maxTime)
                    {
                        posIM++;
                    }
                    if (timeIA < maxTime)
                    {
                        posIA++;
                    }
                }
            }


            if (pointListW != null)
            {
                pointListW.Completed();
            }
            if (pointListPF != null)
            {
                pointListPF.Completed();
            }
            if (pointListVAmp != null)
            {
                pointListVAmp.Completed();
            }
            if (pointListVAR != null)
            {
                pointListVAR.Completed();
            }
        }