← Documentation
ADS-IDAC Engine 5.0.0
PassiveAlarmLoadUnit.cpp
Go to the documentation of this file.
1// PassiveAlarmLoadUnit.cpp: implementation of the PassiveAlarmLoadUnit class.
2//
4
6using namespace std;
7
9// Construction/Destruction
11
13{
14 this->m_stack_size = 36;
15 this->m_alarm_capacity = 3;
16}
17
19{
20
21}
22
24{
25 vector<int>::iterator int_itr;
26 vector<float>::iterator fl_itr;
27 int_itr = this->m_No_of_alarms_history.begin();
28 fl_itr = this->m_alarm_time_history.begin();
29
30 this->m_No_of_alarms_history.insert(int_itr, n);
31 this->m_alarm_time_history.insert(fl_itr, r5pars_.timesno);
32
33 if(this->m_No_of_alarms_history.size() != this->m_alarm_time_history.size())
34 {this->ErrorMessage("m_No_of_alarms_history does not the size of m_alarm_time_history");}
35
36 this->PopBackIfNecessary();
38}
39
40
42{
43 if(this->m_No_of_alarms_history.size() != this->m_alarm_time_history.size())
44 {this->ErrorMessage("m_No_of_alarms_history does not the size of m_alarm_time_history");}
45
46 while(this->m_No_of_alarms_history.size() > this->m_stack_size)
47 {
48 this->m_No_of_alarms_history.pop_back();
49 this->m_alarm_time_history.pop_back();
50 }
51}
52
54{
55 return this->m_alarm_load_value;
56}
57
59{
60 float denominator = 0;
61 float numerator = 0;
62 float time = r5pars_.timesno;
63 bool add_to_timeline = false;
64 ValueTimeLineUnit * vtu_pt;
65 int i;
66
67 vector<int>::iterator int_itr;
68 vector<float>::iterator fl_itr;
69
70 if(this->m_No_of_alarms_history.size() != this->m_alarm_time_history.size())
71 {this->ErrorMessage("m_No_of_alarms_history does not equal to the size of m_alarm_time_history");}
72
73 int_itr = this->m_No_of_alarms_history.begin();
74 fl_itr = this->m_alarm_time_history.begin();
75
76 while(int_itr != this->m_No_of_alarms_history.end())
77 {
78 numerator += exp(-0.461*(r5pars_.timesno - (*fl_itr))) * (*int_itr) / this->m_alarm_capacity;
79 denominator += exp(-0.461* (r5pars_.timesno - (*fl_itr) ) );
80 int_itr++;
81 fl_itr++;
82 }
83
84 i = this->m_No_of_alarms_history.size();
85 while (i < this->m_stack_size)
86 {
87 denominator += exp(-0.461 * 0.5*float(i));
88 i++;
89 }
90
91 if(numerator != 0)
92 {numerator *= 1;}
93 if(denominator == 0)
94 {this->m_alarm_load_value = 0;}
95 else
96 {
97 this->m_alarm_load_value = min<float>(numerator/denominator , 1);
98 }
99 if(this->m_passive_alarm_load_timeline.size() == 0)
100 {
101 add_to_timeline = true;
102 }
103 else
104 {
105 vtu_pt = this->m_passive_alarm_load_timeline.rbegin()->get();
106 if(vtu_pt->m_fl != this->m_alarm_load_value)
107 {add_to_timeline = true;}
108 }
109}
110
112{
113 cout << r5pars_.timesno << " " << str << " in ReasonMachine.cpp" << '\n';
114 ofstream fout("err messages.txt", ios::app);
115 fout << r5pars_.timesno << " " << str << '\n';
116 fout.close();
117 //r5pars_.terminateall = true;
118}
119
121{
122/*
123 int m_alarm_capacity;
124 float m_alarm_load_value;
125 int m_operator;
126 int m_stack_size;
127
128 vector<int> m_No_of_alarms_history;
129 vector<float> m_alarm_time_history;
130*/
131 vector<int>::iterator int_itr;
132 vector<float>::iterator fl_itr;
133 ValueTimeLineUnit * v_pt;
134
135 this->m_alarm_capacity = _pau_pt->m_alarm_capacity;
136 this->m_alarm_load_value = _pau_pt->m_alarm_load_value;
137 this->m_operator = _pau_pt->m_operator;
138 this->m_stack_size = _pau_pt->m_stack_size;
139
140 if(this->m_No_of_alarms_history.size() > 0)
141 {this->ErrorMessage("this->m_No_of_alarms_history.size() > 0");}
142 if(this->m_alarm_time_history.size() > 0)
143 {this->ErrorMessage("this->m_alarm_time_history.size() > 0");}
144 if(this->m_passive_alarm_load_timeline.size() > 0)
145 {this->ErrorMessage("this->m_passive_alarm_load_timeline.size() > 0");}
146
147 for(int_itr = _pau_pt->m_No_of_alarms_history.begin(); int_itr != _pau_pt->m_No_of_alarms_history.end(); int_itr++)
148 {
149 this->m_No_of_alarms_history.push_back(*int_itr);
150 }
151 for(fl_itr = _pau_pt->m_alarm_time_history.begin(); fl_itr != _pau_pt->m_alarm_time_history.end(); fl_itr++)
152 {
153 this->m_alarm_time_history.push_back(*fl_itr);
154 }
155 for(auto &e : _pau_pt->m_passive_alarm_load_timeline)
156 {
157 auto v = make_unique<ValueTimeLineUnit>();
158 v->CopyFromAnotherVTLU(e.get());
159 this->m_passive_alarm_load_timeline.push_back(std::move(v));
160 }
161}
document e
void ErrorMessage(std::string)
std::vector< float > m_alarm_time_history
std::vector< int > m_No_of_alarms_history
std::vector< std::unique_ptr< ValueTimeLineUnit > > m_passive_alarm_load_timeline
void CopyFromAnotherPassiveAlarmLoadUnit(PassiveAlarmLoadUnit *)
struct @0 r5pars_