Skip to main content

cimstructs/
GovHydroR.rs

1/// Fourth order lead-lag governor and hydro turbine.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovHydroR {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Turbine gain (At). Typical value = 1,2.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub at: Option<f64>,
9    /// Intentional dead-band width (db1). Unit = Hz. Typical value = 0.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub db1: Option<f64>,
12    /// Unintentional dead-band (db2). Unit = MW. Typical value = 0.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub db2: Option<f64>,
15    /// Turbine damping factor (Dturb). Typical value = 0,2.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub dturb: Option<f64>,
18    /// Intentional db hysteresis (eps). Unit = Hz. Typical value = 0.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub eps: Option<f64>,
21    /// Maximum governor output (Gmax) (> GovHydroR.gmin). Typical value = 1,05.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub gmax: Option<f64>,
24    /// Minimum governor output (Gmin) (< GovHydroR.gmax). Typical value = -0,05.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub gmin: Option<f64>,
27    /// Nonlinear gain point 1, PU gv (Gv1). Typical value = 0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub gv1: Option<f64>,
30    /// Nonlinear gain point 2, PU gv (Gv2). Typical value = 0.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub gv2: Option<f64>,
33    /// Nonlinear gain point 3, PU gv (Gv3). Typical value = 0.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub gv3: Option<f64>,
36    /// Nonlinear gain point 4, PU gv (Gv4). Typical value = 0.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub gv4: Option<f64>,
39    /// Nonlinear gain point 5, PU gv (Gv5). Typical value = 0.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub gv5: Option<f64>,
42    /// Nonlinear gain point 6, PU gv (Gv6). Typical value = 0.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub gv6: Option<f64>,
45    /// Turbine nominal head (H0). Typical value = 1.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub h0: Option<f64>,
48    /// Input signal switch (Flag). true = Pe input is used false = feedback is received from CV. Flag is normally dependent on Tt. If Tt is zero, Flag is set to false. If Tt is not zero, Flag is set to true. Typical value = true.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub input_signal: Option<bool>,
51    /// Gate servo gain (Kg). Typical value = 2.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub kg: Option<f64>,
54    /// Integral gain (Ki). Typical value = 0,5.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub ki: Option<f64>,
57    /// Base for power values (MWbase) (> 0). Unit = MW.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub mwbase: Option<f64>,
60    /// Nonlinear gain point 1, PU power (Pgv1). Typical value = 0.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub pgv1: Option<f64>,
63    /// Nonlinear gain point 2, PU power (Pgv2). Typical value = 0.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub pgv2: Option<f64>,
66    /// Nonlinear gain point 3, PU power (Pgv3). Typical value = 0.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub pgv3: Option<f64>,
69    /// Nonlinear gain point 4, PU power (Pgv4). Typical value = 0.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub pgv4: Option<f64>,
72    /// Nonlinear gain point 5, PU power (Pgv5). Typical value = 0.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub pgv5: Option<f64>,
75    /// Nonlinear gain point 6, PU power (Pgv6). Typical value = 0.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub pgv6: Option<f64>,
78    /// Maximum gate opening, PU of MWbase (Pmax) (> GovHydroR.pmin). Typical value = 1.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub pmax: Option<f64>,
81    /// Minimum gate opening, PU of MWbase (Pmin) (< GovHydroR.pmax). Typical value = 0.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub pmin: Option<f64>,
84    /// No-load turbine flow at nominal head (Qnl). Typical value = 0,08.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub qnl: Option<f64>,
87    /// Steady-state droop (R). Typical value = 0,05.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub r: Option<f64>,
90    /// Lead time constant 1 (T1) (>= 0). Typical value = 1,5.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub t1: Option<f64>,
93    /// Lag time constant 1 (T2) (>= 0). Typical value = 0,1.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub t2: Option<f64>,
96    /// Lead time constant 2 (T3) (>= 0). Typical value = 1,5.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub t3: Option<f64>,
99    /// Lag time constant 2 (T4) (>= 0). Typical value = 0,1.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub t4: Option<f64>,
102    /// Lead time constant 3 (T5) (>= 0). Typical value = 0.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub t5: Option<f64>,
105    /// Lag time constant 3 (T6) (>= 0). Typical value = 0,05.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub t6: Option<f64>,
108    /// Lead time constant 4 (T7) (>= 0). Typical value = 0.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub t7: Option<f64>,
111    /// Lag time constant 4 (T8) (>= 0). Typical value = 0,05.
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub t8: Option<f64>,
114    /// Input filter time constant (Td) (>= 0). Typical value = 0,05.
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub td: Option<f64>,
117    /// Gate servo time constant (Tp) (>= 0). Typical value = 0,05.
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub tp: Option<f64>,
120    /// Power feedback time constant (Tt) (>= 0). Typical value = 0.
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub tt: Option<f64>,
123    /// Water inertia time constant (Tw) (> 0). Typical value = 1.
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub tw: Option<f64>,
126    /// Maximum gate closing velocity (Velcl). Unit = PU / s. Typical value = -0,2.
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub velcl: Option<f64>,
129    /// Maximum gate opening velocity (Velop). Unit = PU / s. Typical value = 0,2.
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub velop: Option<f64>,
132}
133impl crate::base::CimElement for GovHydroR {
134    fn mrid(&self) -> &str { &self.base.base.base.id }
135    fn type_name(&self) -> &'static str { "GovHydroR" }
136    fn as_any(&self) -> &dyn std::any::Any { self }
137    fn to_json_value(&self) -> serde_json::Value {
138        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
139    }
140    fn to_block(&self) -> crate::base::RdfBlock {
141        let mut block = self.base.to_block();
142        block.type_name = "GovHydroR".to_string();
143        if let Some(v) = self.at {
144            block.fields.insert("GovHydroR.at".into(), crate::base::FieldValue::Text(v.to_string()));
145        }
146        if let Some(v) = self.db1 {
147            block.fields.insert("GovHydroR.db1".into(), crate::base::FieldValue::Text(v.to_string()));
148        }
149        if let Some(v) = self.db2 {
150            block.fields.insert("GovHydroR.db2".into(), crate::base::FieldValue::Text(v.to_string()));
151        }
152        if let Some(v) = self.dturb {
153            block.fields.insert("GovHydroR.dturb".into(), crate::base::FieldValue::Text(v.to_string()));
154        }
155        if let Some(v) = self.eps {
156            block.fields.insert("GovHydroR.eps".into(), crate::base::FieldValue::Text(v.to_string()));
157        }
158        if let Some(v) = self.gmax {
159            block.fields.insert("GovHydroR.gmax".into(), crate::base::FieldValue::Text(v.to_string()));
160        }
161        if let Some(v) = self.gmin {
162            block.fields.insert("GovHydroR.gmin".into(), crate::base::FieldValue::Text(v.to_string()));
163        }
164        if let Some(v) = self.gv1 {
165            block.fields.insert("GovHydroR.gv1".into(), crate::base::FieldValue::Text(v.to_string()));
166        }
167        if let Some(v) = self.gv2 {
168            block.fields.insert("GovHydroR.gv2".into(), crate::base::FieldValue::Text(v.to_string()));
169        }
170        if let Some(v) = self.gv3 {
171            block.fields.insert("GovHydroR.gv3".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.gv4 {
174            block.fields.insert("GovHydroR.gv4".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.gv5 {
177            block.fields.insert("GovHydroR.gv5".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        if let Some(v) = self.gv6 {
180            block.fields.insert("GovHydroR.gv6".into(), crate::base::FieldValue::Text(v.to_string()));
181        }
182        if let Some(v) = self.h0 {
183            block.fields.insert("GovHydroR.h0".into(), crate::base::FieldValue::Text(v.to_string()));
184        }
185        if let Some(v) = self.input_signal {
186            block.fields.insert("GovHydroR.inputSignal".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.kg {
189            block.fields.insert("GovHydroR.kg".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.ki {
192            block.fields.insert("GovHydroR.ki".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.mwbase {
195            block.fields.insert("GovHydroR.mwbase".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.pgv1 {
198            block.fields.insert("GovHydroR.pgv1".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.pgv2 {
201            block.fields.insert("GovHydroR.pgv2".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.pgv3 {
204            block.fields.insert("GovHydroR.pgv3".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.pgv4 {
207            block.fields.insert("GovHydroR.pgv4".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.pgv5 {
210            block.fields.insert("GovHydroR.pgv5".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.pgv6 {
213            block.fields.insert("GovHydroR.pgv6".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.pmax {
216            block.fields.insert("GovHydroR.pmax".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.pmin {
219            block.fields.insert("GovHydroR.pmin".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.qnl {
222            block.fields.insert("GovHydroR.qnl".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.r {
225            block.fields.insert("GovHydroR.r".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        if let Some(v) = self.t1 {
228            block.fields.insert("GovHydroR.t1".into(), crate::base::FieldValue::Text(v.to_string()));
229        }
230        if let Some(v) = self.t2 {
231            block.fields.insert("GovHydroR.t2".into(), crate::base::FieldValue::Text(v.to_string()));
232        }
233        if let Some(v) = self.t3 {
234            block.fields.insert("GovHydroR.t3".into(), crate::base::FieldValue::Text(v.to_string()));
235        }
236        if let Some(v) = self.t4 {
237            block.fields.insert("GovHydroR.t4".into(), crate::base::FieldValue::Text(v.to_string()));
238        }
239        if let Some(v) = self.t5 {
240            block.fields.insert("GovHydroR.t5".into(), crate::base::FieldValue::Text(v.to_string()));
241        }
242        if let Some(v) = self.t6 {
243            block.fields.insert("GovHydroR.t6".into(), crate::base::FieldValue::Text(v.to_string()));
244        }
245        if let Some(v) = self.t7 {
246            block.fields.insert("GovHydroR.t7".into(), crate::base::FieldValue::Text(v.to_string()));
247        }
248        if let Some(v) = self.t8 {
249            block.fields.insert("GovHydroR.t8".into(), crate::base::FieldValue::Text(v.to_string()));
250        }
251        if let Some(v) = self.td {
252            block.fields.insert("GovHydroR.td".into(), crate::base::FieldValue::Text(v.to_string()));
253        }
254        if let Some(v) = self.tp {
255            block.fields.insert("GovHydroR.tp".into(), crate::base::FieldValue::Text(v.to_string()));
256        }
257        if let Some(v) = self.tt {
258            block.fields.insert("GovHydroR.tt".into(), crate::base::FieldValue::Text(v.to_string()));
259        }
260        if let Some(v) = self.tw {
261            block.fields.insert("GovHydroR.tw".into(), crate::base::FieldValue::Text(v.to_string()));
262        }
263        if let Some(v) = self.velcl {
264            block.fields.insert("GovHydroR.velcl".into(), crate::base::FieldValue::Text(v.to_string()));
265        }
266        if let Some(v) = self.velop {
267            block.fields.insert("GovHydroR.velop".into(), crate::base::FieldValue::Text(v.to_string()));
268        }
269        block
270    }
271}
272
273impl GovHydroR {
274    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
275        let mut obj = Self::default();
276        obj.base.base.base.id.clone_from(&b.mrid);
277        for (key, val) in &b.fields {
278            match key.as_str() {
279                "GovHydroR.at" => {
280                    match val {
281                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.at = Some(v); } }
282                        crate::base::FieldValue::TextList(svs) => {
283                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.at = Some(v); } }
284                        }
285                        _ => {}
286                    }
287                }
288                "GovHydroR.db1" => {
289                    match val {
290                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
291                        crate::base::FieldValue::TextList(svs) => {
292                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db1 = Some(v); } }
293                        }
294                        _ => {}
295                    }
296                }
297                "GovHydroR.db2" => {
298                    match val {
299                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db2 = Some(v); } }
300                        crate::base::FieldValue::TextList(svs) => {
301                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db2 = Some(v); } }
302                        }
303                        _ => {}
304                    }
305                }
306                "GovHydroR.dturb" => {
307                    match val {
308                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.dturb = Some(v); } }
309                        crate::base::FieldValue::TextList(svs) => {
310                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.dturb = Some(v); } }
311                        }
312                        _ => {}
313                    }
314                }
315                "GovHydroR.eps" => {
316                    match val {
317                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.eps = Some(v); } }
318                        crate::base::FieldValue::TextList(svs) => {
319                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.eps = Some(v); } }
320                        }
321                        _ => {}
322                    }
323                }
324                "GovHydroR.gmax" => {
325                    match val {
326                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gmax = Some(v); } }
327                        crate::base::FieldValue::TextList(svs) => {
328                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gmax = Some(v); } }
329                        }
330                        _ => {}
331                    }
332                }
333                "GovHydroR.gmin" => {
334                    match val {
335                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gmin = Some(v); } }
336                        crate::base::FieldValue::TextList(svs) => {
337                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gmin = Some(v); } }
338                        }
339                        _ => {}
340                    }
341                }
342                "GovHydroR.gv1" => {
343                    match val {
344                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv1 = Some(v); } }
345                        crate::base::FieldValue::TextList(svs) => {
346                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv1 = Some(v); } }
347                        }
348                        _ => {}
349                    }
350                }
351                "GovHydroR.gv2" => {
352                    match val {
353                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv2 = Some(v); } }
354                        crate::base::FieldValue::TextList(svs) => {
355                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv2 = Some(v); } }
356                        }
357                        _ => {}
358                    }
359                }
360                "GovHydroR.gv3" => {
361                    match val {
362                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv3 = Some(v); } }
363                        crate::base::FieldValue::TextList(svs) => {
364                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv3 = Some(v); } }
365                        }
366                        _ => {}
367                    }
368                }
369                "GovHydroR.gv4" => {
370                    match val {
371                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv4 = Some(v); } }
372                        crate::base::FieldValue::TextList(svs) => {
373                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv4 = Some(v); } }
374                        }
375                        _ => {}
376                    }
377                }
378                "GovHydroR.gv5" => {
379                    match val {
380                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv5 = Some(v); } }
381                        crate::base::FieldValue::TextList(svs) => {
382                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv5 = Some(v); } }
383                        }
384                        _ => {}
385                    }
386                }
387                "GovHydroR.gv6" => {
388                    match val {
389                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gv6 = Some(v); } }
390                        crate::base::FieldValue::TextList(svs) => {
391                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gv6 = Some(v); } }
392                        }
393                        _ => {}
394                    }
395                }
396                "GovHydroR.h0" => {
397                    match val {
398                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.h0 = Some(v); } }
399                        crate::base::FieldValue::TextList(svs) => {
400                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.h0 = Some(v); } }
401                        }
402                        _ => {}
403                    }
404                }
405                "GovHydroR.inputSignal" => {
406                    match val {
407                        crate::base::FieldValue::Text(sv) => { obj.input_signal = Some(sv.trim() == "true"); }
408                        crate::base::FieldValue::TextList(svs) => {
409                            if let Some(sv) = svs.last() { obj.input_signal = Some(sv.trim() == "true"); }
410                        }
411                        _ => {}
412                    }
413                }
414                "GovHydroR.kg" => {
415                    match val {
416                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
417                        crate::base::FieldValue::TextList(svs) => {
418                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kg = Some(v); } }
419                        }
420                        _ => {}
421                    }
422                }
423                "GovHydroR.ki" => {
424                    match val {
425                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ki = Some(v); } }
426                        crate::base::FieldValue::TextList(svs) => {
427                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ki = Some(v); } }
428                        }
429                        _ => {}
430                    }
431                }
432                "GovHydroR.mwbase" => {
433                    match val {
434                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
435                        crate::base::FieldValue::TextList(svs) => {
436                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
437                        }
438                        _ => {}
439                    }
440                }
441                "GovHydroR.pgv1" => {
442                    match val {
443                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv1 = Some(v); } }
444                        crate::base::FieldValue::TextList(svs) => {
445                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv1 = Some(v); } }
446                        }
447                        _ => {}
448                    }
449                }
450                "GovHydroR.pgv2" => {
451                    match val {
452                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv2 = Some(v); } }
453                        crate::base::FieldValue::TextList(svs) => {
454                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv2 = Some(v); } }
455                        }
456                        _ => {}
457                    }
458                }
459                "GovHydroR.pgv3" => {
460                    match val {
461                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv3 = Some(v); } }
462                        crate::base::FieldValue::TextList(svs) => {
463                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv3 = Some(v); } }
464                        }
465                        _ => {}
466                    }
467                }
468                "GovHydroR.pgv4" => {
469                    match val {
470                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv4 = Some(v); } }
471                        crate::base::FieldValue::TextList(svs) => {
472                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv4 = Some(v); } }
473                        }
474                        _ => {}
475                    }
476                }
477                "GovHydroR.pgv5" => {
478                    match val {
479                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv5 = Some(v); } }
480                        crate::base::FieldValue::TextList(svs) => {
481                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv5 = Some(v); } }
482                        }
483                        _ => {}
484                    }
485                }
486                "GovHydroR.pgv6" => {
487                    match val {
488                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pgv6 = Some(v); } }
489                        crate::base::FieldValue::TextList(svs) => {
490                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pgv6 = Some(v); } }
491                        }
492                        _ => {}
493                    }
494                }
495                "GovHydroR.pmax" => {
496                    match val {
497                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pmax = Some(v); } }
498                        crate::base::FieldValue::TextList(svs) => {
499                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pmax = Some(v); } }
500                        }
501                        _ => {}
502                    }
503                }
504                "GovHydroR.pmin" => {
505                    match val {
506                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pmin = Some(v); } }
507                        crate::base::FieldValue::TextList(svs) => {
508                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pmin = Some(v); } }
509                        }
510                        _ => {}
511                    }
512                }
513                "GovHydroR.qnl" => {
514                    match val {
515                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.qnl = Some(v); } }
516                        crate::base::FieldValue::TextList(svs) => {
517                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.qnl = Some(v); } }
518                        }
519                        _ => {}
520                    }
521                }
522                "GovHydroR.r" => {
523                    match val {
524                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
525                        crate::base::FieldValue::TextList(svs) => {
526                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
527                        }
528                        _ => {}
529                    }
530                }
531                "GovHydroR.t1" => {
532                    match val {
533                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t1 = Some(v); } }
534                        crate::base::FieldValue::TextList(svs) => {
535                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t1 = Some(v); } }
536                        }
537                        _ => {}
538                    }
539                }
540                "GovHydroR.t2" => {
541                    match val {
542                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
543                        crate::base::FieldValue::TextList(svs) => {
544                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
545                        }
546                        _ => {}
547                    }
548                }
549                "GovHydroR.t3" => {
550                    match val {
551                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
552                        crate::base::FieldValue::TextList(svs) => {
553                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
554                        }
555                        _ => {}
556                    }
557                }
558                "GovHydroR.t4" => {
559                    match val {
560                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t4 = Some(v); } }
561                        crate::base::FieldValue::TextList(svs) => {
562                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t4 = Some(v); } }
563                        }
564                        _ => {}
565                    }
566                }
567                "GovHydroR.t5" => {
568                    match val {
569                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t5 = Some(v); } }
570                        crate::base::FieldValue::TextList(svs) => {
571                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t5 = Some(v); } }
572                        }
573                        _ => {}
574                    }
575                }
576                "GovHydroR.t6" => {
577                    match val {
578                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t6 = Some(v); } }
579                        crate::base::FieldValue::TextList(svs) => {
580                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t6 = Some(v); } }
581                        }
582                        _ => {}
583                    }
584                }
585                "GovHydroR.t7" => {
586                    match val {
587                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t7 = Some(v); } }
588                        crate::base::FieldValue::TextList(svs) => {
589                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t7 = Some(v); } }
590                        }
591                        _ => {}
592                    }
593                }
594                "GovHydroR.t8" => {
595                    match val {
596                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t8 = Some(v); } }
597                        crate::base::FieldValue::TextList(svs) => {
598                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t8 = Some(v); } }
599                        }
600                        _ => {}
601                    }
602                }
603                "GovHydroR.td" => {
604                    match val {
605                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
606                        crate::base::FieldValue::TextList(svs) => {
607                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
608                        }
609                        _ => {}
610                    }
611                }
612                "GovHydroR.tp" => {
613                    match val {
614                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
615                        crate::base::FieldValue::TextList(svs) => {
616                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tp = Some(v); } }
617                        }
618                        _ => {}
619                    }
620                }
621                "GovHydroR.tt" => {
622                    match val {
623                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tt = Some(v); } }
624                        crate::base::FieldValue::TextList(svs) => {
625                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tt = Some(v); } }
626                        }
627                        _ => {}
628                    }
629                }
630                "GovHydroR.tw" => {
631                    match val {
632                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tw = Some(v); } }
633                        crate::base::FieldValue::TextList(svs) => {
634                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tw = Some(v); } }
635                        }
636                        _ => {}
637                    }
638                }
639                "GovHydroR.velcl" => {
640                    match val {
641                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.velcl = Some(v); } }
642                        crate::base::FieldValue::TextList(svs) => {
643                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.velcl = Some(v); } }
644                        }
645                        _ => {}
646                    }
647                }
648                "GovHydroR.velop" => {
649                    match val {
650                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.velop = Some(v); } }
651                        crate::base::FieldValue::TextList(svs) => {
652                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.velop = Some(v); } }
653                        }
654                        _ => {}
655                    }
656                }
657                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
658                    if let crate::base::FieldValue::Resource(sv) = val {
659                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
660                    }
661                }
662                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
663                    if let crate::base::FieldValue::Resource(sv) = val {
664                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
665                    }
666                }
667                "DynamicsFunctionBlock.enabled" => {
668                    match val {
669                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
670                        crate::base::FieldValue::TextList(svs) => {
671                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
672                        }
673                        _ => {}
674                    }
675                }
676                "IdentifiedObject.description" => {
677                    match val {
678                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
679                        crate::base::FieldValue::TextList(svs) => {
680                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
681                        }
682                        _ => {}
683                    }
684                }
685                "IdentifiedObject.energyIdentCodeEic" => {
686                    match val {
687                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
688                        crate::base::FieldValue::TextList(svs) => {
689                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
690                        }
691                        _ => {}
692                    }
693                }
694                "IdentifiedObject.mRID" => {
695                    match val {
696                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
697                        crate::base::FieldValue::TextList(svs) => {
698                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
699                        }
700                        _ => {}
701                    }
702                }
703                "IdentifiedObject.name" => {
704                    match val {
705                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
706                        crate::base::FieldValue::TextList(svs) => {
707                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
708                        }
709                        _ => {}
710                    }
711                }
712                "IdentifiedObject.shortName" => {
713                    match val {
714                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
715                        crate::base::FieldValue::TextList(svs) => {
716                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
717                        }
718                        _ => {}
719                    }
720                }
721                _ => {}
722            }
723        }
724        obj
725    }
726}