Skip to main content

cimstructs/
GovCT2.rs

1/// General governor with frequency-dependent fuel flow limit. This model is a modification of the GovCT1 model in order to represent the frequency-dependent fuel flow limit of a specific gas turbine manufacturer.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovCT2 {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Acceleration limiter setpoint (Aset). Unit = PU / s. Typical value = 10.
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    /// Frequency threshold 1 (Flim1). Unit = Hz. Typical value = 59.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub flim1: Option<f64>,
18    /// Frequency threshold 10 (Flim10). Unit = Hz. Typical value = 0.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub flim10: Option<f64>,
21    /// Frequency threshold 2 (Flim2). Unit = Hz. Typical value = 0.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub flim2: Option<f64>,
24    /// Frequency threshold 3 (Flim3). Unit = Hz. Typical value = 0.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub flim3: Option<f64>,
27    /// Frequency threshold 4 (Flim4). Unit = Hz. Typical value = 0.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub flim4: Option<f64>,
30    /// Frequency threshold 5 (Flim5). Unit = Hz. Typical value = 0.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub flim5: Option<f64>,
33    /// Frequency threshold 6 (Flim6). Unit = Hz. Typical value = 0.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub flim6: Option<f64>,
36    /// Frequency threshold 7 (Flim7). Unit = Hz. Typical value = 0.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub flim7: Option<f64>,
39    /// Frequency threshold 8 (Flim8). Unit = Hz. Typical value = 0.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub flim8: Option<f64>,
42    /// Frequency threshold 9 (Flim9). Unit = Hz. Typical value = 0.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub flim9: Option<f64>,
45    /// Acceleration limiter gain (Ka). Typical value = 10.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub ka: Option<f64>,
48    /// Governor derivative gain (Kdgov). Typical value = 0.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub kdgov: Option<f64>,
51    /// Governor integral gain (Kigov). Typical value = 0,45.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub kigov: Option<f64>,
54    /// Load limiter integral gain for PI controller (Kiload). Typical value = 1.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub kiload: Option<f64>,
57    /// Power controller (reset) gain (Kimw). The default value of 0,01 corresponds to a reset time of 100 seconds. A value of 0,001 corresponds to a relatively slow-acting load controller. Typical value = 0.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub kimw: Option<f64>,
60    /// Governor proportional gain (Kpgov). Typical value = 4.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub kpgov: Option<f64>,
63    /// Load limiter proportional gain for PI controller (Kpload). Typical value = 1.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub kpload: Option<f64>,
66    /// Turbine gain (Kturb). Typical value = 1,9168.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub kturb: Option<f64>,
69    /// Load limiter reference value (Ldref). Typical value = 1.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub ldref: Option<f64>,
72    /// Maximum value for speed error signal (Maxerr) (> GovCT2.minerr). Typical value = 1.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub maxerr: Option<f64>,
75    /// Minimum value for speed error signal (Minerr) (< GovCT2.maxerr). Typical value = -1.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub minerr: Option<f64>,
78    /// Base for power values (MWbase) (> 0). Unit = MW.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub mwbase: Option<f64>,
81    /// Power limit 1 (Plim1). Typical value = 0,8325.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub plim1: Option<f64>,
84    /// Power limit 10 (Plim10). Typical value = 0.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub plim10: Option<f64>,
87    /// Power limit 2 (Plim2). Typical value = 0.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub plim2: Option<f64>,
90    /// Power limit 3 (Plim3). Typical value = 0.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub plim3: Option<f64>,
93    /// Power limit 4 (Plim4). Typical value = 0.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub plim4: Option<f64>,
96    /// Power limit 5 (Plim5). Typical value = 0.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub plim5: Option<f64>,
99    /// Power limit 6 (Plim6). Typical value = 0.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub plim6: Option<f64>,
102    /// Power limit 7 (Plim7). Typical value = 0.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub plim7: Option<f64>,
105    /// Power limit 8 (Plim8). Typical value = 0.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub plim8: Option<f64>,
108    /// Power Limit 9 (Plim9). Typical value = 0.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub plim9: Option<f64>,
111    /// Ramp rate for frequency-dependent power limit (Prate). Typical value = 0,017.
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub prate: Option<f64>,
114    /// Permanent droop (R). Typical value = 0,05.
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub r: Option<f64>,
117    /// Minimum valve closing rate (Rclose). Unit = PU / s. Typical value = -99.
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub rclose: Option<f64>,
120    /// Maximum rate of load limit decrease (Rdown). Typical value = -99.
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub rdown: Option<f64>,
123    /// Maximum valve opening rate (Ropen). Unit = PU / s. Typical value = 99.
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub ropen: Option<f64>,
126    /// Feedback signal for droop (Rselect). Typical value = electricalPower.
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub rselect: Option<super::base::UriRef>,
129    /// Maximum rate of load limit increase (Rup). Typical value = 99.
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub rup: Option<f64>,
132    /// Acceleration limiter time constant (Ta) (>= 0). Typical value = 1.
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub ta: Option<f64>,
135    /// Actuator time constant (Tact) (>= 0). Typical value = 0,4.
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub tact: Option<f64>,
138    /// Turbine lag time constant (Tb) (>= 0). Typical value = 0,1.
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub tb: Option<f64>,
141    /// Turbine lead time constant (Tc) (>= 0). Typical value = 0.
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub tc: Option<f64>,
144    /// Governor derivative controller time constant (Tdgov) (>= 0). Typical value = 1.
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub tdgov: Option<f64>,
147    /// 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.
148    #[serde(skip_serializing_if = "Option::is_none")]
149    pub teng: Option<f64>,
150    /// Load limiter time constant (Tfload) (>= 0). Typical value = 3.
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub tfload: Option<f64>,
153    /// Electrical power transducer time constant (Tpelec) (>= 0). Typical value = 2,5.
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub tpelec: Option<f64>,
156    /// Temperature detection lead time constant (Tsa) (>= 0). Typical value = 0.
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub tsa: Option<f64>,
159    /// Temperature detection lag time constant (Tsb) (>= 0). Typical value = 50.
160    #[serde(skip_serializing_if = "Option::is_none")]
161    pub tsb: Option<f64>,
162    /// Maximum valve position limit (Vmax) (> GovCT2.vmin). Typical value = 1.
163    #[serde(skip_serializing_if = "Option::is_none")]
164    pub vmax: Option<f64>,
165    /// Minimum valve position limit (Vmin) (< GovCT2.vmax). Typical value = 0,175.
166    #[serde(skip_serializing_if = "Option::is_none")]
167    pub vmin: Option<f64>,
168    /// No load fuel flow (Wfnl). Typical value = 0,187.
169    #[serde(skip_serializing_if = "Option::is_none")]
170    pub wfnl: Option<f64>,
171    /// 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 = false.
172    #[serde(skip_serializing_if = "Option::is_none")]
173    pub wfspd: Option<bool>,
174}
175impl crate::base::CimElement for GovCT2 {
176    fn mrid(&self) -> &str { &self.base.base.base.id }
177    fn type_name(&self) -> &'static str { "GovCT2" }
178    fn as_any(&self) -> &dyn std::any::Any { self }
179    fn to_json_value(&self) -> serde_json::Value {
180        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
181    }
182    fn to_block(&self) -> crate::base::RdfBlock {
183        let mut block = self.base.to_block();
184        block.type_name = "GovCT2".to_string();
185        if let Some(v) = self.aset {
186            block.fields.insert("GovCT2.aset".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.db {
189            block.fields.insert("GovCT2.db".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.dm {
192            block.fields.insert("GovCT2.dm".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.flim1 {
195            block.fields.insert("GovCT2.flim1".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.flim10 {
198            block.fields.insert("GovCT2.flim10".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.flim2 {
201            block.fields.insert("GovCT2.flim2".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.flim3 {
204            block.fields.insert("GovCT2.flim3".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.flim4 {
207            block.fields.insert("GovCT2.flim4".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.flim5 {
210            block.fields.insert("GovCT2.flim5".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.flim6 {
213            block.fields.insert("GovCT2.flim6".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.flim7 {
216            block.fields.insert("GovCT2.flim7".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.flim8 {
219            block.fields.insert("GovCT2.flim8".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.flim9 {
222            block.fields.insert("GovCT2.flim9".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.ka {
225            block.fields.insert("GovCT2.ka".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        if let Some(v) = self.kdgov {
228            block.fields.insert("GovCT2.kdgov".into(), crate::base::FieldValue::Text(v.to_string()));
229        }
230        if let Some(v) = self.kigov {
231            block.fields.insert("GovCT2.kigov".into(), crate::base::FieldValue::Text(v.to_string()));
232        }
233        if let Some(v) = self.kiload {
234            block.fields.insert("GovCT2.kiload".into(), crate::base::FieldValue::Text(v.to_string()));
235        }
236        if let Some(v) = self.kimw {
237            block.fields.insert("GovCT2.kimw".into(), crate::base::FieldValue::Text(v.to_string()));
238        }
239        if let Some(v) = self.kpgov {
240            block.fields.insert("GovCT2.kpgov".into(), crate::base::FieldValue::Text(v.to_string()));
241        }
242        if let Some(v) = self.kpload {
243            block.fields.insert("GovCT2.kpload".into(), crate::base::FieldValue::Text(v.to_string()));
244        }
245        if let Some(v) = self.kturb {
246            block.fields.insert("GovCT2.kturb".into(), crate::base::FieldValue::Text(v.to_string()));
247        }
248        if let Some(v) = self.ldref {
249            block.fields.insert("GovCT2.ldref".into(), crate::base::FieldValue::Text(v.to_string()));
250        }
251        if let Some(v) = self.maxerr {
252            block.fields.insert("GovCT2.maxerr".into(), crate::base::FieldValue::Text(v.to_string()));
253        }
254        if let Some(v) = self.minerr {
255            block.fields.insert("GovCT2.minerr".into(), crate::base::FieldValue::Text(v.to_string()));
256        }
257        if let Some(v) = self.mwbase {
258            block.fields.insert("GovCT2.mwbase".into(), crate::base::FieldValue::Text(v.to_string()));
259        }
260        if let Some(v) = self.plim1 {
261            block.fields.insert("GovCT2.plim1".into(), crate::base::FieldValue::Text(v.to_string()));
262        }
263        if let Some(v) = self.plim10 {
264            block.fields.insert("GovCT2.plim10".into(), crate::base::FieldValue::Text(v.to_string()));
265        }
266        if let Some(v) = self.plim2 {
267            block.fields.insert("GovCT2.plim2".into(), crate::base::FieldValue::Text(v.to_string()));
268        }
269        if let Some(v) = self.plim3 {
270            block.fields.insert("GovCT2.plim3".into(), crate::base::FieldValue::Text(v.to_string()));
271        }
272        if let Some(v) = self.plim4 {
273            block.fields.insert("GovCT2.plim4".into(), crate::base::FieldValue::Text(v.to_string()));
274        }
275        if let Some(v) = self.plim5 {
276            block.fields.insert("GovCT2.plim5".into(), crate::base::FieldValue::Text(v.to_string()));
277        }
278        if let Some(v) = self.plim6 {
279            block.fields.insert("GovCT2.plim6".into(), crate::base::FieldValue::Text(v.to_string()));
280        }
281        if let Some(v) = self.plim7 {
282            block.fields.insert("GovCT2.plim7".into(), crate::base::FieldValue::Text(v.to_string()));
283        }
284        if let Some(v) = self.plim8 {
285            block.fields.insert("GovCT2.plim8".into(), crate::base::FieldValue::Text(v.to_string()));
286        }
287        if let Some(v) = self.plim9 {
288            block.fields.insert("GovCT2.plim9".into(), crate::base::FieldValue::Text(v.to_string()));
289        }
290        if let Some(v) = self.prate {
291            block.fields.insert("GovCT2.prate".into(), crate::base::FieldValue::Text(v.to_string()));
292        }
293        if let Some(v) = self.r {
294            block.fields.insert("GovCT2.r".into(), crate::base::FieldValue::Text(v.to_string()));
295        }
296        if let Some(v) = self.rclose {
297            block.fields.insert("GovCT2.rclose".into(), crate::base::FieldValue::Text(v.to_string()));
298        }
299        if let Some(v) = self.rdown {
300            block.fields.insert("GovCT2.rdown".into(), crate::base::FieldValue::Text(v.to_string()));
301        }
302        if let Some(v) = self.ropen {
303            block.fields.insert("GovCT2.ropen".into(), crate::base::FieldValue::Text(v.to_string()));
304        }
305        if let Some(ref v) = self.rselect {
306            block.fields.insert("GovCT2.rselect".into(), crate::base::FieldValue::Resource(v.uri.clone()));
307        }
308        if let Some(v) = self.rup {
309            block.fields.insert("GovCT2.rup".into(), crate::base::FieldValue::Text(v.to_string()));
310        }
311        if let Some(v) = self.ta {
312            block.fields.insert("GovCT2.ta".into(), crate::base::FieldValue::Text(v.to_string()));
313        }
314        if let Some(v) = self.tact {
315            block.fields.insert("GovCT2.tact".into(), crate::base::FieldValue::Text(v.to_string()));
316        }
317        if let Some(v) = self.tb {
318            block.fields.insert("GovCT2.tb".into(), crate::base::FieldValue::Text(v.to_string()));
319        }
320        if let Some(v) = self.tc {
321            block.fields.insert("GovCT2.tc".into(), crate::base::FieldValue::Text(v.to_string()));
322        }
323        if let Some(v) = self.tdgov {
324            block.fields.insert("GovCT2.tdgov".into(), crate::base::FieldValue::Text(v.to_string()));
325        }
326        if let Some(v) = self.teng {
327            block.fields.insert("GovCT2.teng".into(), crate::base::FieldValue::Text(v.to_string()));
328        }
329        if let Some(v) = self.tfload {
330            block.fields.insert("GovCT2.tfload".into(), crate::base::FieldValue::Text(v.to_string()));
331        }
332        if let Some(v) = self.tpelec {
333            block.fields.insert("GovCT2.tpelec".into(), crate::base::FieldValue::Text(v.to_string()));
334        }
335        if let Some(v) = self.tsa {
336            block.fields.insert("GovCT2.tsa".into(), crate::base::FieldValue::Text(v.to_string()));
337        }
338        if let Some(v) = self.tsb {
339            block.fields.insert("GovCT2.tsb".into(), crate::base::FieldValue::Text(v.to_string()));
340        }
341        if let Some(v) = self.vmax {
342            block.fields.insert("GovCT2.vmax".into(), crate::base::FieldValue::Text(v.to_string()));
343        }
344        if let Some(v) = self.vmin {
345            block.fields.insert("GovCT2.vmin".into(), crate::base::FieldValue::Text(v.to_string()));
346        }
347        if let Some(v) = self.wfnl {
348            block.fields.insert("GovCT2.wfnl".into(), crate::base::FieldValue::Text(v.to_string()));
349        }
350        if let Some(v) = self.wfspd {
351            block.fields.insert("GovCT2.wfspd".into(), crate::base::FieldValue::Text(v.to_string()));
352        }
353        block
354    }
355}
356
357impl GovCT2 {
358    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
359        let mut obj = Self::default();
360        obj.base.base.base.id.clone_from(&b.mrid);
361        for (key, val) in &b.fields {
362            match key.as_str() {
363                "GovCT2.aset" => {
364                    match val {
365                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.aset = Some(v); } }
366                        crate::base::FieldValue::TextList(svs) => {
367                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.aset = Some(v); } }
368                        }
369                        _ => {}
370                    }
371                }
372                "GovCT2.db" => {
373                    match val {
374                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.db = Some(v); } }
375                        crate::base::FieldValue::TextList(svs) => {
376                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.db = Some(v); } }
377                        }
378                        _ => {}
379                    }
380                }
381                "GovCT2.dm" => {
382                    match val {
383                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.dm = Some(v); } }
384                        crate::base::FieldValue::TextList(svs) => {
385                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.dm = Some(v); } }
386                        }
387                        _ => {}
388                    }
389                }
390                "GovCT2.flim1" => {
391                    match val {
392                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim1 = Some(v); } }
393                        crate::base::FieldValue::TextList(svs) => {
394                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim1 = Some(v); } }
395                        }
396                        _ => {}
397                    }
398                }
399                "GovCT2.flim10" => {
400                    match val {
401                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim10 = Some(v); } }
402                        crate::base::FieldValue::TextList(svs) => {
403                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim10 = Some(v); } }
404                        }
405                        _ => {}
406                    }
407                }
408                "GovCT2.flim2" => {
409                    match val {
410                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim2 = Some(v); } }
411                        crate::base::FieldValue::TextList(svs) => {
412                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim2 = Some(v); } }
413                        }
414                        _ => {}
415                    }
416                }
417                "GovCT2.flim3" => {
418                    match val {
419                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim3 = Some(v); } }
420                        crate::base::FieldValue::TextList(svs) => {
421                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim3 = Some(v); } }
422                        }
423                        _ => {}
424                    }
425                }
426                "GovCT2.flim4" => {
427                    match val {
428                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim4 = Some(v); } }
429                        crate::base::FieldValue::TextList(svs) => {
430                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim4 = Some(v); } }
431                        }
432                        _ => {}
433                    }
434                }
435                "GovCT2.flim5" => {
436                    match val {
437                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim5 = Some(v); } }
438                        crate::base::FieldValue::TextList(svs) => {
439                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim5 = Some(v); } }
440                        }
441                        _ => {}
442                    }
443                }
444                "GovCT2.flim6" => {
445                    match val {
446                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim6 = Some(v); } }
447                        crate::base::FieldValue::TextList(svs) => {
448                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim6 = Some(v); } }
449                        }
450                        _ => {}
451                    }
452                }
453                "GovCT2.flim7" => {
454                    match val {
455                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim7 = Some(v); } }
456                        crate::base::FieldValue::TextList(svs) => {
457                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim7 = Some(v); } }
458                        }
459                        _ => {}
460                    }
461                }
462                "GovCT2.flim8" => {
463                    match val {
464                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim8 = Some(v); } }
465                        crate::base::FieldValue::TextList(svs) => {
466                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim8 = Some(v); } }
467                        }
468                        _ => {}
469                    }
470                }
471                "GovCT2.flim9" => {
472                    match val {
473                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.flim9 = Some(v); } }
474                        crate::base::FieldValue::TextList(svs) => {
475                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.flim9 = Some(v); } }
476                        }
477                        _ => {}
478                    }
479                }
480                "GovCT2.ka" => {
481                    match val {
482                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
483                        crate::base::FieldValue::TextList(svs) => {
484                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ka = Some(v); } }
485                        }
486                        _ => {}
487                    }
488                }
489                "GovCT2.kdgov" => {
490                    match val {
491                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kdgov = Some(v); } }
492                        crate::base::FieldValue::TextList(svs) => {
493                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kdgov = Some(v); } }
494                        }
495                        _ => {}
496                    }
497                }
498                "GovCT2.kigov" => {
499                    match val {
500                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kigov = Some(v); } }
501                        crate::base::FieldValue::TextList(svs) => {
502                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kigov = Some(v); } }
503                        }
504                        _ => {}
505                    }
506                }
507                "GovCT2.kiload" => {
508                    match val {
509                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kiload = Some(v); } }
510                        crate::base::FieldValue::TextList(svs) => {
511                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kiload = Some(v); } }
512                        }
513                        _ => {}
514                    }
515                }
516                "GovCT2.kimw" => {
517                    match val {
518                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kimw = Some(v); } }
519                        crate::base::FieldValue::TextList(svs) => {
520                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kimw = Some(v); } }
521                        }
522                        _ => {}
523                    }
524                }
525                "GovCT2.kpgov" => {
526                    match val {
527                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpgov = Some(v); } }
528                        crate::base::FieldValue::TextList(svs) => {
529                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpgov = Some(v); } }
530                        }
531                        _ => {}
532                    }
533                }
534                "GovCT2.kpload" => {
535                    match val {
536                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpload = Some(v); } }
537                        crate::base::FieldValue::TextList(svs) => {
538                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpload = Some(v); } }
539                        }
540                        _ => {}
541                    }
542                }
543                "GovCT2.kturb" => {
544                    match val {
545                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kturb = Some(v); } }
546                        crate::base::FieldValue::TextList(svs) => {
547                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kturb = Some(v); } }
548                        }
549                        _ => {}
550                    }
551                }
552                "GovCT2.ldref" => {
553                    match val {
554                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ldref = Some(v); } }
555                        crate::base::FieldValue::TextList(svs) => {
556                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ldref = Some(v); } }
557                        }
558                        _ => {}
559                    }
560                }
561                "GovCT2.maxerr" => {
562                    match val {
563                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.maxerr = Some(v); } }
564                        crate::base::FieldValue::TextList(svs) => {
565                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.maxerr = Some(v); } }
566                        }
567                        _ => {}
568                    }
569                }
570                "GovCT2.minerr" => {
571                    match val {
572                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.minerr = Some(v); } }
573                        crate::base::FieldValue::TextList(svs) => {
574                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.minerr = Some(v); } }
575                        }
576                        _ => {}
577                    }
578                }
579                "GovCT2.mwbase" => {
580                    match val {
581                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
582                        crate::base::FieldValue::TextList(svs) => {
583                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mwbase = Some(v); } }
584                        }
585                        _ => {}
586                    }
587                }
588                "GovCT2.plim1" => {
589                    match val {
590                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim1 = Some(v); } }
591                        crate::base::FieldValue::TextList(svs) => {
592                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim1 = Some(v); } }
593                        }
594                        _ => {}
595                    }
596                }
597                "GovCT2.plim10" => {
598                    match val {
599                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim10 = Some(v); } }
600                        crate::base::FieldValue::TextList(svs) => {
601                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim10 = Some(v); } }
602                        }
603                        _ => {}
604                    }
605                }
606                "GovCT2.plim2" => {
607                    match val {
608                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim2 = Some(v); } }
609                        crate::base::FieldValue::TextList(svs) => {
610                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim2 = Some(v); } }
611                        }
612                        _ => {}
613                    }
614                }
615                "GovCT2.plim3" => {
616                    match val {
617                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim3 = Some(v); } }
618                        crate::base::FieldValue::TextList(svs) => {
619                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim3 = Some(v); } }
620                        }
621                        _ => {}
622                    }
623                }
624                "GovCT2.plim4" => {
625                    match val {
626                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim4 = Some(v); } }
627                        crate::base::FieldValue::TextList(svs) => {
628                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim4 = Some(v); } }
629                        }
630                        _ => {}
631                    }
632                }
633                "GovCT2.plim5" => {
634                    match val {
635                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim5 = Some(v); } }
636                        crate::base::FieldValue::TextList(svs) => {
637                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim5 = Some(v); } }
638                        }
639                        _ => {}
640                    }
641                }
642                "GovCT2.plim6" => {
643                    match val {
644                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim6 = Some(v); } }
645                        crate::base::FieldValue::TextList(svs) => {
646                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim6 = Some(v); } }
647                        }
648                        _ => {}
649                    }
650                }
651                "GovCT2.plim7" => {
652                    match val {
653                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim7 = Some(v); } }
654                        crate::base::FieldValue::TextList(svs) => {
655                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim7 = Some(v); } }
656                        }
657                        _ => {}
658                    }
659                }
660                "GovCT2.plim8" => {
661                    match val {
662                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim8 = Some(v); } }
663                        crate::base::FieldValue::TextList(svs) => {
664                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim8 = Some(v); } }
665                        }
666                        _ => {}
667                    }
668                }
669                "GovCT2.plim9" => {
670                    match val {
671                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.plim9 = Some(v); } }
672                        crate::base::FieldValue::TextList(svs) => {
673                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.plim9 = Some(v); } }
674                        }
675                        _ => {}
676                    }
677                }
678                "GovCT2.prate" => {
679                    match val {
680                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.prate = Some(v); } }
681                        crate::base::FieldValue::TextList(svs) => {
682                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.prate = Some(v); } }
683                        }
684                        _ => {}
685                    }
686                }
687                "GovCT2.r" => {
688                    match val {
689                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
690                        crate::base::FieldValue::TextList(svs) => {
691                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.r = Some(v); } }
692                        }
693                        _ => {}
694                    }
695                }
696                "GovCT2.rclose" => {
697                    match val {
698                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rclose = Some(v); } }
699                        crate::base::FieldValue::TextList(svs) => {
700                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rclose = Some(v); } }
701                        }
702                        _ => {}
703                    }
704                }
705                "GovCT2.rdown" => {
706                    match val {
707                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rdown = Some(v); } }
708                        crate::base::FieldValue::TextList(svs) => {
709                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rdown = Some(v); } }
710                        }
711                        _ => {}
712                    }
713                }
714                "GovCT2.ropen" => {
715                    match val {
716                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ropen = Some(v); } }
717                        crate::base::FieldValue::TextList(svs) => {
718                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ropen = Some(v); } }
719                        }
720                        _ => {}
721                    }
722                }
723                "GovCT2.rselect" => {
724                    if let crate::base::FieldValue::Resource(sv) = val {
725                        obj.rselect = Some(crate::base::UriRef { uri: sv.clone() });
726                    }
727                }
728                "GovCT2.rup" => {
729                    match val {
730                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rup = Some(v); } }
731                        crate::base::FieldValue::TextList(svs) => {
732                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rup = Some(v); } }
733                        }
734                        _ => {}
735                    }
736                }
737                "GovCT2.ta" => {
738                    match val {
739                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
740                        crate::base::FieldValue::TextList(svs) => {
741                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
742                        }
743                        _ => {}
744                    }
745                }
746                "GovCT2.tact" => {
747                    match val {
748                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tact = Some(v); } }
749                        crate::base::FieldValue::TextList(svs) => {
750                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tact = Some(v); } }
751                        }
752                        _ => {}
753                    }
754                }
755                "GovCT2.tb" => {
756                    match val {
757                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
758                        crate::base::FieldValue::TextList(svs) => {
759                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tb = Some(v); } }
760                        }
761                        _ => {}
762                    }
763                }
764                "GovCT2.tc" => {
765                    match val {
766                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
767                        crate::base::FieldValue::TextList(svs) => {
768                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
769                        }
770                        _ => {}
771                    }
772                }
773                "GovCT2.tdgov" => {
774                    match val {
775                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tdgov = Some(v); } }
776                        crate::base::FieldValue::TextList(svs) => {
777                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tdgov = Some(v); } }
778                        }
779                        _ => {}
780                    }
781                }
782                "GovCT2.teng" => {
783                    match val {
784                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.teng = Some(v); } }
785                        crate::base::FieldValue::TextList(svs) => {
786                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.teng = Some(v); } }
787                        }
788                        _ => {}
789                    }
790                }
791                "GovCT2.tfload" => {
792                    match val {
793                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tfload = Some(v); } }
794                        crate::base::FieldValue::TextList(svs) => {
795                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tfload = Some(v); } }
796                        }
797                        _ => {}
798                    }
799                }
800                "GovCT2.tpelec" => {
801                    match val {
802                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tpelec = Some(v); } }
803                        crate::base::FieldValue::TextList(svs) => {
804                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tpelec = Some(v); } }
805                        }
806                        _ => {}
807                    }
808                }
809                "GovCT2.tsa" => {
810                    match val {
811                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tsa = Some(v); } }
812                        crate::base::FieldValue::TextList(svs) => {
813                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tsa = Some(v); } }
814                        }
815                        _ => {}
816                    }
817                }
818                "GovCT2.tsb" => {
819                    match val {
820                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tsb = Some(v); } }
821                        crate::base::FieldValue::TextList(svs) => {
822                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tsb = Some(v); } }
823                        }
824                        _ => {}
825                    }
826                }
827                "GovCT2.vmax" => {
828                    match val {
829                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vmax = Some(v); } }
830                        crate::base::FieldValue::TextList(svs) => {
831                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vmax = Some(v); } }
832                        }
833                        _ => {}
834                    }
835                }
836                "GovCT2.vmin" => {
837                    match val {
838                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vmin = Some(v); } }
839                        crate::base::FieldValue::TextList(svs) => {
840                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vmin = Some(v); } }
841                        }
842                        _ => {}
843                    }
844                }
845                "GovCT2.wfnl" => {
846                    match val {
847                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.wfnl = Some(v); } }
848                        crate::base::FieldValue::TextList(svs) => {
849                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.wfnl = Some(v); } }
850                        }
851                        _ => {}
852                    }
853                }
854                "GovCT2.wfspd" => {
855                    match val {
856                        crate::base::FieldValue::Text(sv) => { obj.wfspd = Some(sv.trim() == "true"); }
857                        crate::base::FieldValue::TextList(svs) => {
858                            if let Some(sv) = svs.last() { obj.wfspd = Some(sv.trim() == "true"); }
859                        }
860                        _ => {}
861                    }
862                }
863                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
864                    if let crate::base::FieldValue::Resource(sv) = val {
865                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
866                    }
867                }
868                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
869                    if let crate::base::FieldValue::Resource(sv) = val {
870                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
871                    }
872                }
873                "DynamicsFunctionBlock.enabled" => {
874                    match val {
875                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
876                        crate::base::FieldValue::TextList(svs) => {
877                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
878                        }
879                        _ => {}
880                    }
881                }
882                "IdentifiedObject.description" => {
883                    match val {
884                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
885                        crate::base::FieldValue::TextList(svs) => {
886                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
887                        }
888                        _ => {}
889                    }
890                }
891                "IdentifiedObject.energyIdentCodeEic" => {
892                    match val {
893                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
894                        crate::base::FieldValue::TextList(svs) => {
895                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
896                        }
897                        _ => {}
898                    }
899                }
900                "IdentifiedObject.mRID" => {
901                    match val {
902                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
903                        crate::base::FieldValue::TextList(svs) => {
904                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
905                        }
906                        _ => {}
907                    }
908                }
909                "IdentifiedObject.name" => {
910                    match val {
911                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
912                        crate::base::FieldValue::TextList(svs) => {
913                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
914                        }
915                        _ => {}
916                    }
917                }
918                "IdentifiedObject.shortName" => {
919                    match val {
920                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
921                        crate::base::FieldValue::TextList(svs) => {
922                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
923                        }
924                        _ => {}
925                    }
926                }
927                _ => {}
928            }
929        }
930        obj
931    }
932}