Skip to main content

cimstructs/
ExcAVR2.rs

1/// Italian excitation system corresponding to IEEE (1968) type 2 model. It represents an alternator and rotating diodes and electromechanic voltage regulators.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct ExcAVR2 {
4    #[serde(flatten)]
5    pub base: super::ExcitationSystemDynamics,
6    /// Field voltage value 1 (E1). Typical value = 4,18.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub e1: Option<f64>,
9    /// Field voltage value 2 (E2). Typical value = 3,14.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub e2: Option<f64>,
12    /// AVR gain (KA). Typical value = 500.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub ka: Option<f64>,
15    /// Rate feedback gain (KF). Typical value = 0,12.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub kf: Option<f64>,
18    /// Saturation factor at E1 (S[E1]). Typical value = 0.1.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub se1: Option<f64>,
21    /// Saturation factor at E2 (S[E2]). Typical value = 0,03.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub se2: Option<f64>,
24    /// AVR time constant (TA) (>= 0). Typical value = 0,02.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub ta: Option<f64>,
27    /// AVR time constant (TB) (>= 0). Typical value = 0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub tb: Option<f64>,
30    /// Exciter time constant (TE) (>= 0). Typical value = 1.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub te: Option<f64>,
33    /// Rate feedback time constant (TF1) (>= 0). Typical value = 1.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub tf1: Option<f64>,
36    /// Rate feedback time constant (TF2) (>= 0). Typical value = 1.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub tf2: Option<f64>,
39    /// Minimum AVR output (VRMN). Typical value = -6.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub vrmn: Option<f64>,
42    /// Maximum AVR output (VRMX). Typical value = 7.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub vrmx: Option<f64>,
45}
46impl crate::base::CimElement for ExcAVR2 {
47    fn mrid(&self) -> &str { &self.base.base.base.id }
48    fn type_name(&self) -> &'static str { "ExcAVR2" }
49    fn as_any(&self) -> &dyn std::any::Any { self }
50    fn to_json_value(&self) -> serde_json::Value {
51        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
52    }
53    fn to_block(&self) -> crate::base::RdfBlock {
54        let mut block = self.base.to_block();
55        block.type_name = "ExcAVR2".to_string();
56        if let Some(v) = self.e1 {
57            block.fields.insert("ExcAVR2.e1".into(), crate::base::FieldValue::Text(v.to_string()));
58        }
59        if let Some(v) = self.e2 {
60            block.fields.insert("ExcAVR2.e2".into(), crate::base::FieldValue::Text(v.to_string()));
61        }
62        if let Some(v) = self.ka {
63            block.fields.insert("ExcAVR2.ka".into(), crate::base::FieldValue::Text(v.to_string()));
64        }
65        if let Some(v) = self.kf {
66            block.fields.insert("ExcAVR2.kf".into(), crate::base::FieldValue::Text(v.to_string()));
67        }
68        if let Some(v) = self.se1 {
69            block.fields.insert("ExcAVR2.se1".into(), crate::base::FieldValue::Text(v.to_string()));
70        }
71        if let Some(v) = self.se2 {
72            block.fields.insert("ExcAVR2.se2".into(), crate::base::FieldValue::Text(v.to_string()));
73        }
74        if let Some(v) = self.ta {
75            block.fields.insert("ExcAVR2.ta".into(), crate::base::FieldValue::Text(v.to_string()));
76        }
77        if let Some(v) = self.tb {
78            block.fields.insert("ExcAVR2.tb".into(), crate::base::FieldValue::Text(v.to_string()));
79        }
80        if let Some(v) = self.te {
81            block.fields.insert("ExcAVR2.te".into(), crate::base::FieldValue::Text(v.to_string()));
82        }
83        if let Some(v) = self.tf1 {
84            block.fields.insert("ExcAVR2.tf1".into(), crate::base::FieldValue::Text(v.to_string()));
85        }
86        if let Some(v) = self.tf2 {
87            block.fields.insert("ExcAVR2.tf2".into(), crate::base::FieldValue::Text(v.to_string()));
88        }
89        if let Some(v) = self.vrmn {
90            block.fields.insert("ExcAVR2.vrmn".into(), crate::base::FieldValue::Text(v.to_string()));
91        }
92        if let Some(v) = self.vrmx {
93            block.fields.insert("ExcAVR2.vrmx".into(), crate::base::FieldValue::Text(v.to_string()));
94        }
95        block
96    }
97}
98
99impl ExcAVR2 {
100    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
101        let mut obj = Self::default();
102        obj.base.base.base.id.clone_from(&b.mrid);
103        for (key, val) in &b.fields {
104            match key.as_str() {
105                "ExcAVR2.e1" => {
106                    match val {
107                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.e1 = Some(v); } }
108                        crate::base::FieldValue::TextList(svs) => {
109                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.e1 = Some(v); } }
110                        }
111                        _ => {}
112                    }
113                }
114                "ExcAVR2.e2" => {
115                    match val {
116                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.e2 = Some(v); } }
117                        crate::base::FieldValue::TextList(svs) => {
118                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.e2 = Some(v); } }
119                        }
120                        _ => {}
121                    }
122                }
123                "ExcAVR2.ka" => {
124                    match val {
125                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
126                        crate::base::FieldValue::TextList(svs) => {
127                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
128                        }
129                        _ => {}
130                    }
131                }
132                "ExcAVR2.kf" => {
133                    match val {
134                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kf = Some(v); } }
135                        crate::base::FieldValue::TextList(svs) => {
136                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kf = Some(v); } }
137                        }
138                        _ => {}
139                    }
140                }
141                "ExcAVR2.se1" => {
142                    match val {
143                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.se1 = Some(v); } }
144                        crate::base::FieldValue::TextList(svs) => {
145                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.se1 = Some(v); } }
146                        }
147                        _ => {}
148                    }
149                }
150                "ExcAVR2.se2" => {
151                    match val {
152                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.se2 = Some(v); } }
153                        crate::base::FieldValue::TextList(svs) => {
154                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.se2 = Some(v); } }
155                        }
156                        _ => {}
157                    }
158                }
159                "ExcAVR2.ta" => {
160                    match val {
161                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
162                        crate::base::FieldValue::TextList(svs) => {
163                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
164                        }
165                        _ => {}
166                    }
167                }
168                "ExcAVR2.tb" => {
169                    match val {
170                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
171                        crate::base::FieldValue::TextList(svs) => {
172                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
173                        }
174                        _ => {}
175                    }
176                }
177                "ExcAVR2.te" => {
178                    match val {
179                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.te = Some(v); } }
180                        crate::base::FieldValue::TextList(svs) => {
181                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.te = Some(v); } }
182                        }
183                        _ => {}
184                    }
185                }
186                "ExcAVR2.tf1" => {
187                    match val {
188                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
189                        crate::base::FieldValue::TextList(svs) => {
190                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
191                        }
192                        _ => {}
193                    }
194                }
195                "ExcAVR2.tf2" => {
196                    match val {
197                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
198                        crate::base::FieldValue::TextList(svs) => {
199                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
200                        }
201                        _ => {}
202                    }
203                }
204                "ExcAVR2.vrmn" => {
205                    match val {
206                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vrmn = Some(v); } }
207                        crate::base::FieldValue::TextList(svs) => {
208                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vrmn = Some(v); } }
209                        }
210                        _ => {}
211                    }
212                }
213                "ExcAVR2.vrmx" => {
214                    match val {
215                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vrmx = Some(v); } }
216                        crate::base::FieldValue::TextList(svs) => {
217                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vrmx = Some(v); } }
218                        }
219                        _ => {}
220                    }
221                }
222                "ExcitationSystemDynamics.SynchronousMachineDynamics" => {
223                    if let crate::base::FieldValue::Resource(sv) = val {
224                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
225                    }
226                }
227                "DynamicsFunctionBlock.enabled" => {
228                    match val {
229                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
230                        crate::base::FieldValue::TextList(svs) => {
231                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
232                        }
233                        _ => {}
234                    }
235                }
236                "IdentifiedObject.description" => {
237                    match val {
238                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
239                        crate::base::FieldValue::TextList(svs) => {
240                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
241                        }
242                        _ => {}
243                    }
244                }
245                "IdentifiedObject.energyIdentCodeEic" => {
246                    match val {
247                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
248                        crate::base::FieldValue::TextList(svs) => {
249                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
250                        }
251                        _ => {}
252                    }
253                }
254                "IdentifiedObject.mRID" => {
255                    match val {
256                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
257                        crate::base::FieldValue::TextList(svs) => {
258                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
259                        }
260                        _ => {}
261                    }
262                }
263                "IdentifiedObject.name" => {
264                    match val {
265                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
266                        crate::base::FieldValue::TextList(svs) => {
267                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
268                        }
269                        _ => {}
270                    }
271                }
272                "IdentifiedObject.shortName" => {
273                    match val {
274                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
275                        crate::base::FieldValue::TextList(svs) => {
276                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
277                        }
278                        _ => {}
279                    }
280                }
281                _ => {}
282            }
283        }
284        obj
285    }
286}