← Documentation
ADS-IDAC Engine 5.0.0
ControlPanelAlarm.cpp
Go to the documentation of this file.
1// ControlPanelAlarm.cpp: implementation of the ControlPanelAlarm class.
2//
4
5#include "ControlPanelAlarm.h"
6#include "../Branch/BranchRecord.h"
7#include <boost/serialization/export.hpp>
8#include "../Global/SimulationContext.h"
9#include <boost/archive/binary_oarchive.hpp>
10#include <boost/archive/binary_iarchive.hpp>
11BOOST_CLASS_EXPORT_IMPLEMENT(ControlPanelAlarm)
12using namespace std;
13
14
16// Construction/Destruction
18
20{
21
22}
23
24
26{
28}
29typedef map<string, SystemAlarm *> cp_type;
30
32 int n_alarm, i;
33 SystemAlarm *element_ptr;
34 string alarm_type, alarm_name;
35
36 //AlarmParameter
37 fin >> alarm_type >> n_alarm;
38 for(i = 0; i < n_alarm; i++){
39 auto par_ptr = make_unique<AlarmParameter>();
40 par_ptr->readInfoFromFile(fin);
41 alarm_parameter_value_array.push_back(std::move(par_ptr));
42 }
43 //AlarmComponent
44 fin >> alarm_type >> n_alarm;
45 for(i = 0; i < n_alarm; i++){
46 auto comp_ptr = make_unique<AlarmComponent>();
47 comp_ptr->readInfoFromFile(fin);
48 alarm_component_state_array.push_back(std::move(comp_ptr));
49 }
50 //AlarmTwoParameterDifference
51 fin >> alarm_type >> n_alarm;
52 for(i = 0; i < n_alarm; i++){
53 auto diff_ptr = make_unique<AlarmTwoParameterDifference>();
54 diff_ptr->readInfoFromFile(fin);
55 alarm_value_difference_array.push_back(std::move(diff_ptr));
56 }
57 //build up control Panel Map====================================
58 //AlarmParameter
59 for(i = 0; i < alarm_parameter_value_array.size(); i++){
60 element_ptr = alarm_parameter_value_array[i].get();
61 alarm_map.insert(cp_type::value_type(alarm_parameter_value_array[i]->getAlarmName(), element_ptr));
62 }
63 //AlarmComponent
64 for(i = 0; i < alarm_component_state_array.size(); i++){
65 element_ptr = alarm_component_state_array[i].get();
66 alarm_map.insert(cp_type::value_type(alarm_component_state_array[i]->getAlarmName(), element_ptr));
67 }
68 //AlarmTwoParameterDifference
69 for(i = 0; i < alarm_value_difference_array.size(); i++){
70 element_ptr = alarm_value_difference_array[i].get();
71 alarm_map.insert(cp_type::value_type(alarm_value_difference_array[i]->getAlarmName(), element_ptr));
72 }
73 return 0;
74}
75//
77 AlarmParameter* par_ptr;
78 AlarmComponent* comp_ptr;
80 map<string, SystemAlarm *>::iterator alarm_itr;
81 string db_str;
82 DisplayType alarm_type;
83 for(alarm_itr = alarm_map.begin(); alarm_itr != alarm_map.end(); alarm_itr++){
84// system_value = (map_itr->second)->getCorrespondingSystemParameterValue(_plant);
85 alarm_type = (alarm_itr->second)->getTypeOfAlarm();
86 if(alarm_type == DisplayType::AlarmParameter){
87 par_ptr = (AlarmParameter*) alarm_itr->second;
88 db_str = par_ptr->getAlarmName();
89 par_ptr->updateDisplayedAlarmState(_cp);
90 }
91 else if(alarm_type == DisplayType::AlarmComponent){
92 comp_ptr = (AlarmComponent *) alarm_itr->second;
93 db_str = comp_ptr->getAlarmName();
94 comp_ptr->updateDisplayedAlarmState(_cp);
95 }
96 else if(alarm_type == DisplayType::AlarmTwoParamDiff){
97 diff_ptr = (AlarmTwoParameterDifference *) alarm_itr->second;
98 db_str = diff_ptr->getAlarmName();
99 diff_ptr->updateDisplayedAlarmState(_cp);
100 }
101 else{
102 ofstream fout("err messages.txt", ios::app);
103 cout << "ControlPanelAlarm::initiateAllParametersValues Alarm " << (alarm_itr->second)->getAlarmName()
104 << "whose alarm_type " << static_cast<int>(alarm_type) << "can not be recognized." << endl;
105 fout << r5pars_.timesno << " ControlPanelAlarm::initiateAllParametersValues Alarm " << (alarm_itr->second)->getAlarmName()
106 << "whose alarm_type " << static_cast<int>(alarm_type) << "can not be recognized.\n";
107 fout.close();
108 r5pars_.sim_err = true;
109 g_sim.Branch_center.setTempESMessage("ControlPanelAlarm::initiateAllAlarms err.");
111 }
112 }
113}
115 decltype(alarm_parameter_value_array)::iterator ap_itr;
116 decltype(alarm_component_state_array)::iterator ac_itr;
117 decltype(alarm_value_difference_array)::iterator atpd_itr;
118 for(ap_itr = alarm_parameter_value_array.begin(); ap_itr != alarm_parameter_value_array.end(); ap_itr++){
119 fout << '\t' << (*ap_itr)->getAlarmName();
120 }
121 for(ac_itr = alarm_component_state_array.begin(); ac_itr != alarm_component_state_array.end(); ac_itr++){
122 fout << '\t' << (*ac_itr)->getAlarmName();
123 }
124 for(atpd_itr = alarm_value_difference_array.begin(); atpd_itr != alarm_value_difference_array.end(); atpd_itr++){
125 fout << '\t' << (*atpd_itr)->getAlarmName();
126 }
127}
129 int i;
130 for(i = 0; i < alarm_parameter_value_array.size(); i++){
131 fout << "\tstate";
132 }
133 for(i = 0; i < alarm_component_state_array.size(); i++){
134 fout << "\tstate";
135 }
136 for(i = 0; i < alarm_value_difference_array.size(); i++){
137 fout << "\tstate";
138 }
139}
140void ControlPanelAlarm::outputParametersValuesToFile(double _time, ofstream &fout){
141 decltype(alarm_parameter_value_array)::iterator ap_itr;
142 decltype(alarm_component_state_array)::iterator ac_itr;
143 decltype(alarm_value_difference_array)::iterator atpd_itr;
144 for(ap_itr = alarm_parameter_value_array.begin(); ap_itr != alarm_parameter_value_array.end(); ap_itr++){
145 fout << '\t' << (*ap_itr)->getDisplayedAlarmStateString();
146 }
147 for(ac_itr = alarm_component_state_array.begin(); ac_itr != alarm_component_state_array.end(); ac_itr++){
148 fout << '\t' << (*ac_itr)->getDisplayedAlarmStateString();
149 }
150 for(atpd_itr = alarm_value_difference_array.begin(); atpd_itr != alarm_value_difference_array.end(); atpd_itr++){
151 fout << '\t' << (*atpd_itr)->getDisplayedAlarmStateString();
152 }
153/*
154 map<string, SystemAlarm *>::iterator itr;
155 fout << _time;
156 for(itr = alarm_map.begin(); itr != alarm_map.end(); itr++){
157 fout << '\t' << (itr->second)->getDisplayedAlarmStateString();
158 }
159 fout << '\n';
160*/
161}
163 map<string, SystemAlarm *>::iterator map_itr;
164 SystemAlarm *ae;
165 ae = 0;
166 map_itr = alarm_map.find(_alarm_name);
167//
168 if (map_itr == alarm_map.end()){
169 ofstream fout("err messages.txt", ios::app);
170 cout << "ControlPanelAlarm::getAlarmFromMap " << _alarm_name
171 << " can not be found." << endl;
172 fout << r5pars_.timesno << " ControlPanelAlarm::getAlarmFromMap " << _alarm_name
173 << " can not be found.\n";
174 fout.close();
175 r5pars_.sim_err = true;
176 g_sim.Branch_center.setTempESMessage("ControlPanelAlarm::getAlarmFromMap err.");
178 return ae;
179 }
180 else{
181 return map_itr->second;
182 }
183}
185 //
186 decltype(alarm_parameter_value_array)::iterator ap_itr;
187 decltype(alarm_component_state_array)::iterator ac_itr;
188 decltype(alarm_value_difference_array)::iterator atpd_itr;
189 for(ap_itr = alarm_parameter_value_array.begin(); ap_itr != alarm_parameter_value_array.end(); ap_itr++){
190 (*ap_itr)->updateDisplayedAlarmState(_CPDisplay);
191 }
192 for(ac_itr = alarm_component_state_array.begin(); ac_itr != alarm_component_state_array.end(); ac_itr++){
193 (*ac_itr)->updateDisplayedAlarmState(_CPDisplay);
194 }
195 for(atpd_itr = alarm_value_difference_array.begin(); atpd_itr != alarm_value_difference_array.end(); atpd_itr++){
196 (*atpd_itr)->updateDisplayedAlarmState(_CPDisplay);
197 }
198}
201// return alarm_map.size();
202}
204 for(auto& src : _cpa.alarm_parameter_value_array){
205 auto ptr = make_unique<AlarmParameter>();
206 ptr->copyAlarmParameter(*src);
207 alarm_map.insert(cp_type::value_type(ptr->getAlarmName(), ptr.get()));
208 this->alarm_parameter_value_array.push_back(std::move(ptr));
209 }
210 for(auto& src : _cpa.alarm_component_state_array){
211 auto ptr = make_unique<AlarmComponent>();
212 ptr->copyAlarmComponent(*src);
213 alarm_map.insert(cp_type::value_type(ptr->getAlarmName(), ptr.get()));
214 this->alarm_component_state_array.push_back(std::move(ptr));
215 }
216 for(auto& src : _cpa.alarm_value_difference_array){
217 auto ptr = make_unique<AlarmTwoParameterDifference>();
218 ptr->copyAlarmTwoParameterDifference(*src);
219 alarm_map.insert(cp_type::value_type(ptr->getAlarmName(), ptr.get()));
220 this->alarm_value_difference_array.push_back(std::move(ptr));
221 }
222}
227 alarm_map.clear();
228}
230 int i, num;
231 num = alarm_parameter_value_array.size();
232 fout << "ControlPanelAlarm\n" << num << '\n';
233 for (i = 0; i < num; i++){
234 alarm_parameter_value_array.at(i)->saveAlarmParameterToFile(fout);
235 }
236 num = alarm_component_state_array.size();
237 fout << num << '\n';
238 for(i = 0; i < num; i++){
239 alarm_component_state_array.at(i)->saveAlarmComponentToFile(fout);
240 }
242 fout << num << '\n';
243 for(i = 0; i < num; i++){
244 alarm_value_difference_array.at(i)->saveAlarmTwoParameterDifferenceToFile(fout);
245 }
246}
248 int n_alarm, i;
249 SystemAlarm *element_ptr;
250 string alarm_type, alarm_name, str;
251
252 //AlarmParameter
253 fin >> str >> n_alarm;
254 for(i = 0; i < n_alarm; i++){
255 auto par_ptr = make_unique<AlarmParameter>();
256 par_ptr->retrieveAlarmParameterFromFile(fin);
257 alarm_parameter_value_array.push_back(std::move(par_ptr));
258 }
259 //AlarmComponent
260 fin >> n_alarm;
261 for(i = 0; i < n_alarm; i++){
262 auto comp_ptr = make_unique<AlarmComponent>();
263 comp_ptr->retrieveAlarmComponentFromFile(fin);
264 alarm_component_state_array.push_back(std::move(comp_ptr));
265 }
266 //AlarmTwoParameterDifference
267 fin >> n_alarm;
268 for(i = 0; i < n_alarm; i++){
269 auto diff_ptr = make_unique<AlarmTwoParameterDifference>();
270 diff_ptr->retrieveAlarmTwoParameterDifferenceFromFile(fin);
271 alarm_value_difference_array.push_back(std::move(diff_ptr));
272 }
273 //build up control Panel Map====================================
274 //AlarmParameter
275 for(i = 0; i < alarm_parameter_value_array.size(); i++){
276 element_ptr = alarm_parameter_value_array.at(i).get();
277 alarm_map.insert(cp_type::value_type(alarm_parameter_value_array.at(i)->getAlarmName(), element_ptr));
278 }
279 //AlarmComponent
280 for(i = 0; i < alarm_component_state_array.size(); i++){
281 element_ptr = alarm_component_state_array.at(i).get();
282 alarm_map.insert(cp_type::value_type(alarm_component_state_array.at(i)->getAlarmName(), element_ptr));
283 }
284 //AlarmTwoParameterDifference
285 for(i = 0; i < alarm_value_difference_array.size(); i++){
286 element_ptr = alarm_value_difference_array.at(i).get();
287 alarm_map.insert(cp_type::value_type(alarm_value_difference_array.at(i)->getAlarmName(), element_ptr));
288 }
289}
map< string, SystemAlarm * > cp_type
DisplayType
Definition: SimConstants.h:41
SimulationContext g_sim
Global simulation context: the single instance, defined in SimulationContext.cpp.
int updateDisplayedAlarmState(ControlPanelDisplay &)
std::string getAlarmName()
int updateDisplayedAlarmState(ControlPanelDisplay &)
int updateDisplayedAlarmState(ControlPanelDisplay &)
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::vector< std::unique_ptr< AlarmTwoParameterDifference > > alarm_value_difference_array
void outputParametersValuesToFile(double, std::ofstream &)
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 copyControlPanelAlarm(ControlPanelAlarm &)
void outputParametersUnitsToFile(std::ofstream &)
std::vector< std::unique_ptr< AlarmParameter > > alarm_parameter_value_array
SystemAlarm * getAlarmFromMap(std::string)
void initiateAllAlarms(ControlPanelDisplay &)
void outputParametersLabelsToFile(std::ofstream &)
void saveControlPanelAlarmToFile(std::ofstream &)
struct @0 r5pars_
BranchRecord Branch_center
Dynamic event tree state.