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 } }
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); }