Skip to main content

cimstructs/
GovCT1.rs

1/// General model for any prime mover with a PID governor, used primarily for combustion turbine and combined cycle units. This model can be used to represent a variety of prime movers controlled by PID governors. It is suitable, for example, for the representation of: gas turbine and single shaft combined cycle turbines diesel engines with modern electronic or digital governors steam turbines where steam is supplied from a large boiler drum or a large header whose pressure is substantially constant over the period under study simple hydro turbines in dam configurations where the water column length is short and water inertia effects are minimal. Additional information on this model is available in the 2012 IEEE report, Dynamic Models for Turbine-Governors in Power System Studies, 3.1.2.3 pages 3-4 (GGOV1).
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovCT1 {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Acceleration limiter setpoint (Aset). Unit = PU / s. Typical value = 0,01.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub aset: Option<f64>,
9    /// Speed governor deadband in PU speed (db). In the majority of applications, it is recommended that this value be set to zero. Typical value = 0.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub db: Option<f64>,
12    /// Speed sensitivity coefficient (Dm). Dm can represent either the variation of the engine power with the shaft speed or the variation of maximum power capability with shaft speed. If it is positive it describes the falling slope of the engine speed verses power characteristic as speed increases. A slightly falling characteristic is typical for reciprocating engines and some aero-derivative turbines. If it is negative the engine power is assumed to be unaffected by the shaft speed, but the maximum permissible fuel flow is taken to fall with falling shaft speed. This is characteristic of single-shaft industrial turbines due to exhaust temperature limits. Typical value = 0.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub dm: Option<f64>,
15    /// Acceleration limiter gain (Ka). Typical value = 10.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub ka: Option<f64>,
18    /// Governor derivative gain (Kdgov). Typical value = 0.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub kdgov: Option<f64>,
21    /// Governor integral gain (Kigov). Typical value = 2.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub kigov: Option<f64>,
24    /// Load limiter integral gain for PI controller (Kiload). Typical value = 0,67.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub kiload: Option<f64>,
27    /// Power controller (reset) gain (Kimw). The default value of 0,01 corresponds to a reset time of 100 s. A value of 0,001 corresponds to a relatively slow-acting load controller. Typical value = 0,01.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub kimw: Option<f64>,
30    /// Governor proportional gain (Kpgov). Typical value = 10.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub kpgov: Option<f64>,
33    /// Load limiter proportional gain for PI controller (Kpload). Typical value = 2.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub kpload: Option<f64>,
36    /// Turbine gain (Kturb) (> 0). Typical value = 1,5.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub kturb: Option<f64>,
39    /// Load limiter reference value (Ldref). Typical value = 1.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub ldref: Option<f64>,
42    /// Maximum value for speed error signal (maxerr) (> GovCT1.minerr). Typical value = 0,05.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub maxerr: Option<f64>,
45    /// Minimum value for speed error signal (minerr) (< GovCT1.maxerr). Typical value = -0,05.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub minerr: Option<f64>,
48    /// Base for power values (MWbase) (> 0). Unit = MW.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub mwbase: Option<f64>,
51    /// Permanent droop (R). Typical value = 0,04.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub r: Option<f64>,
54    /// Minimum valve closing rate (Rclose). Unit = PU / s. Typical value = -0,1.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub rclose: Option<f64>,
57    /// Maximum rate of load limit decrease (Rdown). Typical value = -99.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub rdown: Option<f64>,
60    /// Maximum valve opening rate (Ropen). Unit = PU / s. Typical value = 0.10.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub ropen: Option<f64>,
63    /// Feedback signal for droop (Rselect). Typical value = electricalPower.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub rselect: Option<super::base::UriRef>,
66    /// Maximum rate of load limit increase (Rup). Typical value = 99.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub rup: Option<f64>,
69    /// Acceleration limiter time constant (Ta) (> 0). Typical value = 0,1.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub ta: Option<f64>,
72    /// Actuator time constant (Tact) (>= 0). Typical value = 0,5.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub tact: Option<f64>,
75    /// Turbine lag time constant (Tb) (> 0). Typical value = 0,5.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub tb: Option<f64>,
78    /// Turbine lead time constant (Tc) (>= 0). Typical value = 0.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub tc: Option<f64>,
81    /// Governor derivative controller time constant (Tdgov) (>= 0). Typical value = 1.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub tdgov: Option<f64>,
84    /// Transport time delay for diesel engine used in representing diesel engines where there is a small but measurable transport delay between a change in fuel flow setting and the development of torque (Teng) (>= 0). Teng should be zero in all but special cases where this transport delay is of particular concern. Typical value = 0.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub teng: Option<f64>,
87    /// Load-limiter time constant (Tfload) (> 0). Typical value = 3.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub tfload: Option<f64>,
90    /// Electrical power transducer time constant (Tpelec) (> 0). Typical value = 1.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub tpelec: Option<f64>,
93    /// Temperature detection lead time constant (Tsa) (>= 0). Typical value = 4.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub tsa: Option<f64>,
96    /// Temperature detection lag time constant (Tsb) (>= 0). Typical value = 5.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub tsb: Option<f64>,
99    /// Maximum valve position limit (Vmax) (> GovCT1.vmin). Typical value = 1.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub vmax: Option<f64>,
102    /// Minimum valve position limit (Vmin) (< GovCT1.vmax). Typical value = 0,15.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub vmin: Option<f64>,
105    /// No load fuel flow (Wfnl). Typical value = 0,2.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub wfnl: Option<f64>,
108    /// Switch for fuel source characteristic to recognize that fuel flow, for a given fuel valve stroke, can be proportional to engine speed (Wfspd). true = fuel flow proportional to speed (for some gas turbines and diesel engines with positive displacement fuel injectors) false = fuel control system keeps fuel flow independent of engine speed. Typical value = true.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub wfspd: Option<bool>,
111}
112impl crate::base::CimElement for GovCT1 {
113    fn mrid(&self) -> &str { &self.base.base.base.id }
114    fn type_name(&self) -> &'static str { "GovCT1" }
115    fn as_any(&self) -> &dyn std::any::Any { self }
116    fn to_json_value(&self) -> serde_json::Value {
117        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
118    }
119    fn to_block(&self) -> crate::base::RdfBlock {
120        let mut block = self.base.to_block();
121        block.type_name = "GovCT1".to_string();
122        if let Some(v) = self.aset {
123            block.fields.insert("GovCT1.aset".into(), crate::base::FieldValue::Text(v.to_string()));
124        }
125        if let Some(v) = self.db {
126            block.fields.insert("GovCT1.db".into(), crate::base::FieldValue::Text(v.to_string()));
127        }
128        if let Some(v) = self.dm {
129            block.fields.insert("GovCT1.dm".into(), crate::base::FieldValue::Text(v.to_string()));
130        }
131        if let Some(v) = self.ka {
132            block.fields.insert("GovCT1.ka".into(), crate::base::FieldValue::Text(v.to_string()));
133        }
134        if let Some(v) = self.kdgov {
135            block.fields.insert("GovCT1.kdgov".into(), crate::base::FieldValue::Text(v.to_string()));
136        }
137        if let Some(v) = self.kigov {
138            block.fields.insert("GovCT1.kigov".into(), crate::base::FieldValue::Text(v.to_string()));
139        }
140        if let Some(v) = self.kiload {
141            block.fields.insert("GovCT1.kiload".into(), crate::base::FieldValue::Text(v.to_string()));
142        }
143        if let Some(v) = self.kimw {
144            block.fields.insert("GovCT1.kimw".into(), crate::base::FieldValue::Text(v.to_string()));
145        }
146        if let Some(v) = self.kpgov {
147            block.fields.insert("GovCT1.kpgov".into(), crate::base::FieldValue::Text(v.to_string()));
148        }
149        if let Some(v) = self.kpload {
150            block.fields.insert("GovCT1.kpload".into(), crate::base::FieldValue::Text(v.to_string()));
151        }
152        if let Some(v) = self.kturb {
153            block.fields.insert("GovCT1.kturb".into(), crate::base::FieldValue::Text(v.to_string()));
154        }
155        if let Some(v) = self.ldref {
156            block.fields.insert("GovCT1.ldref".into(), crate::base::FieldValue::Text(v.to_string()));
157        }
158        if let Some(v) = self.maxerr {
159            block.fields.insert("GovCT1.maxerr".into(), crate::base::FieldValue::Text(v.to_string()));
160        }
161        if let Some(v) = self.minerr {
162            block.fields.insert("GovCT1.minerr".into(), crate::base::FieldValue::Text(v.to_string()));
163        }
164        if let Some(v) = self.mwbase {
165            block.fields.insert("GovCT1.mwbase".into(), crate::base::FieldValue::Text(v.to_string()));
166        }
167        if let Some(v) = self.r {
168            block.fields.insert("GovCT1.r".into(), crate::base::FieldValue::Text(v.to_string()));
169        }
170        if let Some(v) = self.rclose {
171            block.fields.insert("GovCT1.rclose".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.rdown {
174            block.fields.insert("GovCT1.rdown".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.ropen {
177            block.fields.insert("GovCT1.ropen".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        if let Some(ref v) = self.rselect {
180            block.fields.insert("GovCT1.rselect".into(), crate::base::FieldValue::Resource(v.uri.clone()));
181        }
182        if let Some(v) = self.rup {
183            block.fields.insert("GovCT1.rup".into(), crate::base::FieldValue::Text(v.to_string()));
184        }
185        if let Some(v) = self.ta {
186            block.fields.insert("GovCT1.ta".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.tact {
189            block.fields.insert("GovCT1.tact".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.tb {
192            block.fields.insert("GovCT1.tb".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.tc {
195            block.fields.insert("GovCT1.tc".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.tdgov {
198            block.fields.insert("GovCT1.tdgov".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.teng {
201            block.fields.insert("GovCT1.teng".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.tfload {
204            block.fields.insert("GovCT1.tfload".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.tpelec {
207            block.fields.insert("GovCT1.tpelec".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.tsa {
210            block.fields.insert("GovCT1.tsa".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.tsb {
213            block.fields.insert("GovCT1.tsb".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.vmax {
216            block.fields.insert("GovCT1.vmax".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.vmin {
219            block.fields.insert("GovCT1.vmin".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.wfnl {
222            block.fields.insert("GovCT1.wfnl".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.wfspd {
225            block.fields.insert("GovCT1.wfspd".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        block
228    }
229}
230
231impl GovCT1 {
232    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
233        let mut obj = Self::default();
234        obj.base.base.base.id.clone_from(&b.mrid);
235        for (key, val) in &b.fields {
236            match key.as_str() {
237                "GovCT1.aset" => {
238                    match val {
239                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.aset = Some(v); } }
240                        crate::base::FieldValue::TextList(svs) => {
241                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.aset = Some(v); } }
242                        }
243                        _ => {}
244                    }
245                }
246                "GovCT1.db" => {
247                    match val {
248                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db = Some(v); } }
249                        crate::base::FieldValue::TextList(svs) => {
250                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db = Some(v); } }
251                        }
252                        _ => {}
253                    }
254                }
255                "GovCT1.dm" => {
256                    match val {
257                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.dm = Some(v); } }
258                        crate::base::FieldValue::TextList(svs) => {
259                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.dm = Some(v); } }
260                        }
261                        _ => {}
262                    }
263                }
264                "GovCT1.ka" => {
265                    match val {
266                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
267                        crate::base::FieldValue::TextList(svs) => {
268                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
269                        }
270                        _ => {}
271                    }
272                }
273                "GovCT1.kdgov" => {
274                    match val {
275                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kdgov = Some(v); } }
276                        crate::base::FieldValue::TextList(svs) => {
277                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kdgov = Some(v); } }
278                        }
279                        _ => {}
280                    }
281                }
282                "GovCT1.kigov" => {
283                    match val {
284                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kigov = Some(v); } }
285                        crate::base::FieldValue::TextList(svs) => {
286                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kigov = Some(v); } }
287                        }
288                        _ => {}
289                    }
290                }
291                "GovCT1.kiload" => {
292                    match val {
293                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kiload = Some(v); } }
294                        crate::base::FieldValue::TextList(svs) => {
295                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kiload = Some(v); } }
296                        }
297                        _ => {}
298                    }
299                }
300                "GovCT1.kimw" => {
301                    match val {
302                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kimw = Some(v); } }
303                        crate::base::FieldValue::TextList(svs) => {
304                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kimw = Some(v); } }
305                        }
306                        _ => {}
307                    }
308                }
309                "GovCT1.kpgov" => {
310                    match val {
311                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpgov = Some(v); } }
312                        crate::base::FieldValue::TextList(svs) => {
313                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpgov = Some(v); } }
314                        }
315                        _ => {}
316                    }
317                }
318                "GovCT1.kpload" => {
319                    match val {
320                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpload = Some(v); } }
321                        crate::base::FieldValue::TextList(svs) => {
322                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpload = Some(v); } }
323                        }
324                        _ => {}
325                    }
326                }
327                "GovCT1.kturb" => {
328                    match val {
329                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kturb = Some(v); } }
330                        crate::base::FieldValue::TextList(svs) => {
331                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kturb = Some(v); } }
332                        }
333                        _ => {}
334                    }
335                }
336                "GovCT1.ldref" => {
337                    match val {
338                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ldref = Some(v); } }
339                        crate::base::FieldValue::TextList(svs) => {
340                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ldref = Some(v); } }
341                        }
342                        _ => {}
343                    }
344                }
345                "GovCT1.maxerr" => {
346                    match val {
347                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.maxerr = Some(v); } }
348                        crate::base::FieldValue::TextList(svs) => {
349                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.maxerr = Some(v); } }
350                        }
351                        _ => {}
352                    }
353                }
354                "GovCT1.minerr" => {
355                    match val {
356                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.minerr = Some(v); } }
357                        crate::base::FieldValue::TextList(svs) => {
358                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.minerr = Some(v); } }
359                        }
360                        _ => {}
361                    }
362                }
363                "GovCT1.mwbase" => {
364                    match val {
365                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
366                        crate::base::FieldValue::TextList(svs) => {
367                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
368                        }
369                        _ => {}
370                    }
371                }
372                "GovCT1.r" => {
373                    match val {
374                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
375                        crate::base::FieldValue::TextList(svs) => {
376                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
377                        }
378                        _ => {}
379                    }
380                }
381                "GovCT1.rclose" => {
382                    match val {
383                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rclose = Some(v); } }
384                        crate::base::FieldValue::TextList(svs) => {
385                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rclose = Some(v); } }
386                        }
387                        _ => {}
388                    }
389                }
390                "GovCT1.rdown" => {
391                    match val {
392                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rdown = Some(v); } }
393                        crate::base::FieldValue::TextList(svs) => {
394                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rdown = Some(v); } }
395                        }
396                        _ => {}
397                    }
398                }
399                "GovCT1.ropen" => {
400                    match val {
401                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ropen = Some(v); } }
402                        crate::base::FieldValue::TextList(svs) => {
403                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ropen = Some(v); } }
404                        }
405                        _ => {}
406                    }
407                }
408                "GovCT1.rselect" => {
409                    if let crate::base::FieldValue::Resource(sv) = val {
410                        obj.rselect = Some(crate::base::UriRef { uri: sv.clone() });
411                    }
412                }
413                "GovCT1.rup" => {
414                    match val {
415                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rup = Some(v); } }
416                        crate::base::FieldValue::TextList(svs) => {
417                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rup = Some(v); } }
418                        }
419                        _ => {}
420                    }
421                }
422                "GovCT1.ta" => {
423                    match val {
424                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
425                        crate::base::FieldValue::TextList(svs) => {
426                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
427                        }
428                        _ => {}
429                    }
430                }
431                "GovCT1.tact" => {
432                    match val {
433                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tact = Some(v); } }
434                        crate::base::FieldValue::TextList(svs) => {
435                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tact = Some(v); } }
436                        }
437                        _ => {}
438                    }
439                }
440                "GovCT1.tb" => {
441                    match val {
442                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
443                        crate::base::FieldValue::TextList(svs) => {
444                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
445                        }
446                        _ => {}
447                    }
448                }
449                "GovCT1.tc" => {
450                    match val {
451                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
452                        crate::base::FieldValue::TextList(svs) => {
453                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
454                        }
455                        _ => {}
456                    }
457                }
458                "GovCT1.tdgov" => {
459                    match val {
460                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tdgov = Some(v); } }
461                        crate::base::FieldValue::TextList(svs) => {
462                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tdgov = Some(v); } }
463                        }
464                        _ => {}
465                    }
466                }
467                "GovCT1.teng" => {
468                    match val {
469                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.teng = Some(v); } }
470                        crate::base::FieldValue::TextList(svs) => {
471                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.teng = Some(v); } }
472                        }
473                        _ => {}
474                    }
475                }
476                "GovCT1.tfload" => {
477                    match val {
478                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tfload = Some(v); } }
479                        crate::base::FieldValue::TextList(svs) => {
480                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tfload = Some(v); } }
481                        }
482                        _ => {}
483                    }
484                }
485                "GovCT1.tpelec" => {
486                    match val {
487                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tpelec = Some(v); } }
488                        crate::base::FieldValue::TextList(svs) => {
489                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tpelec = Some(v); } }
490                        }
491                        _ => {}
492                    }
493                }
494                "GovCT1.tsa" => {
495                    match val {
496                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tsa = Some(v); } }
497                        crate::base::FieldValue::TextList(svs) => {
498                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tsa = Some(v); } }
499                        }
500                        _ => {}
501                    }
502                }
503                "GovCT1.tsb" => {
504                    match val {
505                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tsb = Some(v); } }
506                        crate::base::FieldValue::TextList(svs) => {
507                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tsb = Some(v); } }
508                        }
509                        _ => {}
510                    }
511                }
512                "GovCT1.vmax" => {
513                    match val {
514                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vmax = Some(v); } }
515                        crate::base::FieldValue::TextList(svs) => {
516                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vmax = Some(v); } }
517                        }
518                        _ => {}
519                    }
520                }
521                "GovCT1.vmin" => {
522                    match val {
523                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vmin = Some(v); } }
524                        crate::base::FieldValue::TextList(svs) => {
525                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vmin = Some(v); } }
526                        }
527                        _ => {}
528                    }
529                }
530                "GovCT1.wfnl" => {
531                    match val {
532                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.wfnl = Some(v); } }
533                        crate::base::FieldValue::TextList(svs) => {
534                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.wfnl = Some(v); } }
535                        }
536                        _ => {}
537                    }
538                }
539                "GovCT1.wfspd" => {
540                    match val {
541                        crate::base::FieldValue::Text(sv) => { obj.wfspd = Some(sv.trim() == "true"); }
542                        crate::base::FieldValue::TextList(svs) => {
543                            if let Some(sv) = svs.last() { obj.wfspd = Some(sv.trim() == "true"); }
544                        }
545                        _ => {}
546                    }
547                }
548                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
549                    if let crate::base::FieldValue::Resource(sv) = val {
550                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
551                    }
552                }
553                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
554                    if let crate::base::FieldValue::Resource(sv) = val {
555                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
556                    }
557                }
558                "DynamicsFunctionBlock.enabled" => {
559                    match val {
560                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
561                        crate::base::FieldValue::TextList(svs) => {
562                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
563                        }
564                        _ => {}
565                    }
566                }
567                "IdentifiedObject.description" => {
568                    match val {
569                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
570                        crate::base::FieldValue::TextList(svs) => {
571                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
572                        }
573                        _ => {}
574                    }
575                }
576                "IdentifiedObject.energyIdentCodeEic" => {
577                    match val {
578                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
579                        crate::base::FieldValue::TextList(svs) => {
580                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
581                        }
582                        _ => {}
583                    }
584                }
585                "IdentifiedObject.mRID" => {
586                    match val {
587                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
588                        crate::base::FieldValue::TextList(svs) => {
589                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
590                        }
591                        _ => {}
592                    }
593                }
594                "IdentifiedObject.name" => {
595                    match val {
596                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
597                        crate::base::FieldValue::TextList(svs) => {
598                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
599                        }
600                        _ => {}
601                    }
602                }
603                "IdentifiedObject.shortName" => {
604                    match val {
605                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
606                        crate::base::FieldValue::TextList(svs) => {
607                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
608                        }
609                        _ => {}
610                    }
611                }
612                _ => {}
613            }
614        }
615        obj
616    }
617}