7#include <boost/serialization/export.hpp>
11#include "../System/SystemModule.h"
12#include "../Scheduler/Scheduler.h"
13#include "../Scheduler/CommunicationPlace.h"
14#include "../Crew/OperatorDM.h"
15#include "../Crew/TimeConstrainedModule.h"
16#include "../HWReliability/HWReliabilityModule.h"
17#include "../Global/SimulationContext.h"
19#include "../../HCL/hcl/HCLEngine.h"
21#include <boost/archive/binary_oarchive.hpp>
22#include <boost/archive/binary_iarchive.hpp>
48 string indicator_file_name;
50 indicator_file_name +=
"ControlPanel.txt";
52 ifstream fin_ind(indicator_file_name.c_str(), ios::in);
54 if (!fin_ind.is_open()) {
55 cout <<
"File: " << indicator_file_name <<
" can not be opened" << endl;
56 ofstream fout(
"err messages.txt", ios::app);
57 fout <<
r5pars_.timesno <<
" File: " << indicator_file_name <<
" can not be opened\n";
100 vector<unique_ptr<AlarmParameter>>::iterator ap_itr;
101 vector<unique_ptr<AlarmComponent>>::iterator ac_itr;
102 vector<unique_ptr<AlarmTwoParameterDifference>>::iterator apd_itr;
103 int old_state, new_state;
105 double weight_new_alarm = 0.0;
106 bool new_alarm_generated =
false;
107 bool sequence_should_be_terminated =
false;
108 string sequence_terminate_alarms;
109 string alarm_name, sub_name;
110 sequence_terminate_alarms =
"Sequence_terminated_by_alarm:_";
118 if (old_state != new_state) {
130 new_alarm_generated =
true;
132 if (alarm_name.size() >= 9) {
133 sub_name = alarm_name.substr(0, 9);
134 if (sub_name ==
"A_ENDSEQ_") {
135 sequence_should_be_terminated =
true;
136 sequence_terminate_alarms += alarm_name;
137 sequence_terminate_alarms +=
':';
144 old_state = (*ac_itr)->getDisplayedAlarmState();
148 if (old_state != new_state) {
155 new_alarm_generated =
true;
157 if (alarm_name.size() >= 9) {
158 sub_name = alarm_name.substr(0, 9);
159 if (sub_name ==
"A_ENDSEQ_") {
160 sequence_should_be_terminated =
true;
161 sequence_terminate_alarms += alarm_name;
162 sequence_terminate_alarms +=
':';
169 old_state = (*apd_itr)->getDisplayedAlarmState();
173 if (old_state != new_state) {
180 new_alarm_generated =
true;
182 if (alarm_name.size() >= 9) {
183 sub_name = alarm_name.substr(0, 9);
184 if (sub_name ==
"A_ENDSEQ_") {
185 sequence_should_be_terminated =
true;
186 sequence_terminate_alarms += alarm_name;
187 sequence_terminate_alarms +=
':';
194 if (sequence_should_be_terminated) {
217 SystemDisplay *_system_display, *_system_display1, *_system_display2;
230 double act_probability, control_value;
231 bool is_a_maneuver_action =
false;
232 bool is_FT_action =
false;
233 string str, sub_action_name;
236 int functional_state;
241 str = action_elem->getActionName();
242 if (str.size() > 9) {
243 sub_action_name = str.substr(0, 9);
244 if (sub_action_name ==
"MANEUVER_") {
245 is_a_maneuver_action =
true;
248 if (is_a_maneuver_action && action_elem->getIntendedReceiver()
250 action_elem->setIntendedReceiver(action_elem->getSender());
252 action_elem->setProbability(1.0);
257 control_value = action_elem->getControlValue();
265 action_elem->setIntendedReceiver(action_elem->getSender());
267 action_elem->setProbability(1.0);
276 str =
"Successful Recovery (probability = ";
277 str += to_string(act_probability);
288 str =
"Failure of Recovery (probability = ";
289 str += to_string(1.0 - act_probability);
300 if (action_elem->getDisplayName() ==
"FAIL_RECOVERY") {
305 control_value = action_elem->getControlValue();
314 action_elem->setIntendedReceiver(action_elem->getSender());
316 action_elem->setProbability(1.0);
320 action_elem->setIntendedReceiver(action_elem->getSender());
322 action_elem->setProbability(1.0);
324 ofstream fout(
"err messages.txt", ios::app);
325 cout <<
"ControlPanel::executeRequestToPlant: Action: " << action_elem->getActionName()
326 <<
" can not be recognized" << endl;
327 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Action: " << action_elem->getActionName()
328 <<
" can not be recognized\n";
341 is_a_maneuver_action =
true;
345 is_a_maneuver_action =
false;
346 is_FT_action =
false;
349 if (hw_elem->getFunctionalState() ==
sim::State::Failed && !is_a_maneuver_action && !is_FT_action) {
352 if (_system_control != 0) {
357 hw_elem->getControlValue());
359 ofstream fout(
"err messages.txt", ios::app);
360 cout <<
"ControlPanel::executeRequestToPlant: HW_reliability: "
361 << hw_elem->getCorrespondingComponentNameOfControl() <<
" can not be recognized" << endl;
362 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: HW_reliability: "
363 << hw_elem->getCorrespondingComponentNameOfControl() <<
" can not be recognized\n";
370 string topNodeName = hw_elem->getDisplayName();
374 if (ft->getHclEngine()->isFTDefined(hw_elem->getCorrespondingComponentNameOfControl())) {
375 ft->getHclEngine()->fixEvent(hw_elem->getCorrespondingComponentNameOfControl(), hw_elem->getControlValue());
381 ofstream fout(
"err messages.txt", ios::app);
382 cout <<
"ControlPanel::executeRequestToPlant: HW_reliability: "
383 << hw_elem->getCorrespondingComponentNameOfControl() <<
" basic node cannot be found in " << hw_elem->getDisplayName()
385 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: HW_reliability: "
386 << hw_elem->getCorrespondingComponentNameOfControl() <<
" basic node cannot be found in "<< hw_elem->getDisplayName()
394 ofstream fout(
"err messages.txt", ios::app);
395 cout <<
"ControlPanel::executeRequestToPlant: HW_reliability: "
396 << hw_elem->getCorrespondingComponentNameOfControl() <<
" can not be recognized" << endl;
397 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: HW_reliability: "
398 << hw_elem->getCorrespondingComponentNameOfControl() <<
" can not be recognized\n";
404 }
else if (is_a_maneuver_action) {
410 control_value = hw_elem->getControlValue();
421 if (hw_elem->getFunctionalState()
424 act_probability = hw_elem->calculateProbability();
425 hw_elem->setProbability(act_probability);
442 control_value = hw_elem->getControlValue();
450 }
else if (hw_elem->getFunctionalState()
454 ofstream fout(
"err messages.txt", ios::app);
455 cout <<
"ControlPanel::executeRequestToPlant: HW_reliability: manueuval control 0 "
456 << hw_elem->getDisplayName() <<
" has unknown functional state" << endl;
457 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: HW_reliability: manueuval control 0 "
458 << hw_elem->getDisplayName() <<
" has unknown functional state\n";
466 ofstream fout(
"err messages.txt", ios::app);
467 cout <<
"ControlPanel::executeRequestToPlant: HW_reliability: manueuval control "
468 << hw_elem->getDisplayName() <<
" can not be recognized" << endl;
469 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: HW_reliability: manueuval control "
470 << hw_elem->getDisplayName() <<
" can not be recognized\n";
483 if (_system_display == 0) {
486 if (_system_display != 0) {
491 cs_elem->setIntendedReceiver(cs_elem->getSender());
493 cs_elem->setProbability(1.0);
495 ofstream fout(
"err messages.txt", ios::app);
496 cout <<
"ControlPanel::executeRequestToPlant: Component State: Incorrect display type " <<
static_cast<int>(display_type)
499 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Component State: Incorrect display type "
500 <<
static_cast<int>(display_type)
509 ofstream fout(
"err messages.txt", ios::app);
510 cout <<
"ControlPanel::executeRequestToPlant: Component State: "
511 << cs_elem->getCorrespondingSystemParameterName() <<
" can not be recognized" << endl;
512 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Component State: "
513 << cs_elem->getCorrespondingSystemParameterName() <<
" can not be recognized\n";
525 if (_system_display == 0) {
528 if (_system_display != 0) {
533 ss_elem->setIntendedReceiver(ss_elem->getSender());
535 ss_elem->setProbability(1.0);
537 ofstream fout(
"err messages.txt", ios::app);
538 cout <<
"ControlPanel::executeRequestToPlant: Support System State: Incorrect display type " <<
static_cast<int>(display_type)
541 <<
" ControlPanel::executeRequestToPlant: Support System State: Incorrect display type "
542 <<
static_cast<int>(display_type) <<
'\n';
549 ofstream fout(
"err messages.txt", ios::app);
550 cout <<
"ControlPanel::executeRequestToPlant: Support System State: "
551 << ss_elem->getDisplayName() <<
" can not be recognized" << endl;
552 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Support System State: "
553 << ss_elem->getDisplayName() <<
" can not be recognized\n";
565 if (_system_display == 0) {
568 if (_system_display != 0) {
573 pv_elem->setIntendedReceiver(pv_elem->getSender());
575 pv_elem->setProbability(1.0);
579 pv_elem->setIntendedReceiver(pv_elem->getSender());
581 pv_elem->setProbability(1.0);
584 pv_elem->setObservedParameterValue(_parameter_trend->
getRateOfChange());
585 pv_elem->setIntendedReceiver(pv_elem->getSender());
587 pv_elem->setProbability(1.0);
589 ofstream fout(
"err messages.txt", ios::app);
590 cout <<
"ControlPanel::executeRequestToPlant: Parameter Value type: " <<
static_cast<int>(display_type)
591 <<
" can not be recognized" << endl;
592 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Value type: " <<
static_cast<int>(display_type)
593 <<
" can not be recognized\n";
600 ofstream fout(
"err messages.txt", ios::app);
601 cout <<
"ControlPanel::executeRequestToPlant: Parameter Value: neither "
602 << pv_elem->getDisplayName() <<
" nor "
603 << pv_elem->getInfoName() <<
" can not be recognized" << endl;
604 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Value: neither "
605 << pv_elem->getDisplayName() <<
" nor "
606 << pv_elem->getInfoName() <<
" can not be recognized\n";
620 if (_system_display1 == 0) {
623 if (_system_display1 != 0) {
630 pd_elem->first_mental_parameter.setObservedParameterValue(_parameter_trend->
getRateOfChange());
632 ofstream fout(
"err messages.txt", ios::app);
633 cout <<
"ControlPanel::executeRequestToPlant: Parameter Difference type: " <<
static_cast<int>(display_type)
634 <<
" can not be recognized" << endl;
635 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Difference type: "
636 <<
static_cast<int>(display_type) <<
" can not be recognized\n";
643 ofstream fout(
"err messages.txt", ios::app);
644 cout <<
"ControlPanel::executeRequestToPlant: Parameter Difference: neither "
645 << pd_elem->first_mental_parameter.getDisplayName() <<
" nor "
646 << pd_elem->first_indicator.getInfoName() <<
" can be recognized" << endl;
647 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Difference: neither "
648 << pd_elem->first_mental_parameter.getDisplayName() <<
" nor "
649 << pd_elem->first_indicator.getInfoName() <<
" can be recognized\n";
659 if (_system_display2 == 0) {
663 if (_system_display2 != 0) {
670 pd_elem->second_mental_parameter.setObservedParameterValue(_parameter_trend->
getRateOfChange());
672 ofstream fout(
"err messages.txt", ios::app);
673 cout <<
"ControlPanel::executeRequestToPlant: Parameter Difference type: " <<
static_cast<int>(display_type)
674 <<
" can not be recognized" << endl;
675 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Difference type: "
676 <<
static_cast<int>(display_type) <<
" can not be recognized\n";
683 ofstream fout(
"err messages.txt", ios::app);
684 cout <<
"ControlPanel::executeRequestToPlant: Parameter Difference: neither "
685 << pd_elem->second_mental_parameter.getDisplayName() <<
" nor "
686 << pd_elem->second_indicator.getInfoName() <<
" can be recognized" << endl;
687 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Difference: neither "
688 << pd_elem->second_mental_parameter.getDisplayName() <<
" nor "
689 << pd_elem->second_indicator.getInfoName() <<
" can be recognized\n";
695 if (_system_display1 != 0 && _system_display2 != 0) {
696 pd_elem->setIntendedReceiver(pd_elem->getSender());
698 pd_elem->setProbability(1.0);
708 if (_system_alarm == 0) {
711 if (_system_alarm != 0) {
713 as_elem->setIntendedReceiver(as_elem->getSender());
715 as_elem->setProbability(1.0);
717 ofstream fout(
"err messages.txt", ios::app);
718 cout <<
"ControlPanel::executeRequestToPlant: Alarm_state: neither " << as_elem->getAlarmName()
720 << as_elem->getInfoName() <<
" can not be recognized" << endl;
721 fout <<
r5pars_.timesno <<
" ControlPanel::executeRequestToPlant: Parameter Value: neither "
722 << as_elem->getAlarmName() <<
" nor "
723 << as_elem->getInfoName() <<
" can not be recognized\n";
793 if (str !=
"ControlPanel") {
794 ofstream fout(
"err messages.txt", ios::app);
795 cout <<
"ControlPanel::retrieveControlPanelFromFile File retrieval error in previous function" << endl;
797 <<
" ControlPanel::retrieveControlPanelFromFile File retrieval error in previous function\n";
Control room panel state — alarms, displays, controls, and operator interface.
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
double getImportanceOfTheAlarm()
std::string getAlarmName()
int getDisplayedAlarmState()
void copyBranchAction(BranchAction &)
void setActionTime(double)
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
std::vector< std::unique_ptr< BranchSystemAlarmState > > system_branch
Pending system alarm states, copied onto every alternative of the next cluster.
void addAction(int, BranchAction *)
void addHWReliabilityBranch(BranchSystemAction *, BranchSystemAction *)
Registers a hardware reliability fork with two alternatives (index 0 first). The record takes ownersh...
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
void setFunctionalState(int)
void copyBranchSystemAction(BranchSystemAction &)
std::vector< std::shared_ptr< BranchExpectedSupportSystemState > > support_system_state
std::vector< std::shared_ptr< BranchExpectedParameterDifference > > parameter_difference
std::vector< std::shared_ptr< BranchExpectedParameterValue > > parameter_value
std::vector< std::shared_ptr< BranchExpectedComponentState > > component_state
std::vector< std::shared_ptr< BranchExpectedAlarmState > > alarm_state
std::vector< std::shared_ptr< BranchAction > > action
std::vector< std::shared_ptr< BranchSystemAction > > HW_reliability
void setSenderAndReceiver(int, int)
void setDisplayName(std::string)
std::vector< std::unique_ptr< AlarmTwoParameterDifference > > alarm_value_difference_array
void retrieveControlPanelAlarmFromFile(std::ifstream &)
std::map< std::string, SystemAlarm * > alarm_map
int readInfoFromFile(std::ifstream &)
void updateAllDisplayedAlarmState(ControlPanelDisplay &)
std::vector< std::unique_ptr< AlarmComponent > > alarm_component_state_array
void clearControlPanelAlarm()
void copyControlPanelAlarm(ControlPanelAlarm &)
std::vector< std::unique_ptr< AlarmParameter > > alarm_parameter_value_array
SystemAlarm * getAlarmFromMap(std::string)
void saveControlPanelAlarmToFile(std::ofstream &)
void clearControlPanelControl()
void saveControlPanelControlToFile(std::ofstream &)
void initiateAllControls()
std::vector< std::unique_ptr< ControlValue > > control_value_array
std::map< std::string, SystemControl * > control_map
SystemControl * getControlFromMap(std::string)
std::vector< std::unique_ptr< ControlState > > control_state_array
int readInfoFromFile(std::ifstream &)
void executeValueControl(std::string, double)
void executeStateControl(std::string, int)
void copyControlPanelControl(ControlPanelControl &)
void retrieveControlPanelControlFromFile(std::ifstream &)
void copyControlPanelDisplay(ControlPanelDisplay &)
void initiateAllParametersValues()
void retrieveControlPanelDisplayFromFile(std::ifstream &)
std::vector< std::unique_ptr< DisplayComponentState > > component_state_array
std::vector< std::unique_ptr< DisplayParameterValueRate > > parameter_trend_array
std::map< std::string, SystemDisplay * > display_map
void clearControlPanelDisplay()
std::vector< std::unique_ptr< DisplayParameterValue > > parameter_value_array
std::vector< std::unique_ptr< DisplayHeatStructure > > heat_structure_array
void saveControlPanelDisplayToFile(std::ofstream &)
int readInfoFromFile(std::ifstream &)
SystemDisplay * getDisplayFromMap(std::string)
std::vector< std::unique_ptr< DisplaySupportSystemState > > support_systems_state_array
void updateAllDisplayValueAndState()
void seedFromMaster(const ControlPanel &master)
double total_weight_of_activated_alarm
int total_number_of_activated_alarm
void retrieveControlPanelFromFile(std::ifstream &)
int getTotalNumberOfActivatedAlarm()
void copyControlPanel(ControlPanel &)
void executeStateControl(std::string, int)
void executeRequestToPlant()
ControlPanelDisplay indicators
ControlPanelControl controls
void copyControlPanelForRestart(ControlPanel &)
void updateTotalNumberOfActivatedAlarm(int)
void saveControlPanelToFile(std::ofstream &)
void updateDisplayAndAlarm()
double getTotalWeightOfActivatedAlarm()
void updateTotalWeightOfActivatedAlarm(double)
void executeValueControl(std::string, double)
void initiationForSimulation()
void performValueControl(SystemModule &, double)
void performControl(SystemModule &, double)
std::string getActionName()
int getDisplayedComponentOperationalState()
std::string getDisplayName()
void copyDisplayElement(DisplayElement &)
double getDisplayedParameterValue()
int getDisplayedSupportSystemOperationalState() const
void updateFailureProbability()
HWReliabilityFTUnit * getHWReliabilityFTUnit(const std::string)
Finds the fault tree unit whose top node has the given name.
void setProbability(double)
double calculateProbability()
void setInfoOfSequenceTerminatedByAlarm(std::string)
std::string getIndicatorsDirectory()
void setSequenceTerminatedByAlarm(bool)
void setMessage(std::string)
void copySystemAlarm(SystemAlarm &)
void setFunctionalState(int)
DisplayType getTypeOfControl()
DisplayType getTypeOfDisplay()
void setTimerAndProbability(double, double)
void setBothTotalTimeRequiredAndRemainingTime(double)
Scheduler SScheduler
Simulation scheduling, parses CLI options.
HWReliabilityModule System_reliability
Hardware fault trees.
SystemModule Plant
Maps RELAP5 card numbers to C++ objects.
CommunicationPlace Communication_place
Inter-module communication.
BranchRecord Branch_center
Dynamic event tree state.