Skip to main content

cimstructs/
ExcREXS.rs

1/// General purpose rotating excitation system. This model can be used to represent a wide range of excitation systems whose DC power source is an AC or DC generator. It encompasses IEEE type AC1, AC2, DC1, and DC2 excitation system models.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct ExcREXS {
4    #[serde(flatten)]
5    pub base: super::ExcitationSystemDynamics,
6    /// Field voltage value 1 (E1). Typical value = 3.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub e1: Option<f64>,
9    /// Field voltage value 2 (E2). Typical value = 4.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub e2: Option<f64>,
12    /// Rate feedback signal flag (fbf). Typical value = fieldCurrent.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub fbf: Option<super::base::UriRef>,
15    /// Limit type flag (Flimf). Typical value = 0.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub flimf: Option<f64>,
18    /// Rectifier regulation factor (Kc). Typical value = 0,05.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub kc: Option<f64>,
21    /// Exciter regulation factor (Kd). Typical value = 2.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub kd: Option<f64>,
24    /// Exciter field proportional constant (Ke). Typical value = 1.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub ke: Option<f64>,
27    /// Field voltage feedback gain (Kefd). Typical value = 0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub kefd: Option<f64>,
30    /// Rate feedback gain (Kf) (>= 0). Typical value = 0,05.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub kf: Option<f64>,
33    /// Field voltage controller feedback gain (Kh). Typical value = 0.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub kh: Option<f64>,
36    /// Field current regulator integral gain (Kii). Typical value = 0.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub kii: Option<f64>,
39    /// Field current regulator proportional gain (Kip). Typical value = 1.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub kip: Option<f64>,
42    /// Coefficient to allow different usage of the model-speed coefficient (Ks). Typical value = 0.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub ks: Option<f64>,
45    /// Voltage regulator integral gain (Kvi). Typical value = 0.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub kvi: Option<f64>,
48    /// Voltage regulator proportional gain (Kvp). Typical value = 2800.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub kvp: Option<f64>,
51    /// V/Hz limiter gain (Kvphz). Typical value = 0.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub kvphz: Option<f64>,
54    /// Pickup speed of V/Hz limiter (Nvphz). Typical value = 0.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub nvphz: Option<f64>,
57    /// Saturation factor at E1 (Se1). Typical value = 0,0001.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub se1: Option<f64>,
60    /// Saturation factor at E2 (Se2). Typical value = 0,001.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub se2: Option<f64>,
63    /// Voltage regulator time constant (Ta) (>= 0). If = 0, block is bypassed. Typical value = 0,01.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub ta: Option<f64>,
66    /// Lag time constant (Tb1) (>= 0). If = 0, block is bypassed. Typical value = 0.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub tb1: Option<f64>,
69    /// Lag time constant (Tb2) (>= 0). If = 0, block is bypassed. Typical value = 0.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub tb2: Option<f64>,
72    /// Lead time constant (Tc1) (>= 0). Typical value = 0.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub tc1: Option<f64>,
75    /// Lead time constant (Tc2) (>= 0). Typical value = 0.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub tc2: Option<f64>,
78    /// Exciter field time constant (Te) (> 0). Typical value = 1,2.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub te: Option<f64>,
81    /// Rate feedback time constant (Tf) (>= 0). If = 0, the feedback path is not used. Typical value = 1.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub tf: Option<f64>,
84    /// Feedback lead time constant (Tf1) (>= 0). Typical value = 0.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub tf1: Option<f64>,
87    /// Feedback lag time constant (Tf2) (>= 0). If = 0, block is bypassed. Typical value = 0.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub tf2: Option<f64>,
90    /// Field current bridge time constant (Tp) (>= 0). Typical value = 0.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub tp: Option<f64>,
93    /// Maximum compounding voltage (Vcmax). Typical value = 0.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub vcmax: Option<f64>,
96    /// Maximum exciter field current (Vfmax) (> ExcREXS.vfmin). Typical value = 47.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub vfmax: Option<f64>,
99    /// Minimum exciter field current (Vfmin) (< ExcREXS.vfmax). Typical value = -20.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub vfmin: Option<f64>,
102    /// Voltage regulator input limit (Vimax). Typical value = 0,1.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub vimax: Option<f64>,
105    /// Maximum controller output (Vrmax) (> ExcREXS.vrmin). Typical value = 47.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub vrmax: Option<f64>,
108    /// Minimum controller output (Vrmin) (< ExcREXS.vrmax). Typical value = -20.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub vrmin: Option<f64>,
111    /// Exciter compounding reactance (Xc). Typical value = 0.
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub xc: Option<f64>,
114}
115impl crate::base::CimElement for ExcREXS {
116    fn mrid(&self) -> &str { &self.base.base.base.id }
117    fn type_name(&self) -> &'static str { "ExcREXS" }
118    fn as_any(&self) -> &dyn std::any::Any { self }
119    fn to_json_value(&self) -> serde_json::Value {
120        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
121    }
122    fn to_block(&self) -> crate::base::RdfBlock {
123        let mut block = self.base.to_block();
124        block.type_name = "ExcREXS".to_string();
125        if let Some(v) = self.e1 {
126            block.fields.insert("ExcREXS.e1".into(), crate::base::FieldValue::Text(v.to_string()));
127        }
128        if let Some(v) = self.e2 {
129            block.fields.insert("ExcREXS.e2".into(), crate::base::FieldValue::Text(v.to_string()));
130        }
131        if let Some(ref v) = self.fbf {
132            block.fields.insert("ExcREXS.fbf".into(), crate::base::FieldValue::Resource(v.uri.clone()));
133        }
134        if let Some(v) = self.flimf {
135            block.fields.insert("ExcREXS.flimf".into(), crate::base::FieldValue::Text(v.to_string()));
136        }
137        if let Some(v) = self.kc {
138            block.fields.insert("ExcREXS.kc".into(), crate::base::FieldValue::Text(v.to_string()));
139        }
140        if let Some(v) = self.kd {
141            block.fields.insert("ExcREXS.kd".into(), crate::base::FieldValue::Text(v.to_string()));
142        }
143        if let Some(v) = self.ke {
144            block.fields.insert("ExcREXS.ke".into(), crate::base::FieldValue::Text(v.to_string()));
145        }
146        if let Some(v) = self.kefd {
147            block.fields.insert("ExcREXS.kefd".into(), crate::base::FieldValue::Text(v.to_string()));
148        }
149        if let Some(v) = self.kf {
150            block.fields.insert("ExcREXS.kf".into(), crate::base::FieldValue::Text(v.to_string()));
151        }
152        if let Some(v) = self.kh {
153            block.fields.insert("ExcREXS.kh".into(), crate::base::FieldValue::Text(v.to_string()));
154        }
155        if let Some(v) = self.kii {
156            block.fields.insert("ExcREXS.kii".into(), crate::base::FieldValue::Text(v.to_string()));
157        }
158        if let Some(v) = self.kip {
159            block.fields.insert("ExcREXS.kip".into(), crate::base::FieldValue::Text(v.to_string()));
160        }
161        if let Some(v) = self.ks {
162            block.fields.insert("ExcREXS.ks".into(), crate::base::FieldValue::Text(v.to_string()));
163        }
164        if let Some(v) = self.kvi {
165            block.fields.insert("ExcREXS.kvi".into(), crate::base::FieldValue::Text(v.to_string()));
166        }
167        if let Some(v) = self.kvp {
168            block.fields.insert("ExcREXS.kvp".into(), crate::base::FieldValue::Text(v.to_string()));
169        }
170        if let Some(v) = self.kvphz {
171            block.fields.insert("ExcREXS.kvphz".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.nvphz {
174            block.fields.insert("ExcREXS.nvphz".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.se1 {
177            block.fields.insert("ExcREXS.se1".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        if let Some(v) = self.se2 {
180            block.fields.insert("ExcREXS.se2".into(), crate::base::FieldValue::Text(v.to_string()));
181        }
182        if let Some(v) = self.ta {
183            block.fields.insert("ExcREXS.ta".into(), crate::base::FieldValue::Text(v.to_string()));
184        }
185        if let Some(v) = self.tb1 {
186            block.fields.insert("ExcREXS.tb1".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.tb2 {
189            block.fields.insert("ExcREXS.tb2".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.tc1 {
192            block.fields.insert("ExcREXS.tc1".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.tc2 {
195            block.fields.insert("ExcREXS.tc2".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.te {
198            block.fields.insert("ExcREXS.te".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.tf {
201            block.fields.insert("ExcREXS.tf".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.tf1 {
204            block.fields.insert("ExcREXS.tf1".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.tf2 {
207            block.fields.insert("ExcREXS.tf2".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.tp {
210            block.fields.insert("ExcREXS.tp".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.vcmax {
213            block.fields.insert("ExcREXS.vcmax".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.vfmax {
216            block.fields.insert("ExcREXS.vfmax".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.vfmin {
219            block.fields.insert("ExcREXS.vfmin".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.vimax {
222            block.fields.insert("ExcREXS.vimax".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.vrmax {
225            block.fields.insert("ExcREXS.vrmax".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        if let Some(v) = self.vrmin {
228            block.fields.insert("ExcREXS.vrmin".into(), crate::base::FieldValue::Text(v.to_string()));
229        }
230        if let Some(v) = self.xc {
231            block.fields.insert("ExcREXS.xc".into(), crate::base::FieldValue::Text(v.to_string()));
232        }
233        block
234    }
235}
236
237impl ExcREXS {
238    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
239        let mut obj = Self::default();
240        obj.base.base.base.id.clone_from(&b.mrid);
241        for (key, val) in &b.fields {
242            match key.as_str() {
243                "ExcREXS.e1" => {
244                    match val {
245                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.e1 = Some(v); } }
246                        crate::base::FieldValue::TextList(svs) => {
247                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.e1 = Some(v); } }
248                        }
249                        _ => {}
250                    }
251                }
252                "ExcREXS.e2" => {
253                    match val {
254                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.e2 = Some(v); } }
255                        crate::base::FieldValue::TextList(svs) => {
256                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.e2 = Some(v); } }
257                        }
258                        _ => {}
259                    }
260                }
261                "ExcREXS.fbf" => {
262                    if let crate::base::FieldValue::Resource(sv) = val {
263                        obj.fbf = Some(crate::base::UriRef { uri: sv.clone() });
264                    }
265                }
266                "ExcREXS.flimf" => {
267                    match val {
268                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flimf = Some(v); } }
269                        crate::base::FieldValue::TextList(svs) => {
270                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flimf = Some(v); } }
271                        }
272                        _ => {}
273                    }
274                }
275                "ExcREXS.kc" => {
276                    match val {
277                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kc = Some(v); } }
278                        crate::base::FieldValue::TextList(svs) => {
279                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kc = Some(v); } }
280                        }
281                        _ => {}
282                    }
283                }
284                "ExcREXS.kd" => {
285                    match val {
286                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kd = Some(v); } }
287                        crate::base::FieldValue::TextList(svs) => {
288                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kd = Some(v); } }
289                        }
290                        _ => {}
291                    }
292                }
293                "ExcREXS.ke" => {
294                    match val {
295                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ke = Some(v); } }
296                        crate::base::FieldValue::TextList(svs) => {
297                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ke = Some(v); } }
298                        }
299                        _ => {}
300                    }
301                }
302                "ExcREXS.kefd" => {
303                    match val {
304                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kefd = Some(v); } }
305                        crate::base::FieldValue::TextList(svs) => {
306                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kefd = Some(v); } }
307                        }
308                        _ => {}
309                    }
310                }
311                "ExcREXS.kf" => {
312                    match val {
313                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kf = Some(v); } }
314                        crate::base::FieldValue::TextList(svs) => {
315                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kf = Some(v); } }
316                        }
317                        _ => {}
318                    }
319                }
320                "ExcREXS.kh" => {
321                    match val {
322                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kh = Some(v); } }
323                        crate::base::FieldValue::TextList(svs) => {
324                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kh = Some(v); } }
325                        }
326                        _ => {}
327                    }
328                }
329                "ExcREXS.kii" => {
330                    match val {
331                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kii = Some(v); } }
332                        crate::base::FieldValue::TextList(svs) => {
333                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kii = Some(v); } }
334                        }
335                        _ => {}
336                    }
337                }
338                "ExcREXS.kip" => {
339                    match val {
340                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kip = Some(v); } }
341                        crate::base::FieldValue::TextList(svs) => {
342                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kip = Some(v); } }
343                        }
344                        _ => {}
345                    }
346                }
347                "ExcREXS.ks" => {
348                    match val {
349                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ks = Some(v); } }
350                        crate::base::FieldValue::TextList(svs) => {
351                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ks = Some(v); } }
352                        }
353                        _ => {}
354                    }
355                }
356                "ExcREXS.kvi" => {
357                    match val {
358                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kvi = Some(v); } }
359                        crate::base::FieldValue::TextList(svs) => {
360                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kvi = Some(v); } }
361                        }
362                        _ => {}
363                    }
364                }
365                "ExcREXS.kvp" => {
366                    match val {
367                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kvp = Some(v); } }
368                        crate::base::FieldValue::TextList(svs) => {
369                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kvp = Some(v); } }
370                        }
371                        _ => {}
372                    }
373                }
374                "ExcREXS.kvphz" => {
375                    match val {
376                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kvphz = Some(v); } }
377                        crate::base::FieldValue::TextList(svs) => {
378                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kvphz = Some(v); } }
379                        }
380                        _ => {}
381                    }
382                }
383                "ExcREXS.nvphz" => {
384                    match val {
385                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.nvphz = Some(v); } }
386                        crate::base::FieldValue::TextList(svs) => {
387                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.nvphz = Some(v); } }
388                        }
389                        _ => {}
390                    }
391                }
392                "ExcREXS.se1" => {
393                    match val {
394                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.se1 = Some(v); } }
395                        crate::base::FieldValue::TextList(svs) => {
396                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.se1 = Some(v); } }
397                        }
398                        _ => {}
399                    }
400                }
401                "ExcREXS.se2" => {
402                    match val {
403                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.se2 = Some(v); } }
404                        crate::base::FieldValue::TextList(svs) => {
405                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.se2 = Some(v); } }
406                        }
407                        _ => {}
408                    }
409                }
410                "ExcREXS.ta" => {
411                    match val {
412                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
413                        crate::base::FieldValue::TextList(svs) => {
414                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
415                        }
416                        _ => {}
417                    }
418                }
419                "ExcREXS.tb1" => {
420                    match val {
421                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tb1 = Some(v); } }
422                        crate::base::FieldValue::TextList(svs) => {
423                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tb1 = Some(v); } }
424                        }
425                        _ => {}
426                    }
427                }
428                "ExcREXS.tb2" => {
429                    match val {
430                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tb2 = Some(v); } }
431                        crate::base::FieldValue::TextList(svs) => {
432                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tb2 = Some(v); } }
433                        }
434                        _ => {}
435                    }
436                }
437                "ExcREXS.tc1" => {
438                    match val {
439                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tc1 = Some(v); } }
440                        crate::base::FieldValue::TextList(svs) => {
441                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tc1 = Some(v); } }
442                        }
443                        _ => {}
444                    }
445                }
446                "ExcREXS.tc2" => {
447                    match val {
448                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tc2 = Some(v); } }
449                        crate::base::FieldValue::TextList(svs) => {
450                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tc2 = Some(v); } }
451                        }
452                        _ => {}
453                    }
454                }
455                "ExcREXS.te" => {
456                    match val {
457                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.te = Some(v); } }
458                        crate::base::FieldValue::TextList(svs) => {
459                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.te = Some(v); } }
460                        }
461                        _ => {}
462                    }
463                }
464                "ExcREXS.tf" => {
465                    match val {
466                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf = Some(v); } }
467                        crate::base::FieldValue::TextList(svs) => {
468                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf = Some(v); } }
469                        }
470                        _ => {}
471                    }
472                }
473                "ExcREXS.tf1" => {
474                    match val {
475                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
476                        crate::base::FieldValue::TextList(svs) => {
477                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
478                        }
479                        _ => {}
480                    }
481                }
482                "ExcREXS.tf2" => {
483                    match val {
484                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
485                        crate::base::FieldValue::TextList(svs) => {
486                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
487                        }
488                        _ => {}
489                    }
490                }
491                "ExcREXS.tp" => {
492                    match val {
493                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
494                        crate::base::FieldValue::TextList(svs) => {
495                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
496                        }
497                        _ => {}
498                    }
499                }
500                "ExcREXS.vcmax" => {
501                    match val {
502                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vcmax = Some(v); } }
503                        crate::base::FieldValue::TextList(svs) => {
504                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vcmax = Some(v); } }
505                        }
506                        _ => {}
507                    }
508                }
509                "ExcREXS.vfmax" => {
510                    match val {
511                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vfmax = Some(v); } }
512                        crate::base::FieldValue::TextList(svs) => {
513                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vfmax = Some(v); } }
514                        }
515                        _ => {}
516                    }
517                }
518                "ExcREXS.vfmin" => {
519                    match val {
520                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vfmin = Some(v); } }
521                        crate::base::FieldValue::TextList(svs) => {
522                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vfmin = Some(v); } }
523                        }
524                        _ => {}
525                    }
526                }
527                "ExcREXS.vimax" => {
528                    match val {
529                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vimax = Some(v); } }
530                        crate::base::FieldValue::TextList(svs) => {
531                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vimax = Some(v); } }
532                        }
533                        _ => {}
534                    }
535                }
536                "ExcREXS.vrmax" => {
537                    match val {
538                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vrmax = Some(v); } }
539                        crate::base::FieldValue::TextList(svs) => {
540                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vrmax = Some(v); } }
541                        }
542                        _ => {}
543                    }
544                }
545                "ExcREXS.vrmin" => {
546                    match val {
547                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vrmin = Some(v); } }
548                        crate::base::FieldValue::TextList(svs) => {
549                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vrmin = Some(v); } }
550                        }
551                        _ => {}
552                    }
553                }
554                "ExcREXS.xc" => {
555                    match val {
556                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.xc = Some(v); } }
557                        crate::base::FieldValue::TextList(svs) => {
558                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.xc = Some(v); } }
559                        }
560                        _ => {}
561                    }
562                }
563                "ExcitationSystemDynamics.SynchronousMachineDynamics" => {
564                    if let crate::base::FieldValue::Resource(sv) = val {
565                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
566                    }
567                }
568                "DynamicsFunctionBlock.enabled" => {
569                    match val {
570                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
571                        crate::base::FieldValue::TextList(svs) => {
572                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
573                        }
574                        _ => {}
575                    }
576                }
577                "IdentifiedObject.description" => {
578                    match val {
579                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
580                        crate::base::FieldValue::TextList(svs) => {
581                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
582                        }
583                        _ => {}
584                    }
585                }
586                "IdentifiedObject.energyIdentCodeEic" => {
587                    match val {
588                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
589                        crate::base::FieldValue::TextList(svs) => {
590                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
591                        }
592                        _ => {}
593                    }
594                }
595                "IdentifiedObject.mRID" => {
596                    match val {
597                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
598                        crate::base::FieldValue::TextList(svs) => {
599                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
600                        }
601                        _ => {}
602                    }
603                }
604                "IdentifiedObject.name" => {
605                    match val {
606                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
607                        crate::base::FieldValue::TextList(svs) => {
608                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
609                        }
610                        _ => {}
611                    }
612                }
613                "IdentifiedObject.shortName" => {
614                    match val {
615                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
616                        crate::base::FieldValue::TextList(svs) => {
617                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
618                        }
619                        _ => {}
620                    }
621                }
622                _ => {}
623            }
624        }
625        obj
626    }
627}