public PowerCalculationUserControl()
        {
            InitializeComponent();
            m_dataContext = new PowerCalculationViewModel(16);
            m_dataContext.PropertyChanged += ViewModel_PropertyChanged;
            DataContext = m_dataContext;

            try
            {
                // Validate that data operation and adapter instance exist within database
                PowerCalculationConfigurationValidation.ValidateDatabaseDefinitions();
            }
            catch
            {
                // This should never cause unhanded exception
            }
        }
Exemple #2
0
        public void ValidateCalculatorConfigurations(int?historianID, string systemName)
        {
            const int Avg = 0, Max = 1, Min = 2;

            PowerCalculationConfigurationValidation.ValidateDatabaseDefinitions();

            TableOperations <Measurement> measurementTable = DataContext.Table <Measurement>();
            string frequencyDeviceName = string.Format(SystemFrequencyDeviceName, systemName);

            // Look for existing frequency average
            if (measurementTable.QueryRecordCountWhere($"SignalReference = '{SignalReference.ToString(frequencyDeviceName, SignalKind.Frequency)}'") > 0)
            {
                return;
            }

            TableOperations <CustomActionAdapter> customActionAdapterTable = DataContext.Table <CustomActionAdapter>();
            CustomActionAdapter avgFreqAdapter = customActionAdapterTable.QueryRecordWhere("TypeName = {0}", typeof(PowerCalculations.AverageFrequency).FullName) ?? NewCustomActionAdapter();

            Measurement[] measurements = GetCalculatedFrequencyMeasurements(historianID, systemName, frequencyDeviceName);

            double lagTime             = DefaultCalculationLagTime;

            // Reduce lag-time since dynamic calculations can depend on average frequency
            lagTime -= lagTime > 1.0 ? 1.0 : 0.5;

            if (lagTime < 0.1)
            {
                lagTime = 0.1;
            }

            avgFreqAdapter.AdapterName      = "PHASOR!AVERAGEFREQ";
            avgFreqAdapter.AssemblyName     = "PowerCalculations.dll";
            avgFreqAdapter.TypeName         = typeof(PowerCalculations.AverageFrequency).FullName;
            avgFreqAdapter.ConnectionString = $"InputMeasurementKeys={{FILTER ActiveMeasurements WHERE SignalType = 'FREQ' AND SignalReference NOT LIKE '{frequencyDeviceName}%'}}; OutputMeasurements={{{measurements[Avg].SignalID};{measurements[Max].SignalID};{measurements[Min].SignalID}}}; LagTime={lagTime}; LeadTime={DefaultCalculationLeadTime}; FramesPerSecond={DefaultCalculationFramesPerSecond}";
            avgFreqAdapter.Enabled          = true;

            customActionAdapterTable.AddNewOrUpdateRecord(avgFreqAdapter);
        }