← Documentation
ADS-IDAC Engine 5.0.0
DiagnosisComponentActionUnit.cpp
Go to the documentation of this file.
1// DiagnosisComponentActionUnit.cpp: implementation of the DiagnosisComponentActionUnit class.
2//
4
6#include "../ControlPanel/ControlPanel.h"
7#include "../Procedure/ProcedureExpectedSupportSystemStateUnit.h"
8#include "../Global/SimulationContext.h"
9using namespace std;
10
11
13// Construction/Destruction
15
17 priority = -999;
21 control_input = 0.0;
22 lower_limit = 0.0;
23 upper_limit = 0.0;
24}
25
28}
29
32}
33
48
50 string str;
51 fin >> str;
52 this->readInfoFromFile(fin); // read component name
53 fin >> str >> priority;
54 fin >> str >> action_type;
56 fin >> str >> control_parameter_name;
57 } else {
58 fin >> str >> control_input;
59 }
60 fin >> str >> lower_limit;
61 fin >> str >> upper_limit;
63
64}
65
67 string str, str_obj;
68 int obj_type, i_temp;
69 int num_prereqs;
75 ExpectationORUnit *exp_or_pt;
78 ExpectationElement *exp_pt;
79 //
80 fin >> str >> num_prereqs;
81 for (i_temp = 0; i_temp < num_prereqs; i_temp++) {
82 auto exp_or_upt = make_unique<ExpectationORUnit>();
83 exp_or_pt = exp_or_upt.get();
84 action_prerequisites.push_back(std::move(exp_or_upt));
85 do {
86 fin >> str_obj;
87 obj_type = this->checkForTypeOfPrerequisite(str_obj);
88 if (obj_type == sim::Comm::AlarmState) {
89 alarm_pt = new ProcedureExpectedAlarmStateUnit();
91 alarm_pt->setInfoName(str_obj);
92 alarm_pt->setTypeOfExpectation(obj_type);
93 exp_pt = (ExpectationElement *) alarm_pt;
94 or_pt = (ProcedureExpectORLink *) alarm_pt;
95 exp_or_pt->add(exp_pt);
96 } else if (obj_type == sim::Comm::ComponentState) {
99 comp_pt->setInfoName(str_obj);
100 comp_pt->setTypeOfExpectation(obj_type);
101 exp_pt = (ExpectationElement *) comp_pt;
102 or_pt = (ProcedureExpectORLink *) comp_pt;
103 exp_or_pt->add(exp_pt);
104 } else if (obj_type == sim::Comm::SupportSystemState) {
107 ss_pt->setInfoName(str_obj);
108 ss_pt->setTypeOfExpectation(obj_type);
109 exp_pt = (ExpectationElement *) ss_pt;
110 or_pt = (ProcedureExpectORLink *) ss_pt;
111 exp_or_pt->add(exp_pt);
112 } else if (obj_type == sim::Comm::ParameterValue || obj_type == sim::Comm::ParameterTrend) {
113 par_val_pt = new ProcedureExpectedParameterValueUnit();
114 par_val_pt->readInfoFromFileWithoutInfoName(fin);
115 par_val_pt->setInfoName(str_obj);
116 par_val_pt->setTypeOfExpectation(obj_type);
117 exp_pt = (ExpectationElement *) par_val_pt;
118 or_pt = (ProcedureExpectORLink *) par_val_pt;
119 exp_or_pt->add(exp_pt);
120 } else if (obj_type == sim::Branch::MentalBelief) {
121 mp_pt = new ExpectedMentalBelief();
122 mp_pt->readInfoFromFile(fin);
123 mp_pt->setTypeOfExpectation(obj_type);
124 exp_pt = (ExpectationElement *) mp_pt;
125 or_pt = (ProcedureExpectORLink *) mp_pt;
126 exp_or_pt->add(exp_pt);
127 } else if (obj_type == sim::Comm::ParameterDifference) {
129 par_dif_pt->readInfoFromFile(fin);
130 par_dif_pt->setTypeOfExpectation(obj_type);
131 exp_pt = (ExpectationElement *) par_dif_pt;
132 or_pt = (ProcedureExpectORLink *) par_dif_pt;
133 exp_or_pt->add(exp_pt);
134 } else {//parmeter trend and parameter state are not provided currently
135 ofstream fout("err messages.txt", ios::app);
136 cout << "ProcedureStepUnit::readInfofromFile: expectation body obj_type:" << obj_type << " cannot be recognized"
137 << endl;
138 fout << r5pars_.timesno << " ProcedureStepUnit::readInfofromFile: expectation body obj_type:" << obj_type
139 << " cannot be recognized\n";
140 fout.close();
141 r5pars_.sim_err = true;
142 g_sim.Branch_center.setTempESMessage("ProcedureStepUnit::readInfofromFile err.");
144 }
145 } while (or_pt->getORLink() == sim::Bool::Yes);
146 }
147}
148
150 int n_return;
151 DisplayType n_temp;
152 string sub_str;
153 SystemDisplay *sd_pt;
154 map<string, SystemAlarm *>::iterator alarm_map_itr;
155 map<string, SystemDisplay *>::iterator display_map_itr;
156 map<string, SystemControl *>::iterator control_map_itr;
157 n_return = sim::State::Unknown;
158 alarm_map_itr = g_sim.Indicator.alarms.alarm_map.find(_prereq_name);
159 if (alarm_map_itr != g_sim.Indicator.alarms.alarm_map.end()) {//check whether is an alarm
160 n_return = sim::Comm::AlarmState;
161 return n_return;
162 }
163 display_map_itr = g_sim.Indicator.indicators.display_map.find(_prereq_name);
164 if (display_map_itr
165 != g_sim.Indicator.indicators.display_map.end()) {//check wether is a control panel component stat eor parameter value
166 sd_pt = display_map_itr->second;
167 n_temp = sd_pt->getTypeOfDisplay();
168 if (n_temp == DisplayType::ComponentState) {
169 n_return = sim::Comm::ComponentState;
170 } else if (n_temp == DisplayType::SupportSystemState) {
172 } else if (n_temp == DisplayType::ParameterValue || n_temp == DisplayType::HeatStructure
173 || n_temp == DisplayType::ParameterTrend) {
174 n_return = sim::Comm::ParameterValue;
175 } else {
176 ofstream fout("err messages.txt", ios::app);
177 cout << "ProcedureStepUnit::checkForTypeOfExpectation obj: " << _prereq_name << " Type of display:" << static_cast<int>(n_temp)
178 << " cannot be recognized" << endl;
179 fout << r5pars_.timesno << " DiagnosisComponentActionUnit::checkForTypeOfPrerequisite obj: " << _prereq_name
180 << " Type of display:" << static_cast<int>(n_temp) << " cannot be recognized\n";
181 fout.close();
182 r5pars_.sim_err = true;
183 g_sim.Branch_center.setTempESMessage("DiagnosisComponentActionUnit::checkForTypeOfPrerequisite err.");
185 }
186 return n_return;
187 }
188 if (_prereq_name == "Mental_Belief") {
189 n_return = sim::Branch::MentalBelief;
190 } else if (_prereq_name == "Parameter_Difference") {
192 } else {
193 ofstream fout("err messages.txt", ios::app);
194 cout << "DiagnosisComponentActionUnit::checkForTypeOfExpectation: Obj_name: " << _prereq_name
195 << " cannot be recognized" << endl;
196 fout << r5pars_.timesno << " DiagnosisComponentActionUnit::checkForTypeOfPrerequisite: Obj_name: " << _prereq_name
197 << " cannot be recognized\n";
198 fout.close();
199 r5pars_.sim_err = true;
200 g_sim.Branch_center.setTempESMessage("DiagnosisComponentActionUnit::checkForTypeOfPrerequisite err.");
202 }
203 return n_return;
204}
205
207 bool found_prereq = false;
208 bool branch_generated = false;
209 int state_of_activation;
210 auto expectationOR_itr = action_prerequisites.begin();
211 while (expectationOR_itr != action_prerequisites.end() && !found_prereq) {
212 state_of_activation = (*expectationOR_itr)->getStateOfActivation();
213 if (state_of_activation == sim::None) {
214 found_prereq = true;
215 (*expectationOR_itr)->setStateOfActivation(sim::State::Active);
216 branch_generated = (*expectationOR_itr)->assessExpectation(_operator, _stm, _entry);
217 if (branch_generated) {
218 return branch_generated;
219 }
220 } else if (state_of_activation == sim::State::Active) {
221 found_prereq = true;
222 branch_generated = (*expectationOR_itr)->assessExpectation(_operator, _stm, _entry);
223 if (branch_generated) {
224 return branch_generated;
225 }
226 } else if (state_of_activation == sim::State::Failed) {
227 found_prereq = true;
229 }
230
231 expectationOR_itr++;
232 }
233 if (!found_prereq) {
235 }
236 return branch_generated;
237}
238
241 for (auto& prereq : this->action_prerequisites) {
242 prereq->setStateOfActivation(sim::None);
243 for (auto& exp_or : prereq->expectation_OR) {
244 exp_or->setStateOfExpectation(sim::None);
245 }
246 }
247}
248
250 this->copyKBElement(_dcau);
251 action_type = _dcau.getActionType();
254 lower_limit = _dcau.getLowerLimit();
255 upper_limit = _dcau.getUpperLimit();
256 priority = _dcau.getPriority();
258 //
259 for (auto& src : _dcau.action_prerequisites) {
260 auto prereq_pt = make_unique<ExpectationORUnit>();
261 prereq_pt->copyExpectationORUnit(*src);
262 this->action_prerequisites.push_back(std::move(prereq_pt));
263 }
264}
265
267 int num_prereq;
268 this->saveKBElementToFile(fout);
269 fout << action_type << ' ' << control_input << '\n'
270 << control_parameter_name << '\n'
271 << lower_limit << ' ' << upper_limit << '\n'
272 << priority << ' ' << prerequisite_state
273 << '\n';
274 //
275 num_prereq = this->action_prerequisites.size();
276 fout << num_prereq << '\n';
277 for (auto& prereq : action_prerequisites) {
278 prereq->saveExpectationORUnitToFile(fout);
279 }
280}
281
283 int i, num_prereq;
284 this->retrieveKBElementFromFile(fin);
285 fin >> action_type >> control_input
289 //
290 fin >> num_prereq;
291 for (i = 0; i < num_prereq; i++) {
292 auto prereq_ptr = make_unique<ExpectationORUnit>();
293 prereq_ptr->retrieveExpectationORUnitFromFile(fin);
294 this->action_prerequisites.push_back(std::move(prereq_ptr));
295 }
296}
DisplayType
Definition: SimConstants.h:41
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
void setTempTypeOfConsequence(Consequence)
Stores the consequence of the end state the running sequence will get.
void setTempESMessage(std::string)
Stores the description of the end state the running sequence will get if it is terminated (set by mod...
std::map< std::string, SystemAlarm * > alarm_map
std::map< std::string, SystemDisplay * > display_map
ControlPanelDisplay indicators
Definition: ControlPanel.h:53
ControlPanelAlarm alarms
Definition: ControlPanel.h:52
void readDiagnosisComponentActionUnitInfoFromFile(std::ifstream &)
void readDiagnosisComponentPrerequisiteFromFile(std::ifstream &)
std::vector< std::unique_ptr< ExpectationORUnit > > action_prerequisites
void retrieveDiagnosisComponentActionUnitFromFile(std::ifstream &)
void copyDiagnosisComponentActionUnit(DiagnosisComponentActionUnit &)
bool assessPrerequisites(Operator &, ShortTermMemory &, int)
void saveDiagnosisComponentActionUnitToFile(std::ofstream &)
void add(ExpectationElement *)
void readInfoFromFile(std::ifstream &)
void readInfoFromFile(std::ifstream &)
Definition: KBElement.cpp:27
void setInfoName(std::string)
Definition: KBElement.cpp:25
void retrieveKBElementFromFile(std::ifstream &)
Definition: KBElement.cpp:36
void saveKBElementToFile(std::ofstream &)
Definition: KBElement.cpp:33
void copyKBElement(KBElement &)
Definition: KBElement.cpp:30
DisplayType getTypeOfDisplay()
struct @0 r5pars_
constexpr int Yes
Definition: SimConstants.h:80
constexpr int MentalBelief
Definition: SimConstants.h:265
constexpr int ParameterDifference
Definition: SimConstants.h:289
constexpr int ParameterTrend
Definition: SimConstants.h:287
constexpr int SupportSystemState
Definition: SimConstants.h:292
constexpr int ComponentState
Definition: SimConstants.h:285
constexpr int AlarmState
Definition: SimConstants.h:284
constexpr int ParameterValue
Definition: SimConstants.h:286
constexpr int ParameterControl
Definition: SimConstants.h:251
constexpr int Failed
Definition: SimConstants.h:103
constexpr int Succeed
Definition: SimConstants.h:104
constexpr int Active
Definition: SimConstants.h:118
constexpr int Unknown
Definition: SimConstants.h:120
constexpr int None
Definition: SimConstants.h:75
ControlPanel Indicator
Control room panel state.
BranchRecord Branch_center
Dynamic event tree state.