protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); mSettingsChangedListener = new SettingsChangedListener(this); SetContentView(Resource.Layout.example); viewActionsContentView = FindViewById <ActionsContentView>(Resource.Id.actionsContentView); viewActionsContentView.SwipingType = ActionsContentView.SwipingEdge; ListView viewActionsList = FindViewById <ListView>(Resource.Id.actions); ActionsAdapter actionsAdapter = new ActionsAdapter(this); viewActionsList.Adapter = actionsAdapter; viewActionsList.OnItemClickListener = new ActionsItemClickListener(this, actionsAdapter); ImageButton mainButton = FindViewById <ImageButton>(Resource.Id.mainButton); mainButton.Click += OnActionsButtonClick; Button sourceCodeButton = FindViewById <Button>(Resource.Id.sourceCodeButton); sourceCodeButton.Click += OnSourceCodeClick; if (savedInstanceState != null) { CurrentUri = Uri.Parse(savedInstanceState.GetString(STATE_URI)); CurrentContentFragmentTag = savedInstanceState.GetString(STATE_FRAGMENT_TAG); } UpdateContent(CurrentUri); }
private void ExecuteCapBankControl(ActionsAdapter act) { if ((act.ActSn1Close == 1) | (act.ActSn1Trip == 1) | (act.ActSn2Close == 1) | (act.ActSn2Trip == 1)) { if (m_substationInformation.ConsecCap < m_substationInformation.Zccons || m_substationInformation.Ncdel < m_substationInformation.Zcdel || m_substationInformation.Ntdel < m_substationInformation.Zdel) { MainWindow.WriteMessage($"Control Delayed: Not enough delays for CapBank - {m_substationInformation.ConsecCap} < {m_substationInformation.Zccons} {m_substationInformation.Ncdel} < {m_substationInformation.Zcdel} {m_substationInformation.Ntdel} < {m_substationInformation.Zdel}"); } else { m_substationInformation.Ncdel = 0; m_substationInformation.ConsecCap = 0; switch (act.ActSn1Close) { case 1: m_controlCapacitorBanks[0].CapBkrV = 1; break; default: break; } switch (act.ActSn1Trip) { case 1: m_controlCapacitorBanks[0].CapBkrV = 0; break; default: break; } switch (act.ActSn2Close) { case 1: m_controlCapacitorBanks[1].CapBkrV = 1; break; default: break; } switch (act.ActSn2Trip) { case 1: m_controlCapacitorBanks[1].CapBkrV = 0; break; default: break; } } } }
//private void InsertVcSubstationAlarmDevice() //{ // object value = 0; // if (m_rawKeyValuePairs.TryGetValue(m_substationInformation.. , out value)) // { // m_substationAlarmDevice. = (int)value; // value = 0; // } //} private void ExecuteLTCControl(ActionsAdapter act) { if ((act.ActTxRaise == 1) | (act.ActTxLower == 1)) { #region [ check if LTC Taps are too far apart to continue] if (m_ltcStatus.DifTap > m_substationAlarmDevice.ZDIFTAP) { //set clear alarm MainWindow.WriteMessage($"Control Aborted: LTCs are too far apart [{m_ltcStatus.DifTap}/{m_substationAlarmDevice.ZDIFTAP}]"); } #endregion #region [ Check for ZCONS consecutive delay steps ] if (m_substationInformation.ConsecTap < m_substationAlarmDevice.ZTCONS) { MainWindow.WriteMessage($"Control Delayed: Not enough delays for LTC - [{m_substationInformation.ConsecTap}<{m_substationAlarmDevice.ZTCONS}]"); } else { m_substationInformation.Ntdel = 0; m_substationInformation.ConsecTap = 0; switch (act.ActTxRaise) { case 1: if (m_controlTransformers[0].TapV < m_substationAlarmDevice.ZHITAP) { m_controlTransformers[0].TapV += 1; } break; default: break; } switch (act.ActTxLower) { case 1: if (m_controlTransformers[0].TapV > m_substationAlarmDevice.ZLOTAP) { m_controlTransformers[0].TapV += -1; } break; default: break; } } #endregion } }
internal static Output Execute(Inputs inputData, _InputsMeta inputMeta) { Output output = Output.CreateNew(); DateTime runTime = DateTime.UtcNow; #region [ Message Output ] const bool EnableXmlFileLog = false; const bool EnableMainWindowMessageDisplay = true; #endregion #region [ Environment Settings ] string MainFolderPath = (@"C:\Users\niezj\Documents\dom\ShadowSys118\"); string ActionChannelFolderPath = Path.Combine(MainFolderPath, @"ActionChannel"); string DataFolderPath = Path.Combine(MainFolderPath, @"Data"); string LogFolderPath = Path.Combine(MainFolderPath, @"Log"); string ConfigurationFolderPath = Path.Combine(MainFolderPath, @"ShadowSysConfiguration"); string ProjFolderPath = Path.Combine(MainFolderPath, @"ShadowSysLibrary"); string PythonCodeFolderPath = Path.Combine(MainFolderPath, @"PythonCode"); string CaseFileName = "IEEE_118_Bus.sav"; string CsvOutputsFileName = "Outputs.csv"; string ConfigurationFileName = "Configurations.xml"; string InitSysConfigFrameFileName = "init_SysConfigFrame.xml"; string PrevSysConfigFrameFileName = "prev_SysConfigFrame.xml"; string CaseFilePath = Path.Combine(PythonCodeFolderPath, CaseFileName); string CsvOutputsFilePath = Path.Combine(LogFolderPath, CsvOutputsFileName); string ConfigurationFilePath = Path.Combine(ConfigurationFolderPath, ConfigurationFileName); string InitSysConfigFrameFilePath = Path.Combine(ConfigurationFolderPath, InitSysConfigFrameFileName); string PrevSysConfigFrameFilePath = Path.Combine(ConfigurationFolderPath, PrevSysConfigFrameFileName); #endregion #region [ Update Configurations of Controlled Devices ] VoltVarController frame = new VoltVarController(); // Read System Initial Configuration from XML file if (inputData.ResetSignal != 0) { MainWindow.WriteMessage($"Initialized Local Voltage Controller Test #{inputData.ResetSignal}"); InitSysConfigFrameFileName = $"init_SysConfigFrame_test{inputData.ResetSignal}.xml"; InitSysConfigFrameFilePath = Path.Combine(ConfigurationFolderPath, InitSysConfigFrameFileName); frame = VoltVarController.DeserializeFromXml(InitSysConfigFrameFilePath); File.Delete(PrevSysConfigFrameFilePath); ActionsAdapter initAction = new ActionsAdapter(); frame.ExecuteControl(initAction); } else { if (File.Exists(PrevSysConfigFrameFilePath)) { frame = VoltVarController.DeserializeFromXml(PrevSysConfigFrameFilePath); } else { frame = VoltVarController.DeserializeFromXml(InitSysConfigFrameFilePath); } } #endregion ActionsAdapter action = new ActionsAdapter(); frame.SubstationInformation.ConsecCap += 1; frame.SubstationInformation.ConsecTap += 1; frame.SubstationInformation.Ncdel += 1; frame.SubstationInformation.Ntdel += 1; #region [ Receive Control Decision from LVC ] action.ReadFromEcaInputData(inputData); frame.ExecuteControl(action); #endregion #region [ Pending: Avoid logic conflict before execute control ] #endregion #region [ Run Power Flow Calculation using PSS/E ] // Call Python script to run power flow calculation PythonScripts Python = new PythonScripts(); List <string> outputFrameList = new List <string>(); outputFrameList = Python.RunPythonCmd(Path.Combine(PythonCodeFolderPath, "CalculatePowerFlow.py"), MainFolderPath, CaseFileName, CsvOutputsFileName, inputData.LoadIncrementPercentage, frame.ControlTransformers[0].TapV, frame.ControlCapacitorBanks[0].CapBkrV, frame.ControlCapacitorBanks[1].CapBkrV, frame.ControlCapacitorBanks[0].BusBkrV, frame.ControlCapacitorBanks[1].BusBkrV, 0, // RegionalLoadIncrementPercentage frame.ControlCapacitorBanks[0].CapBkrV, // SnB34 frame.ControlCapacitorBanks[2].CapBkrV, // SnB44 frame.ControlCapacitorBanks[3].CapBkrV, // SnB45 frame.ControlCapacitorBanks[4].CapBkrV, // SnB48 frame.ControlCapacitorBanks[5].CapBkrV, // SnB74 frame.ControlCapacitorBanks[6].CapBkrV // SnB105 ); frame.SerializeToXml(PrevSysConfigFrameFilePath); #endregion #region [ Convert Calculated Values to OutputData ] // Read LVC Measurement Values from python outputs output.OutputData.StateTxTapV = Convert.ToInt16(outputFrameList[0]); output.OutputData.StateSn1CapBkrV = Convert.ToInt16(outputFrameList[1]); output.OutputData.StateSn2CapBkrV = Convert.ToInt16(outputFrameList[2]); output.OutputData.StateSn1BusBkrV = Convert.ToInt16(outputFrameList[3]); output.OutputData.StateSn2BusBkrV = Convert.ToInt16(outputFrameList[4]); output.OutputData.MeasTxVoltV = Convert.ToDouble(outputFrameList[5]); output.OutputData.MeasSn1VoltV = Convert.ToDouble(outputFrameList[6]); output.OutputData.MeasSn2VoltV = Convert.ToDouble(outputFrameList[7]); output.OutputData.MeasTxMwV = Convert.ToDouble(outputFrameList[8]); output.OutputData.MeasTxMvrV = Convert.ToDouble(outputFrameList[9]); output.OutputData.MeasGn1MwV = Convert.ToDouble(outputFrameList[10]); output.OutputData.MeasGn1MvrV = Convert.ToDouble(outputFrameList[11]); output.OutputData.MeasGn2MwV = Convert.ToDouble(outputFrameList[12]); output.OutputData.MeasGn2MvrV = Convert.ToDouble(outputFrameList[13]); // Read RVC Measurement Values from python outputs output.OutputData.StateSnB34CapBkrV = Convert.ToInt16(outputFrameList[14]); output.OutputData.StateSnB44CapBkrV = Convert.ToInt16(outputFrameList[15]); output.OutputData.StateSnB45CapBkrV = Convert.ToInt16(outputFrameList[16]); output.OutputData.StateSnB48CapBkrV = Convert.ToInt16(outputFrameList[17]); output.OutputData.StateSnB74CapBkrV = Convert.ToInt16(outputFrameList[18]); output.OutputData.StateSnB105CapBkrV = Convert.ToInt16(outputFrameList[19]); output.OutputData.MeasB1VoltV = Convert.ToDouble(outputFrameList[20]); output.OutputData.MeasB2VoltV = Convert.ToDouble(outputFrameList[21]); output.OutputData.MeasB3VoltV = Convert.ToDouble(outputFrameList[22]); output.OutputData.MeasB4VoltV = Convert.ToDouble(outputFrameList[23]); output.OutputData.MeasB5VoltV = Convert.ToDouble(outputFrameList[24]); output.OutputData.MeasB6VoltV = Convert.ToDouble(outputFrameList[25]); output.OutputData.MeasB7VoltV = Convert.ToDouble(outputFrameList[26]); output.OutputData.MeasB8VoltV = Convert.ToDouble(outputFrameList[27]); output.OutputData.MeasB9VoltV = Convert.ToDouble(outputFrameList[28]); output.OutputData.MeasB10VoltV = Convert.ToDouble(outputFrameList[29]); output.OutputData.MeasB11VoltV = Convert.ToDouble(outputFrameList[30]); output.OutputData.MeasB12VoltV = Convert.ToDouble(outputFrameList[31]); output.OutputData.MeasB13VoltV = Convert.ToDouble(outputFrameList[32]); output.OutputData.MeasB14VoltV = Convert.ToDouble(outputFrameList[33]); output.OutputData.MeasB15VoltV = Convert.ToDouble(outputFrameList[34]); output.OutputData.MeasB16VoltV = Convert.ToDouble(outputFrameList[35]); output.OutputData.MeasB17VoltV = Convert.ToDouble(outputFrameList[36]); output.OutputData.MeasB18VoltV = Convert.ToDouble(outputFrameList[37]); output.OutputData.MeasB19VoltV = Convert.ToDouble(outputFrameList[38]); output.OutputData.MeasB20VoltV = Convert.ToDouble(outputFrameList[39]); output.OutputData.MeasB21VoltV = Convert.ToDouble(outputFrameList[40]); output.OutputData.MeasB22VoltV = Convert.ToDouble(outputFrameList[41]); output.OutputData.MeasB23VoltV = Convert.ToDouble(outputFrameList[42]); output.OutputData.MeasB24VoltV = Convert.ToDouble(outputFrameList[43]); output.OutputData.MeasB25VoltV = Convert.ToDouble(outputFrameList[44]); output.OutputData.MeasB26VoltV = Convert.ToDouble(outputFrameList[45]); output.OutputData.MeasB27VoltV = Convert.ToDouble(outputFrameList[46]); output.OutputData.MeasB28VoltV = Convert.ToDouble(outputFrameList[47]); output.OutputData.MeasB29VoltV = Convert.ToDouble(outputFrameList[48]); output.OutputData.MeasB30VoltV = Convert.ToDouble(outputFrameList[49]); output.OutputData.MeasB31VoltV = Convert.ToDouble(outputFrameList[50]); output.OutputData.MeasB32VoltV = Convert.ToDouble(outputFrameList[51]); output.OutputData.MeasB33VoltV = Convert.ToDouble(outputFrameList[52]); output.OutputData.MeasB34VoltV = Convert.ToDouble(outputFrameList[53]); output.OutputData.MeasB35VoltV = Convert.ToDouble(outputFrameList[54]); output.OutputData.MeasB36VoltV = Convert.ToDouble(outputFrameList[55]); output.OutputData.MeasB37VoltV = Convert.ToDouble(outputFrameList[56]); output.OutputData.MeasB38VoltV = Convert.ToDouble(outputFrameList[57]); output.OutputData.MeasB39VoltV = Convert.ToDouble(outputFrameList[58]); output.OutputData.MeasB40VoltV = Convert.ToDouble(outputFrameList[59]); output.OutputData.MeasB41VoltV = Convert.ToDouble(outputFrameList[60]); output.OutputData.MeasB42VoltV = Convert.ToDouble(outputFrameList[61]); output.OutputData.MeasB43VoltV = Convert.ToDouble(outputFrameList[62]); output.OutputData.MeasB44VoltV = Convert.ToDouble(outputFrameList[63]); output.OutputData.MeasB45VoltV = Convert.ToDouble(outputFrameList[64]); output.OutputData.MeasB46VoltV = Convert.ToDouble(outputFrameList[65]); output.OutputData.MeasB47VoltV = Convert.ToDouble(outputFrameList[66]); output.OutputData.MeasB48VoltV = Convert.ToDouble(outputFrameList[67]); output.OutputData.MeasB49VoltV = Convert.ToDouble(outputFrameList[68]); output.OutputData.MeasB50VoltV = Convert.ToDouble(outputFrameList[69]); output.OutputData.MeasB51VoltV = Convert.ToDouble(outputFrameList[70]); output.OutputData.MeasB52VoltV = Convert.ToDouble(outputFrameList[71]); output.OutputData.MeasB53VoltV = Convert.ToDouble(outputFrameList[72]); output.OutputData.MeasB54VoltV = Convert.ToDouble(outputFrameList[73]); output.OutputData.MeasB55VoltV = Convert.ToDouble(outputFrameList[74]); output.OutputData.MeasB56VoltV = Convert.ToDouble(outputFrameList[75]); output.OutputData.MeasB57VoltV = Convert.ToDouble(outputFrameList[76]); output.OutputData.MeasB58VoltV = Convert.ToDouble(outputFrameList[77]); output.OutputData.MeasB59VoltV = Convert.ToDouble(outputFrameList[78]); output.OutputData.MeasB60VoltV = Convert.ToDouble(outputFrameList[79]); output.OutputData.MeasB61VoltV = Convert.ToDouble(outputFrameList[80]); output.OutputData.MeasB62VoltV = Convert.ToDouble(outputFrameList[81]); output.OutputData.MeasB63VoltV = Convert.ToDouble(outputFrameList[82]); output.OutputData.MeasB64VoltV = Convert.ToDouble(outputFrameList[83]); output.OutputData.MeasB65VoltV = Convert.ToDouble(outputFrameList[84]); output.OutputData.MeasB66VoltV = Convert.ToDouble(outputFrameList[85]); output.OutputData.MeasB67VoltV = Convert.ToDouble(outputFrameList[86]); output.OutputData.MeasB68VoltV = Convert.ToDouble(outputFrameList[87]); output.OutputData.MeasB69VoltV = Convert.ToDouble(outputFrameList[88]); output.OutputData.MeasB70VoltV = Convert.ToDouble(outputFrameList[89]); output.OutputData.MeasB71VoltV = Convert.ToDouble(outputFrameList[90]); output.OutputData.MeasB72VoltV = Convert.ToDouble(outputFrameList[91]); output.OutputData.MeasB73VoltV = Convert.ToDouble(outputFrameList[92]); output.OutputData.MeasB74VoltV = Convert.ToDouble(outputFrameList[93]); output.OutputData.MeasB75VoltV = Convert.ToDouble(outputFrameList[94]); output.OutputData.MeasB76VoltV = Convert.ToDouble(outputFrameList[95]); output.OutputData.MeasB77VoltV = Convert.ToDouble(outputFrameList[96]); output.OutputData.MeasB78VoltV = Convert.ToDouble(outputFrameList[97]); output.OutputData.MeasB79VoltV = Convert.ToDouble(outputFrameList[98]); output.OutputData.MeasB80VoltV = Convert.ToDouble(outputFrameList[99]); output.OutputData.MeasB81VoltV = Convert.ToDouble(outputFrameList[100]); output.OutputData.MeasB82VoltV = Convert.ToDouble(outputFrameList[101]); output.OutputData.MeasB83VoltV = Convert.ToDouble(outputFrameList[102]); output.OutputData.MeasB84VoltV = Convert.ToDouble(outputFrameList[103]); output.OutputData.MeasB85VoltV = Convert.ToDouble(outputFrameList[104]); output.OutputData.MeasB86VoltV = Convert.ToDouble(outputFrameList[105]); output.OutputData.MeasB87VoltV = Convert.ToDouble(outputFrameList[106]); output.OutputData.MeasB88VoltV = Convert.ToDouble(outputFrameList[107]); output.OutputData.MeasB89VoltV = Convert.ToDouble(outputFrameList[108]); output.OutputData.MeasB90VoltV = Convert.ToDouble(outputFrameList[109]); output.OutputData.MeasB91VoltV = Convert.ToDouble(outputFrameList[110]); output.OutputData.MeasB92VoltV = Convert.ToDouble(outputFrameList[111]); output.OutputData.MeasB93VoltV = Convert.ToDouble(outputFrameList[112]); output.OutputData.MeasB94VoltV = Convert.ToDouble(outputFrameList[113]); output.OutputData.MeasB95VoltV = Convert.ToDouble(outputFrameList[114]); output.OutputData.MeasB96VoltV = Convert.ToDouble(outputFrameList[115]); output.OutputData.MeasB97VoltV = Convert.ToDouble(outputFrameList[116]); output.OutputData.MeasB98VoltV = Convert.ToDouble(outputFrameList[117]); output.OutputData.MeasB99VoltV = Convert.ToDouble(outputFrameList[118]); output.OutputData.MeasB100VoltV = Convert.ToDouble(outputFrameList[119]); output.OutputData.MeasB101VoltV = Convert.ToDouble(outputFrameList[120]); output.OutputData.MeasB102VoltV = Convert.ToDouble(outputFrameList[121]); output.OutputData.MeasB103VoltV = Convert.ToDouble(outputFrameList[122]); output.OutputData.MeasB104VoltV = Convert.ToDouble(outputFrameList[123]); output.OutputData.MeasB105VoltV = Convert.ToDouble(outputFrameList[124]); output.OutputData.MeasB106VoltV = Convert.ToDouble(outputFrameList[125]); output.OutputData.MeasB107VoltV = Convert.ToDouble(outputFrameList[126]); output.OutputData.MeasB108VoltV = Convert.ToDouble(outputFrameList[127]); output.OutputData.MeasB109VoltV = Convert.ToDouble(outputFrameList[128]); output.OutputData.MeasB110VoltV = Convert.ToDouble(outputFrameList[129]); output.OutputData.MeasB111VoltV = Convert.ToDouble(outputFrameList[130]); output.OutputData.MeasB112VoltV = Convert.ToDouble(outputFrameList[131]); output.OutputData.MeasB113VoltV = Convert.ToDouble(outputFrameList[132]); output.OutputData.MeasB114VoltV = Convert.ToDouble(outputFrameList[133]); output.OutputData.MeasB115VoltV = Convert.ToDouble(outputFrameList[134]); output.OutputData.MeasB116VoltV = Convert.ToDouble(outputFrameList[135]); output.OutputData.MeasB117VoltV = Convert.ToDouble(outputFrameList[136]); output.OutputData.MeasB118VoltV = Convert.ToDouble(outputFrameList[137]); output.OutputData.StateLoad = Convert.ToDouble(inputData.LoadIncrementPercentage); #endregion try { // TODO: Implement your algorithm here... // You can also write messages to the main window: #region [ Write Xml Log File ] if (EnableXmlFileLog) { string ConfigFrameXMLLogFileName = $"Log_SysConfigFrame_{DateTime.UtcNow:yyMMdd_HHmmss}.xml"; string ConfigFrameXMLLogFilePath = Path.Combine(LogFolderPath, ConfigFrameXMLLogFileName); frame.SerializeToXml(ConfigFrameXMLLogFilePath); } #endregion #region [ Write openECA Client Windows Message ] if (EnableMainWindowMessageDisplay) { StringBuilder _message = new StringBuilder(); _message.AppendLine($" ================ ShadowSys Analytics ================"); _message.AppendLine($" Run Time: {runTime:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" Completion Time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" InputData Timestamp: {inputMeta.LoadIncrementPercentage.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); //_message.AppendLine($" ------------------ CsvInputAdapter ------------------ "); //_message.AppendLine($" LoadIncrementPercentage: {inputData.LoadIncrementPercentage:0.0000} %"); //_message.AppendLine($" ------------------- ActionChannel ------------------- "); //_message.AppendLine($" ActTxRaise: {inputData.ActTxRaise}"); //_message.AppendLine($" ActTxLower: {inputData.ActTxLower}"); //_message.AppendLine($" ActSn1Close: {inputData.ActSn1Close}"); //_message.AppendLine($" ActSn1Trip: {inputData.ActSn1Trip}"); //_message.AppendLine($" ActSn2Close: {inputData.ActSn2Close}"); //_message.AppendLine($" ActSn2Trip: {inputData.ActSn2Trip}"); //_message.AppendLine($" ---------------- MeasurementChannel ----------------- "); //_message.AppendLine($" MeasTxVoltV: {output.OutputData.MeasTxVoltV:0.000} Volts"); //_message.AppendLine($" MeasSn1VoltV: {output.OutputData.MeasSn1VoltV:0.000} Volts"); //_message.AppendLine($" MeasSn2VoltV: {output.OutputData.MeasSn2VoltV:0.000} Volts"); //_message.AppendLine($" MeasTxMwV: {output.OutputData.MeasTxMwV:0.000} MW"); //_message.AppendLine($" MeasTxMvrV: {output.OutputData.MeasTxMvrV:0.000} MVar"); //_message.AppendLine($" MeasGn1MwV: {output.OutputData.MeasGn1MwV:0.000} MW"); //_message.AppendLine($" MeasGn1MvrV: {output.OutputData.MeasGn1MvrV:0.000} MVar"); //_message.AppendLine($" MeasGn2MwV: {output.OutputData.MeasGn2MwV:0.000} MW"); //_message.AppendLine($" MeasGn2MvrV: {output.OutputData.MeasGn2MvrV:0.000} MVar"); //_message.AppendLine($" ------------------- StateChannel -------------------- "); _message.AppendLine($" StateLoad: {output.OutputData.StateLoad} "); //_message.AppendLine($" StateTxTapV: {output.OutputData.StateTxTapV}"); //_message.AppendLine($" StateSn1CapBkrV: {output.OutputData.StateSn1CapBkrV}"); //_message.AppendLine($" StateSn2CapBkrV: {output.OutputData.StateSn2CapBkrV}"); //_message.AppendLine($" StateSn1BusBkrV: {output.OutputData.StateSn1BusBkrV}"); //_message.AppendLine($" StateSn2BusBkrV: {output.OutputData.StateSn2BusBkrV}"); //_message.AppendLine($" StateSnB34CapBkrV: {output.OutputData.StateSnB34CapBkrV}"); //_message.AppendLine($" StateSnB44CapBkrV: {output.OutputData.StateSnB44CapBkrV}"); //_message.AppendLine($" StateSnB45CapBkrV: {output.OutputData.StateSnB45CapBkrV}"); //_message.AppendLine($" StateSnB48CapBkrV: {output.OutputData.StateSnB48CapBkrV}"); //_message.AppendLine($" StateSnB74CapBkrV: {output.OutputData.StateSnB74CapBkrV}"); //_message.AppendLine($" StateSnB105CapBkrV: {output.OutputData.StateSnB105CapBkrV}"); _message.AppendLine($" ------------------ RVCActionChannel ----------------- "); _message.AppendLine($" * : | 34 | 44 | 45 | 48 | 74 | 105 |"); _message.AppendLine($" ActSnB*Close: | {inputData.ActSnB34Close} | {inputData.ActSnB44Close} | {inputData.ActSnB45Close} | {inputData.ActSnB48Close} | {inputData.ActSnB74Close} | {inputData.ActSnB105Close} |"); _message.AppendLine($" ActSnB*Trip: | {inputData.ActSnB34Trip} | {inputData.ActSnB44Trip} | {inputData.ActSnB45Trip} | {inputData.ActSnB48Trip} | {inputData.ActSnB74Trip} | {inputData.ActSnB105Trip} |"); _message.AppendLine($" StateSnB*CapBkrV: | {output.OutputData.StateSnB34CapBkrV} | {output.OutputData.StateSnB44CapBkrV} | {output.OutputData.StateSnB45CapBkrV} | {output.OutputData.StateSnB48CapBkrV} | {output.OutputData.StateSnB74CapBkrV} | {output.OutputData.StateSnB105CapBkrV} |"); _message.AppendLine($" ====================================================="); MainWindow.WriteMessage(_message.ToString()); } #endregion } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } return(output); }
internal static Output Execute(Inputs inputData, _InputsMeta inputMeta) { Output output = Output.CreateNew(); DateTime runTime = DateTime.UtcNow; try { // TODO: Implement your algorithm here... // You can also write messages to the main window: #region [ Message Output ] bool EnableVoltageControlsMessageOutput = true; #endregion #region [ Environment Settings ] string MainFolderPath = (@"C:\Users\niezj\Documents\dom\LVC118\"); string DataFolderPath = Path.Combine(MainFolderPath, @"Data"); string LogFolderPath = Path.Combine(MainFolderPath, @"Log"); string ActionChannelFolderPath = Path.Combine(MainFolderPath, @"ActionChannel"); string[] LogFileNameList = Directory.GetFiles(LogFolderPath, "CtrlDecisionLog_*.xml"); string LogFileName = $"CtrlDecisionLog_{LogFileNameList.Length + 1:000}_{DateTime.UtcNow:yyyyMMdd_HHmmssfff}.xml"; string LogFilePath = Path.Combine(LogFolderPath, LogFileName); #endregion VoltVarControllerAdapter vca; VoltVarController PreviousFrame; /* * Testing Files Configurations * test1.xml - Verify if the controller can RAISE both transformers' taps when voltages on both buses are lower than the limit (VLLIM = 114.5kV) * test2.xml - Verify if the controller is still able to operate (VLLIM = 114.5kV), when the other transformer's tap has reached the highest tap position (16) * test3.xml - Verify if the controller can switch ON the capacitor bank when the voltage in Pamplin substation reach the lower limit (Clov = 113.5kV) * test4.xml - Verify if the controller can switch OFF the capacitor bank when the voltage in Crewe substation reach the higher limit (Chiv = 119.7kV) */ string configurationPathName = (@"C:\Users\niezj\Documents\dom\ShadowSys118\ShadowSysConfiguration\prev_SysConfigFrame.xml"); vca = new VoltVarControllerAdapter() { ConfigurationPathName = configurationPathName }; vca.Initialize(); PreviousFrame = new VoltVarController(); PreviousFrame = VoltVarController.DeserializeFromXml(configurationPathName); // Extract inputData from openECA then Call SubRoutine vca.GetData(inputData, inputMeta, PreviousFrame); // Logging control decision to *.xml files vca.SerializeToXml(LogFilePath); // Store Current vca.InputFrame to previous.InputFrame for the next InputFrame //PreviousFrame = vca.InputFrame; //PreviousFrame.SerializeToXml(@"C:\Users\niezj\Documents\dom\ShadowSys118\ShadowSysConfiguration\ctrl_SysConfigFrame.xml"); #region [ Mimic an ActionChannel ] ActionsAdapter actChannel = new ActionsAdapter(); bool actFlag = false; if (vca.InputFrame.ControlTransformers[0].TapV != PreviousFrame.ControlTransformers[0].TapV) { actFlag = true; if (vca.InputFrame.ControlTransformers[0].TapV > PreviousFrame.ControlTransformers[0].TapV) { actChannel.ActTxRaise = 1; } else { actChannel.ActTxLower = 1; } } if (vca.InputFrame.ControlCapacitorBanks[0].CapBkrV != PreviousFrame.ControlCapacitorBanks[0].CapBkrV) { actFlag = true; switch (vca.InputFrame.ControlCapacitorBanks[0].CapBkrV) { case 1: actChannel.ActSn1Close = 1; break; case 0: actChannel.ActSn1Trip = 1; break; default: break; } } if (vca.InputFrame.ControlCapacitorBanks[1].CapBkrV != PreviousFrame.ControlCapacitorBanks[1].CapBkrV) { actFlag = true; switch (vca.InputFrame.ControlCapacitorBanks[1].CapBkrV) { case 1: actChannel.ActSn2Close = 1; break; case 0: actChannel.ActSn2Trip = 1; break; default: break; } } if (actFlag) { actChannel.SerializeToXml(Path.Combine(ActionChannelFolderPath, "act.xml")); // Local //actChannel.SerializeToXml(@"C:\Users\niezj\Documents\dom\ShadowSys118\ActionChannel\act.xml"); // External } #endregion #region [ Update Timestamps for Control Signals ] output.OutputData.ActTxRaise = actChannel.ActTxRaise; output.OutputData.ActTxLower = actChannel.ActTxLower; output.OutputData.ActSn1Close = actChannel.ActSn1Close; output.OutputData.ActSn1Trip = actChannel.ActSn1Trip; output.OutputData.ActSn2Close = actChannel.ActSn2Close; output.OutputData.ActSn2Trip = actChannel.ActSn2Trip; output.OutputMeta.ActTxRaise = UpdateTime(output.OutputMeta.ActTxRaise); output.OutputMeta.ActTxLower = UpdateTime(output.OutputMeta.ActTxLower); output.OutputMeta.ActSn1Close = UpdateTime(output.OutputMeta.ActSn1Close); output.OutputMeta.ActSn1Trip = UpdateTime(output.OutputMeta.ActSn1Trip); output.OutputMeta.ActSn2Close = UpdateTime(output.OutputMeta.ActSn2Close); output.OutputMeta.ActSn2Trip = UpdateTime(output.OutputMeta.ActSn2Trip); #endregion #region [ Write openECA Client Windows Message] if (EnableVoltageControlsMessageOutput) { StringBuilder _message = new StringBuilder(); _message.AppendLine($" ================= LVC118 Analytics ================== "); _message.AppendLine($" Run Time: {runTime:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" Completion Time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" InputData Timestamp: {inputMeta.MeasGn1MvrV.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" OutputData Timestamp: {output.OutputMeta.ActTxRaise.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); //_message.AppendLine($" ------------------ CsvInputAdapter ------------------ "); _message.AppendLine($" ------------------- ActionChannel ------------------- "); _message.AppendLine($" ActTxRaise: {output.OutputData.ActTxRaise}"); _message.AppendLine($" ActTxLower: {output.OutputData.ActTxLower}"); _message.AppendLine($" ActSn1Close: {output.OutputData.ActSn1Close}"); _message.AppendLine($" ActSn1Trip: {output.OutputData.ActSn1Trip}"); _message.AppendLine($" ActSn2Close: {output.OutputData.ActSn2Close}"); _message.AppendLine($" ActSn2Trip: {output.OutputData.ActSn2Trip}"); _message.AppendLine($" ---------------- MeasurementChannel ----------------- "); _message.AppendLine($" MeasTxVoltV: {inputData.MeasTxVoltV:0.000} Volts"); _message.AppendLine($" MeasSn1VoltV: {inputData.MeasSn1VoltV:0.000} Volts"); _message.AppendLine($" MeasSn2VoltV: {inputData.MeasSn2VoltV:0.000} Volts"); _message.AppendLine($" MeasTxMwV: {inputData.MeasTxMwV:0.000} MW"); _message.AppendLine($" MeasTxMvrV: {inputData.MeasTxMvrV:0.000} MVar"); _message.AppendLine($" MeasGn1MwV: {inputData.MeasGn1MwV:0.000} MW"); _message.AppendLine($" MeasGn1MvrV: {inputData.MeasGn1MvrV:0.000} MVar"); _message.AppendLine($" MeasGn2MwV: {inputData.MeasGn2MwV:0.000} MW"); _message.AppendLine($" MeasGn2MvrV: {inputData.MeasGn2MvrV:0.000} MVar"); _message.AppendLine($" ------------------- StateChannel -------------------- "); _message.AppendLine($" StateTxTapV: {inputData.StateTxTapV}"); _message.AppendLine($" StateSn1CapBkrV: {inputData.StateSn1CapBkrV}"); _message.AppendLine($" StateSn2CapBkrV: {inputData.StateSn2CapBkrV}"); _message.AppendLine($" StateSn1BusBkrV: {inputData.StateSn1BusBkrV}"); _message.AppendLine($" StateSn2BusBkrV: {inputData.StateSn2BusBkrV}"); _message.AppendLine($" -------------- Control Decision Message ------------- "); _message.AppendLine($" {vca.LogMessage}"); _message.AppendLine($" ===================================================== "); MainWindow.WriteMessage(_message.ToString()); } #endregion } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } return(output); }
internal static Output Execute(Inputs inputData, _InputsMeta inputMeta) { Output output = Output.CreateNew(); DateTime runTime = DateTime.UtcNow; #region [ Message Output ] const bool enableXmlFileLog = false; const bool enableMainWindowMessageDisplay = true; const bool enableVoltageControlsMessageOutput = true; #endregion #region [ Environment Settings ] string mainFolderPath = (@"C:\Users\jxhan\Desktop\openECA20171024\RVC118-master\"); string libraryFolderPath = Path.Combine(mainFolderPath, @"RVC118Library"); string treeModelsFolderPath = Path.Combine(libraryFolderPath, @"DecisionTreeModels"); const double systemBaseVoltage = 138000; #endregion #region [ Voltage Security Assessment ] RegionalVoltageControllerAdapter RVCAdapter = new RegionalVoltageControllerAdapter() { BaseVoltage = systemBaseVoltage, InputFrame = inputData, TrainedTreeFolder = treeModelsFolderPath }; RVCAdapter.Initialize(); RVCAdapter.AssessVoltageSecurity(); #endregion #region [ Search for Control Decisions ] if (RVCAdapter.CurrentSecurityStatus == "INSECURE") //if (true) { RVCAdapter.AcquireCtrlDecisionsList(); RVCAdapter.SelectPriorCtrlDecision(); if (RVCAdapter.SelectedDecision.Index != -1) { #region [ Output Control Signals to openECA ] ActionsAdapter actChannel = new ActionsAdapter() { ActSnB34Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[0] > RVCAdapter.CapBankCombinationArray[0]) ? (short)1 : (short)0, ActSnB44Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[1] > RVCAdapter.CapBankCombinationArray[1]) ? (short)1 : (short)0, ActSnB45Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[2] > RVCAdapter.CapBankCombinationArray[2]) ? (short)1 : (short)0, ActSnB48Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[3] > RVCAdapter.CapBankCombinationArray[3]) ? (short)1 : (short)0, ActSnB74Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[4] > RVCAdapter.CapBankCombinationArray[4]) ? (short)1 : (short)0, ActSnB105Close = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[5] > RVCAdapter.CapBankCombinationArray[5]) ? (short)1 : (short)0, ActSnB34Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[0] < RVCAdapter.CapBankCombinationArray[0]) ? (short)1 : (short)0, ActSnB44Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[1] < RVCAdapter.CapBankCombinationArray[1]) ? (short)1 : (short)0, ActSnB45Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[2] < RVCAdapter.CapBankCombinationArray[2]) ? (short)1 : (short)0, ActSnB48Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[3] < RVCAdapter.CapBankCombinationArray[3]) ? (short)1 : (short)0, ActSnB74Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[4] < RVCAdapter.CapBankCombinationArray[4]) ? (short)1 : (short)0, ActSnB105Trip = (RVCAdapter.SelectedDecision.CtrlCapBankCominationArray[5] < RVCAdapter.CapBankCombinationArray[5]) ? (short)1 : (short)0 }; output.OutputData.ActSnB34Close = actChannel.ActSnB34Close; output.OutputData.ActSnB44Close = actChannel.ActSnB44Close; output.OutputData.ActSnB45Close = actChannel.ActSnB45Close; output.OutputData.ActSnB48Close = actChannel.ActSnB48Close; output.OutputData.ActSnB74Close = actChannel.ActSnB74Close; output.OutputData.ActSnB105Close = actChannel.ActSnB105Close; output.OutputData.ActSnB34Trip = actChannel.ActSnB34Trip; output.OutputData.ActSnB44Trip = actChannel.ActSnB44Trip; output.OutputData.ActSnB45Trip = actChannel.ActSnB45Trip; output.OutputData.ActSnB48Trip = actChannel.ActSnB48Trip; output.OutputData.ActSnB74Trip = actChannel.ActSnB74Trip; output.OutputData.ActSnB105Trip = actChannel.ActSnB105Trip; //output.OutputData.ActSnB34Close = 0; //output.OutputData.ActSnB44Close = 0; //output.OutputData.ActSnB45Close = 0; //output.OutputData.ActSnB48Close = 0; //output.OutputData.ActSnB74Close = 0; //output.OutputData.ActSnB105Close = 0; //output.OutputData.ActSnB34Trip = 0; //output.OutputData.ActSnB44Trip = 0; //output.OutputData.ActSnB45Trip = 0; //output.OutputData.ActSnB48Trip = 0; //output.OutputData.ActSnB74Trip = 0; //output.OutputData.ActSnB105Trip = 0; #endregion #region [ Update Timestamps for Control Signals ] output.OutputMeta.ActSnB34Close = UpdateTime(output.OutputMeta.ActSnB34Close); output.OutputMeta.ActSnB44Close = UpdateTime(output.OutputMeta.ActSnB44Close); output.OutputMeta.ActSnB45Close = UpdateTime(output.OutputMeta.ActSnB45Close); output.OutputMeta.ActSnB48Close = UpdateTime(output.OutputMeta.ActSnB48Close); output.OutputMeta.ActSnB74Close = UpdateTime(output.OutputMeta.ActSnB74Close); output.OutputMeta.ActSnB105Close = UpdateTime(output.OutputMeta.ActSnB105Close); output.OutputMeta.ActSnB34Trip = UpdateTime(output.OutputMeta.ActSnB34Trip); output.OutputMeta.ActSnB44Trip = UpdateTime(output.OutputMeta.ActSnB44Trip); output.OutputMeta.ActSnB45Trip = UpdateTime(output.OutputMeta.ActSnB45Trip); output.OutputMeta.ActSnB48Trip = UpdateTime(output.OutputMeta.ActSnB48Trip); output.OutputMeta.ActSnB74Trip = UpdateTime(output.OutputMeta.ActSnB74Trip); output.OutputMeta.ActSnB105Trip = UpdateTime(output.OutputMeta.ActSnB105Trip); #endregion } else { MainWindow.WriteWarning($"*** Error 666: No capbank ctrldecision is found... ***"); } } #endregion try { // TODO: Implement your algorithm here... // You can also write messages to the main window: #region [ Write openECA Client Windows Message] if (enableVoltageControlsMessageOutput) { StringBuilder _message = new StringBuilder(); _message.AppendLine($" ================= RVC118 Analytics ================== "); _message.AppendLine($" Run Time: {runTime:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" Completion Time: {DateTime.UtcNow:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" InputData Timestamp: {inputMeta.MeasB1VoltV.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); _message.AppendLine($" OutputData Timestamp: {output.OutputMeta.ActSnB34Close.Timestamp:yyyy-MM-dd HH:mm:ss.fff}"); //_message.AppendLine($" ------------------ CsvInputAdapter ------------------ "); //_message.AppendLine($" ------------------- ActionChannel ------------------- "); //_message.AppendLine($" ActSnB34Close: {output.OutputData.ActSnB34Close}"); //_message.AppendLine($" ActSnB34Trip: {output.OutputData.ActSnB34Trip}"); //_message.AppendLine($" ---------------- MeasurementChannel ----------------- "); //_message.AppendLine($" MeasB1VoltV: {inputData.MeasB1VoltV} Volts"); _message.AppendLine($" ------------------- StateChannel -------------------- "); _message.AppendLine($" StateSnB34CapBkrV: {inputData.StateSnB34CapBkrV}"); _message.AppendLine($" ------------- Regional Voltage Controller ----------- "); //_message.AppendLine($" NumOfBuses: {RVCAdapter.NumOfBuses}"); //_message.AppendLine($" NumOfCapBanks: {RVCAdapter.NumOfCapBanks}"); _message.AppendLine($" StateSnB*CapBkrV: | {inputData.StateSnB34CapBkrV} | {inputData.StateSnB44CapBkrV} | {inputData.StateSnB45CapBkrV} | {inputData.StateSnB48CapBkrV} | {inputData.StateSnB74CapBkrV} | {inputData.StateSnB105CapBkrV} |"); _message.AppendLine($" CapBankCombinationArray: | {RVCAdapter.CapBankCombinationArray[0]} | {RVCAdapter.CapBankCombinationArray[1]} | {RVCAdapter.CapBankCombinationArray[2]} | {RVCAdapter.CapBankCombinationArray[3]} | {RVCAdapter.CapBankCombinationArray[4]} | {RVCAdapter.CapBankCombinationArray[5]} |"); _message.AppendLine($" CapBankCombinationIndex: {RVCAdapter.CapBankCombinationIndex}"); _message.AppendLine($" AssessmentResult: {RVCAdapter.CurrentSecurityStatus}"); _message.AppendLine($" VSA.TreeIndex: {RVCAdapter.PreventiveVoltageSecurityAssessor.TreeIndex}"); _message.AppendLine($" VSA.TreeFilePath: {RVCAdapter.PreventiveVoltageSecurityAssessor.TreeFilePath}"); _message.AppendLine($" -------------- Control Decision Message ------------- "); _message.AppendLine($" Available CtrlDecisions: {RVCAdapter.CtrlDecisionList.Count}"); _message.AppendLine($" Selected CtrlDecision: {RVCAdapter.SelectedDecision.Index}"); _message.AppendLine($"CtrlDecision ActionsCount: {RVCAdapter.SelectedDecision.ActionsCount}"); _message.AppendLine($" CtrlDecision Message: {RVCAdapter.SelectedDecision.CtrlActionMessage}"); _message.AppendLine($" ===================================================== "); MainWindow.WriteMessage(_message.ToString()); } #endregion } catch (Exception ex) { // Display exceptions to the main window MainWindow.WriteError(new InvalidOperationException($"Algorithm exception: {ex.Message}", ex)); } return(output); }
public ActionsItemClickListener(ExamplesActivity outerInstance, ActionsAdapter actionsAdapter) { this.OuterInstance = outerInstance; this.ActionsAdapter = actionsAdapter; }
public void ExecuteControl(ActionsAdapter act) { ExecuteLTCControl(act); ExecuteCapBankControl(act); ExecuteRegionalCapBankControl(act); }
private void ExecuteRegionalCapBankControl(ActionsAdapter act) { switch (act.ActSnB34Close) { case 1: m_controlCapacitorBanks[0].CapBkrV = 1; break; default: break; } switch (act.ActSnB34Trip) { case 1: m_controlCapacitorBanks[0].CapBkrV = 0; break; default: break; } switch (act.ActSnB44Close) { case 1: m_controlCapacitorBanks[2].CapBkrV = 1; break; default: break; } switch (act.ActSnB44Trip) { case 1: m_controlCapacitorBanks[2].CapBkrV = 0; break; default: break; } switch (act.ActSnB45Close) { case 1: m_controlCapacitorBanks[3].CapBkrV = 1; break; default: break; } switch (act.ActSnB45Trip) { case 1: m_controlCapacitorBanks[3].CapBkrV = 0; break; default: break; } switch (act.ActSnB48Close) { case 1: m_controlCapacitorBanks[4].CapBkrV = 1; break; default: break; } switch (act.ActSnB48Trip) { case 1: m_controlCapacitorBanks[4].CapBkrV = 0; break; default: break; } switch (act.ActSnB74Close) { case 1: m_controlCapacitorBanks[5].CapBkrV = 1; break; default: break; } switch (act.ActSnB74Trip) { case 1: m_controlCapacitorBanks[5].CapBkrV = 0; break; default: break; } switch (act.ActSnB105Close) { case 1: m_controlCapacitorBanks[6].CapBkrV = 1; break; default: break; } switch (act.ActSnB105Trip) { case 1: m_controlCapacitorBanks[6].CapBkrV = 0; break; default: break; } }