Skip to main content

cimstructs/
GovSteamFV4.rs

1/// Detailed electro-hydraulic governor for steam unit.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct GovSteamFV4 {
4    #[serde(flatten)]
5    pub base: super::TurbineGovernorDynamics,
6    /// Minimum value of pressure regulator output (Cpsmn). Typical value = -1.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub cpsmn: Option<f64>,
9    /// Maximum value of pressure regulator output (Cpsmx). Typical value = 1.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub cpsmx: Option<f64>,
12    /// Minimum value of regulator set-point (Crmn). Typical value = 0.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub crmn: Option<f64>,
15    /// Maximum value of regulator set-point (Crmx). Typical value = 1,2.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub crmx: Option<f64>,
18    /// Derivative gain of pressure regulator (Kdc). Typical value = 1.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub kdc: Option<f64>,
21    /// Frequency bias (reciprocal of droop) (Kf1). Typical value = 20.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub kf1: Option<f64>,
24    /// Frequency control (reciprocal of droop) (Kf3). Typical value = 20.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub kf3: Option<f64>,
27    /// Fraction of total turbine output generated by HP part (Khp). Typical value = 0,35.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub khp: Option<f64>,
30    /// Integral gain of pressure regulator (Kic). Typical value = 0,0033.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub kic: Option<f64>,
33    /// Integral gain of pressure feedback regulator (Kip). Typical value = 0,5.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub kip: Option<f64>,
36    /// Integral gain of electro-hydraulic regulator (Kit). Typical value = 0,04.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub kit: Option<f64>,
39    /// First gain coefficient of intercept valves characteristic (Kmp1). Typical value = 0,5.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub kmp1: Option<f64>,
42    /// Second gain coefficient of intercept valves characteristic (Kmp2). Typical value = 3,5.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub kmp2: Option<f64>,
45    /// Proportional gain of pressure regulator (Kpc). Typical value = 0,5.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub kpc: Option<f64>,
48    /// Proportional gain of pressure feedback regulator (Kpp). Typical value = 1.
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub kpp: Option<f64>,
51    /// Proportional gain of electro-hydraulic regulator (Kpt). Typical value = 0,3.
52    #[serde(skip_serializing_if = "Option::is_none")]
53    pub kpt: Option<f64>,
54    /// Maximum variation of fuel flow (Krc). Typical value = 0,05.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub krc: Option<f64>,
57    /// Pressure loss due to flow friction in the boiler tubes (Ksh). Typical value = 0,08.
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub ksh: Option<f64>,
60    /// Maximum negative power error (Lpi). Typical value = -0,15.
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub lpi: Option<f64>,
63    /// Maximum positive power error (Lps). Typical value = 0,03.
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub lps: Option<f64>,
66    /// Lower limit for frequency correction (MNEF). Typical value = -0,05.
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub mnef: Option<f64>,
69    /// Upper limit for frequency correction (MXEF). Typical value = 0,05.
70    #[serde(skip_serializing_if = "Option::is_none")]
71    pub mxef: Option<f64>,
72    /// First value of pressure set point static characteristic (Pr1). Typical value = 0,2.
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub pr1: Option<f64>,
75    /// Second value of pressure set point static characteristic, corresponding to Ps0 = 1,0 PU (Pr2). Typical value = 0,75.
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub pr2: Option<f64>,
78    /// Minimum value of pressure set point static characteristic (Psmn). Typical value = 1.
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub psmn: Option<f64>,
81    /// Minimum value of integral regulator (Rsmimn). Typical value = 0.
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub rsmimn: Option<f64>,
84    /// Maximum value of integral regulator (Rsmimx). Typical value = 1,1.
85    #[serde(skip_serializing_if = "Option::is_none")]
86    pub rsmimx: Option<f64>,
87    /// Minimum value of integral regulator (Rvgmn). Typical value = 0.
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub rvgmn: Option<f64>,
90    /// Maximum value of integral regulator (Rvgmx). Typical value = 1,2.
91    #[serde(skip_serializing_if = "Option::is_none")]
92    pub rvgmx: Option<f64>,
93    /// Minimum valve opening (Srmn). Typical value = 0.
94    #[serde(skip_serializing_if = "Option::is_none")]
95    pub srmn: Option<f64>,
96    /// Maximum valve opening (Srmx). Typical value = 1,1.
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub srmx: Option<f64>,
99    /// Intercept valves characteristic discontinuity point (Srsmp). Typical value = 0,43.
100    #[serde(skip_serializing_if = "Option::is_none")]
101    pub srsmp: Option<f64>,
102    /// Maximum regulator gate closing velocity (Svmn). Typical value = -0,0333.
103    #[serde(skip_serializing_if = "Option::is_none")]
104    pub svmn: Option<f64>,
105    /// Maximum regulator gate opening velocity (Svmx). Typical value = 0,0333.
106    #[serde(skip_serializing_if = "Option::is_none")]
107    pub svmx: Option<f64>,
108    /// Control valves rate opening time (Ta) (>= 0). Typical value = 0,8.
109    #[serde(skip_serializing_if = "Option::is_none")]
110    pub ta: Option<f64>,
111    /// Intercept valves rate opening time (Tam) (>= 0). Typical value = 0,8.
112    #[serde(skip_serializing_if = "Option::is_none")]
113    pub tam: Option<f64>,
114    /// Control valves rate closing time (Tc) (>= 0). Typical value = 0,5.
115    #[serde(skip_serializing_if = "Option::is_none")]
116    pub tc: Option<f64>,
117    /// Intercept valves rate closing time (Tcm) (>= 0). Typical value = 0,5.
118    #[serde(skip_serializing_if = "Option::is_none")]
119    pub tcm: Option<f64>,
120    /// Derivative time constant of pressure regulator (Tdc) (>= 0). Typical value = 90.
121    #[serde(skip_serializing_if = "Option::is_none")]
122    pub tdc: Option<f64>,
123    /// Time constant of fuel regulation (Tf1) (>= 0). Typical value = 10.
124    #[serde(skip_serializing_if = "Option::is_none")]
125    pub tf1: Option<f64>,
126    /// Time constant of steam chest (Tf2) (>= 0). Typical value = 10.
127    #[serde(skip_serializing_if = "Option::is_none")]
128    pub tf2: Option<f64>,
129    /// High pressure (HP) time constant of the turbine (Thp) (>= 0). Typical value = 0,15.
130    #[serde(skip_serializing_if = "Option::is_none")]
131    pub thp: Option<f64>,
132    /// Low pressure (LP) time constant of the turbine (Tmp) (>= 0). Typical value = 0,4.
133    #[serde(skip_serializing_if = "Option::is_none")]
134    pub tmp: Option<f64>,
135    /// Reheater time constant of the turbine (Trh) (>= 0). Typical value = 10.
136    #[serde(skip_serializing_if = "Option::is_none")]
137    pub trh: Option<f64>,
138    /// Boiler time constant (Tv) (>= 0). Typical value = 60.
139    #[serde(skip_serializing_if = "Option::is_none")]
140    pub tv: Option<f64>,
141    /// Control valves servo time constant (Ty) (>= 0). Typical value = 0,1.
142    #[serde(skip_serializing_if = "Option::is_none")]
143    pub ty: Option<f64>,
144    /// Coefficient of linearized equations of turbine (Stodola formulation) (Y). Typical value = 0,13.
145    #[serde(skip_serializing_if = "Option::is_none")]
146    pub y: Option<f64>,
147    /// Minimum control valve position (Yhpmn). Typical value = 0.
148    #[serde(skip_serializing_if = "Option::is_none")]
149    pub yhpmn: Option<f64>,
150    /// Maximum control valve position (Yhpmx). Typical value = 1,1.
151    #[serde(skip_serializing_if = "Option::is_none")]
152    pub yhpmx: Option<f64>,
153    /// Minimum intercept valve position (Ympmn). Typical value = 0.
154    #[serde(skip_serializing_if = "Option::is_none")]
155    pub ympmn: Option<f64>,
156    /// Maximum intercept valve position (Ympmx). Typical value = 1,1.
157    #[serde(skip_serializing_if = "Option::is_none")]
158    pub ympmx: Option<f64>,
159}
160impl crate::base::CimElement for GovSteamFV4 {
161    fn mrid(&self) -> &str { &self.base.base.base.id }
162    fn type_name(&self) -> &'static str { "GovSteamFV4" }
163    fn as_any(&self) -> &dyn std::any::Any { self }
164    fn to_json_value(&self) -> serde_json::Value {
165        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
166    }
167    fn to_block(&self) -> crate::base::RdfBlock {
168        let mut block = self.base.to_block();
169        block.type_name = "GovSteamFV4".to_string();
170        if let Some(v) = self.cpsmn {
171            block.fields.insert("GovSteamFV4.cpsmn".into(), crate::base::FieldValue::Text(v.to_string()));
172        }
173        if let Some(v) = self.cpsmx {
174            block.fields.insert("GovSteamFV4.cpsmx".into(), crate::base::FieldValue::Text(v.to_string()));
175        }
176        if let Some(v) = self.crmn {
177            block.fields.insert("GovSteamFV4.crmn".into(), crate::base::FieldValue::Text(v.to_string()));
178        }
179        if let Some(v) = self.crmx {
180            block.fields.insert("GovSteamFV4.crmx".into(), crate::base::FieldValue::Text(v.to_string()));
181        }
182        if let Some(v) = self.kdc {
183            block.fields.insert("GovSteamFV4.kdc".into(), crate::base::FieldValue::Text(v.to_string()));
184        }
185        if let Some(v) = self.kf1 {
186            block.fields.insert("GovSteamFV4.kf1".into(), crate::base::FieldValue::Text(v.to_string()));
187        }
188        if let Some(v) = self.kf3 {
189            block.fields.insert("GovSteamFV4.kf3".into(), crate::base::FieldValue::Text(v.to_string()));
190        }
191        if let Some(v) = self.khp {
192            block.fields.insert("GovSteamFV4.khp".into(), crate::base::FieldValue::Text(v.to_string()));
193        }
194        if let Some(v) = self.kic {
195            block.fields.insert("GovSteamFV4.kic".into(), crate::base::FieldValue::Text(v.to_string()));
196        }
197        if let Some(v) = self.kip {
198            block.fields.insert("GovSteamFV4.kip".into(), crate::base::FieldValue::Text(v.to_string()));
199        }
200        if let Some(v) = self.kit {
201            block.fields.insert("GovSteamFV4.kit".into(), crate::base::FieldValue::Text(v.to_string()));
202        }
203        if let Some(v) = self.kmp1 {
204            block.fields.insert("GovSteamFV4.kmp1".into(), crate::base::FieldValue::Text(v.to_string()));
205        }
206        if let Some(v) = self.kmp2 {
207            block.fields.insert("GovSteamFV4.kmp2".into(), crate::base::FieldValue::Text(v.to_string()));
208        }
209        if let Some(v) = self.kpc {
210            block.fields.insert("GovSteamFV4.kpc".into(), crate::base::FieldValue::Text(v.to_string()));
211        }
212        if let Some(v) = self.kpp {
213            block.fields.insert("GovSteamFV4.kpp".into(), crate::base::FieldValue::Text(v.to_string()));
214        }
215        if let Some(v) = self.kpt {
216            block.fields.insert("GovSteamFV4.kpt".into(), crate::base::FieldValue::Text(v.to_string()));
217        }
218        if let Some(v) = self.krc {
219            block.fields.insert("GovSteamFV4.krc".into(), crate::base::FieldValue::Text(v.to_string()));
220        }
221        if let Some(v) = self.ksh {
222            block.fields.insert("GovSteamFV4.ksh".into(), crate::base::FieldValue::Text(v.to_string()));
223        }
224        if let Some(v) = self.lpi {
225            block.fields.insert("GovSteamFV4.lpi".into(), crate::base::FieldValue::Text(v.to_string()));
226        }
227        if let Some(v) = self.lps {
228            block.fields.insert("GovSteamFV4.lps".into(), crate::base::FieldValue::Text(v.to_string()));
229        }
230        if let Some(v) = self.mnef {
231            block.fields.insert("GovSteamFV4.mnef".into(), crate::base::FieldValue::Text(v.to_string()));
232        }
233        if let Some(v) = self.mxef {
234            block.fields.insert("GovSteamFV4.mxef".into(), crate::base::FieldValue::Text(v.to_string()));
235        }
236        if let Some(v) = self.pr1 {
237            block.fields.insert("GovSteamFV4.pr1".into(), crate::base::FieldValue::Text(v.to_string()));
238        }
239        if let Some(v) = self.pr2 {
240            block.fields.insert("GovSteamFV4.pr2".into(), crate::base::FieldValue::Text(v.to_string()));
241        }
242        if let Some(v) = self.psmn {
243            block.fields.insert("GovSteamFV4.psmn".into(), crate::base::FieldValue::Text(v.to_string()));
244        }
245        if let Some(v) = self.rsmimn {
246            block.fields.insert("GovSteamFV4.rsmimn".into(), crate::base::FieldValue::Text(v.to_string()));
247        }
248        if let Some(v) = self.rsmimx {
249            block.fields.insert("GovSteamFV4.rsmimx".into(), crate::base::FieldValue::Text(v.to_string()));
250        }
251        if let Some(v) = self.rvgmn {
252            block.fields.insert("GovSteamFV4.rvgmn".into(), crate::base::FieldValue::Text(v.to_string()));
253        }
254        if let Some(v) = self.rvgmx {
255            block.fields.insert("GovSteamFV4.rvgmx".into(), crate::base::FieldValue::Text(v.to_string()));
256        }
257        if let Some(v) = self.srmn {
258            block.fields.insert("GovSteamFV4.srmn".into(), crate::base::FieldValue::Text(v.to_string()));
259        }
260        if let Some(v) = self.srmx {
261            block.fields.insert("GovSteamFV4.srmx".into(), crate::base::FieldValue::Text(v.to_string()));
262        }
263        if let Some(v) = self.srsmp {
264            block.fields.insert("GovSteamFV4.srsmp".into(), crate::base::FieldValue::Text(v.to_string()));
265        }
266        if let Some(v) = self.svmn {
267            block.fields.insert("GovSteamFV4.svmn".into(), crate::base::FieldValue::Text(v.to_string()));
268        }
269        if let Some(v) = self.svmx {
270            block.fields.insert("GovSteamFV4.svmx".into(), crate::base::FieldValue::Text(v.to_string()));
271        }
272        if let Some(v) = self.ta {
273            block.fields.insert("GovSteamFV4.ta".into(), crate::base::FieldValue::Text(v.to_string()));
274        }
275        if let Some(v) = self.tam {
276            block.fields.insert("GovSteamFV4.tam".into(), crate::base::FieldValue::Text(v.to_string()));
277        }
278        if let Some(v) = self.tc {
279            block.fields.insert("GovSteamFV4.tc".into(), crate::base::FieldValue::Text(v.to_string()));
280        }
281        if let Some(v) = self.tcm {
282            block.fields.insert("GovSteamFV4.tcm".into(), crate::base::FieldValue::Text(v.to_string()));
283        }
284        if let Some(v) = self.tdc {
285            block.fields.insert("GovSteamFV4.tdc".into(), crate::base::FieldValue::Text(v.to_string()));
286        }
287        if let Some(v) = self.tf1 {
288            block.fields.insert("GovSteamFV4.tf1".into(), crate::base::FieldValue::Text(v.to_string()));
289        }
290        if let Some(v) = self.tf2 {
291            block.fields.insert("GovSteamFV4.tf2".into(), crate::base::FieldValue::Text(v.to_string()));
292        }
293        if let Some(v) = self.thp {
294            block.fields.insert("GovSteamFV4.thp".into(), crate::base::FieldValue::Text(v.to_string()));
295        }
296        if let Some(v) = self.tmp {
297            block.fields.insert("GovSteamFV4.tmp".into(), crate::base::FieldValue::Text(v.to_string()));
298        }
299        if let Some(v) = self.trh {
300            block.fields.insert("GovSteamFV4.trh".into(), crate::base::FieldValue::Text(v.to_string()));
301        }
302        if let Some(v) = self.tv {
303            block.fields.insert("GovSteamFV4.tv".into(), crate::base::FieldValue::Text(v.to_string()));
304        }
305        if let Some(v) = self.ty {
306            block.fields.insert("GovSteamFV4.ty".into(), crate::base::FieldValue::Text(v.to_string()));
307        }
308        if let Some(v) = self.y {
309            block.fields.insert("GovSteamFV4.y".into(), crate::base::FieldValue::Text(v.to_string()));
310        }
311        if let Some(v) = self.yhpmn {
312            block.fields.insert("GovSteamFV4.yhpmn".into(), crate::base::FieldValue::Text(v.to_string()));
313        }
314        if let Some(v) = self.yhpmx {
315            block.fields.insert("GovSteamFV4.yhpmx".into(), crate::base::FieldValue::Text(v.to_string()));
316        }
317        if let Some(v) = self.ympmn {
318            block.fields.insert("GovSteamFV4.ympmn".into(), crate::base::FieldValue::Text(v.to_string()));
319        }
320        if let Some(v) = self.ympmx {
321            block.fields.insert("GovSteamFV4.ympmx".into(), crate::base::FieldValue::Text(v.to_string()));
322        }
323        block
324    }
325}
326
327impl GovSteamFV4 {
328    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
329        let mut obj = Self::default();
330        obj.base.base.base.id.clone_from(&b.mrid);
331        for (key, val) in &b.fields {
332            match key.as_str() {
333                "GovSteamFV4.cpsmn" => {
334                    match val {
335                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.cpsmn = Some(v); } }
336                        crate::base::FieldValue::TextList(svs) => {
337                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.cpsmn = Some(v); } }
338                        }
339                        _ => {}
340                    }
341                }
342                "GovSteamFV4.cpsmx" => {
343                    match val {
344                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.cpsmx = Some(v); } }
345                        crate::base::FieldValue::TextList(svs) => {
346                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.cpsmx = Some(v); } }
347                        }
348                        _ => {}
349                    }
350                }
351                "GovSteamFV4.crmn" => {
352                    match val {
353                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.crmn = Some(v); } }
354                        crate::base::FieldValue::TextList(svs) => {
355                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.crmn = Some(v); } }
356                        }
357                        _ => {}
358                    }
359                }
360                "GovSteamFV4.crmx" => {
361                    match val {
362                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.crmx = Some(v); } }
363                        crate::base::FieldValue::TextList(svs) => {
364                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.crmx = Some(v); } }
365                        }
366                        _ => {}
367                    }
368                }
369                "GovSteamFV4.kdc" => {
370                    match val {
371                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kdc = Some(v); } }
372                        crate::base::FieldValue::TextList(svs) => {
373                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kdc = Some(v); } }
374                        }
375                        _ => {}
376                    }
377                }
378                "GovSteamFV4.kf1" => {
379                    match val {
380                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kf1 = Some(v); } }
381                        crate::base::FieldValue::TextList(svs) => {
382                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kf1 = Some(v); } }
383                        }
384                        _ => {}
385                    }
386                }
387                "GovSteamFV4.kf3" => {
388                    match val {
389                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kf3 = Some(v); } }
390                        crate::base::FieldValue::TextList(svs) => {
391                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kf3 = Some(v); } }
392                        }
393                        _ => {}
394                    }
395                }
396                "GovSteamFV4.khp" => {
397                    match val {
398                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.khp = Some(v); } }
399                        crate::base::FieldValue::TextList(svs) => {
400                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.khp = Some(v); } }
401                        }
402                        _ => {}
403                    }
404                }
405                "GovSteamFV4.kic" => {
406                    match val {
407                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kic = Some(v); } }
408                        crate::base::FieldValue::TextList(svs) => {
409                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kic = Some(v); } }
410                        }
411                        _ => {}
412                    }
413                }
414                "GovSteamFV4.kip" => {
415                    match val {
416                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kip = Some(v); } }
417                        crate::base::FieldValue::TextList(svs) => {
418                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kip = Some(v); } }
419                        }
420                        _ => {}
421                    }
422                }
423                "GovSteamFV4.kit" => {
424                    match val {
425                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kit = Some(v); } }
426                        crate::base::FieldValue::TextList(svs) => {
427                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kit = Some(v); } }
428                        }
429                        _ => {}
430                    }
431                }
432                "GovSteamFV4.kmp1" => {
433                    match val {
434                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kmp1 = Some(v); } }
435                        crate::base::FieldValue::TextList(svs) => {
436                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kmp1 = Some(v); } }
437                        }
438                        _ => {}
439                    }
440                }
441                "GovSteamFV4.kmp2" => {
442                    match val {
443                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kmp2 = Some(v); } }
444                        crate::base::FieldValue::TextList(svs) => {
445                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kmp2 = Some(v); } }
446                        }
447                        _ => {}
448                    }
449                }
450                "GovSteamFV4.kpc" => {
451                    match val {
452                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpc = Some(v); } }
453                        crate::base::FieldValue::TextList(svs) => {
454                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpc = Some(v); } }
455                        }
456                        _ => {}
457                    }
458                }
459                "GovSteamFV4.kpp" => {
460                    match val {
461                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpp = Some(v); } }
462                        crate::base::FieldValue::TextList(svs) => {
463                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpp = Some(v); } }
464                        }
465                        _ => {}
466                    }
467                }
468                "GovSteamFV4.kpt" => {
469                    match val {
470                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.kpt = Some(v); } }
471                        crate::base::FieldValue::TextList(svs) => {
472                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.kpt = Some(v); } }
473                        }
474                        _ => {}
475                    }
476                }
477                "GovSteamFV4.krc" => {
478                    match val {
479                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.krc = Some(v); } }
480                        crate::base::FieldValue::TextList(svs) => {
481                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.krc = Some(v); } }
482                        }
483                        _ => {}
484                    }
485                }
486                "GovSteamFV4.ksh" => {
487                    match val {
488                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ksh = Some(v); } }
489                        crate::base::FieldValue::TextList(svs) => {
490                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ksh = Some(v); } }
491                        }
492                        _ => {}
493                    }
494                }
495                "GovSteamFV4.lpi" => {
496                    match val {
497                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.lpi = Some(v); } }
498                        crate::base::FieldValue::TextList(svs) => {
499                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.lpi = Some(v); } }
500                        }
501                        _ => {}
502                    }
503                }
504                "GovSteamFV4.lps" => {
505                    match val {
506                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.lps = Some(v); } }
507                        crate::base::FieldValue::TextList(svs) => {
508                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.lps = Some(v); } }
509                        }
510                        _ => {}
511                    }
512                }
513                "GovSteamFV4.mnef" => {
514                    match val {
515                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mnef = Some(v); } }
516                        crate::base::FieldValue::TextList(svs) => {
517                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mnef = Some(v); } }
518                        }
519                        _ => {}
520                    }
521                }
522                "GovSteamFV4.mxef" => {
523                    match val {
524                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.mxef = Some(v); } }
525                        crate::base::FieldValue::TextList(svs) => {
526                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.mxef = Some(v); } }
527                        }
528                        _ => {}
529                    }
530                }
531                "GovSteamFV4.pr1" => {
532                    match val {
533                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pr1 = Some(v); } }
534                        crate::base::FieldValue::TextList(svs) => {
535                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pr1 = Some(v); } }
536                        }
537                        _ => {}
538                    }
539                }
540                "GovSteamFV4.pr2" => {
541                    match val {
542                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.pr2 = Some(v); } }
543                        crate::base::FieldValue::TextList(svs) => {
544                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.pr2 = Some(v); } }
545                        }
546                        _ => {}
547                    }
548                }
549                "GovSteamFV4.psmn" => {
550                    match val {
551                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.psmn = Some(v); } }
552                        crate::base::FieldValue::TextList(svs) => {
553                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.psmn = Some(v); } }
554                        }
555                        _ => {}
556                    }
557                }
558                "GovSteamFV4.rsmimn" => {
559                    match val {
560                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rsmimn = Some(v); } }
561                        crate::base::FieldValue::TextList(svs) => {
562                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rsmimn = Some(v); } }
563                        }
564                        _ => {}
565                    }
566                }
567                "GovSteamFV4.rsmimx" => {
568                    match val {
569                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rsmimx = Some(v); } }
570                        crate::base::FieldValue::TextList(svs) => {
571                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rsmimx = Some(v); } }
572                        }
573                        _ => {}
574                    }
575                }
576                "GovSteamFV4.rvgmn" => {
577                    match val {
578                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rvgmn = Some(v); } }
579                        crate::base::FieldValue::TextList(svs) => {
580                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rvgmn = Some(v); } }
581                        }
582                        _ => {}
583                    }
584                }
585                "GovSteamFV4.rvgmx" => {
586                    match val {
587                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rvgmx = Some(v); } }
588                        crate::base::FieldValue::TextList(svs) => {
589                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rvgmx = Some(v); } }
590                        }
591                        _ => {}
592                    }
593                }
594                "GovSteamFV4.srmn" => {
595                    match val {
596                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.srmn = Some(v); } }
597                        crate::base::FieldValue::TextList(svs) => {
598                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.srmn = Some(v); } }
599                        }
600                        _ => {}
601                    }
602                }
603                "GovSteamFV4.srmx" => {
604                    match val {
605                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.srmx = Some(v); } }
606                        crate::base::FieldValue::TextList(svs) => {
607                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.srmx = Some(v); } }
608                        }
609                        _ => {}
610                    }
611                }
612                "GovSteamFV4.srsmp" => {
613                    match val {
614                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.srsmp = Some(v); } }
615                        crate::base::FieldValue::TextList(svs) => {
616                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.srsmp = Some(v); } }
617                        }
618                        _ => {}
619                    }
620                }
621                "GovSteamFV4.svmn" => {
622                    match val {
623                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.svmn = Some(v); } }
624                        crate::base::FieldValue::TextList(svs) => {
625                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.svmn = Some(v); } }
626                        }
627                        _ => {}
628                    }
629                }
630                "GovSteamFV4.svmx" => {
631                    match val {
632                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.svmx = Some(v); } }
633                        crate::base::FieldValue::TextList(svs) => {
634                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.svmx = Some(v); } }
635                        }
636                        _ => {}
637                    }
638                }
639                "GovSteamFV4.ta" => {
640                    match val {
641                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
642                        crate::base::FieldValue::TextList(svs) => {
643                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ta = Some(v); } }
644                        }
645                        _ => {}
646                    }
647                }
648                "GovSteamFV4.tam" => {
649                    match val {
650                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tam = Some(v); } }
651                        crate::base::FieldValue::TextList(svs) => {
652                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tam = Some(v); } }
653                        }
654                        _ => {}
655                    }
656                }
657                "GovSteamFV4.tc" => {
658                    match val {
659                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
660                        crate::base::FieldValue::TextList(svs) => {
661                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tc = Some(v); } }
662                        }
663                        _ => {}
664                    }
665                }
666                "GovSteamFV4.tcm" => {
667                    match val {
668                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tcm = Some(v); } }
669                        crate::base::FieldValue::TextList(svs) => {
670                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tcm = Some(v); } }
671                        }
672                        _ => {}
673                    }
674                }
675                "GovSteamFV4.tdc" => {
676                    match val {
677                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tdc = Some(v); } }
678                        crate::base::FieldValue::TextList(svs) => {
679                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tdc = Some(v); } }
680                        }
681                        _ => {}
682                    }
683                }
684                "GovSteamFV4.tf1" => {
685                    match val {
686                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
687                        crate::base::FieldValue::TextList(svs) => {
688                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf1 = Some(v); } }
689                        }
690                        _ => {}
691                    }
692                }
693                "GovSteamFV4.tf2" => {
694                    match val {
695                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
696                        crate::base::FieldValue::TextList(svs) => {
697                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tf2 = Some(v); } }
698                        }
699                        _ => {}
700                    }
701                }
702                "GovSteamFV4.thp" => {
703                    match val {
704                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.thp = Some(v); } }
705                        crate::base::FieldValue::TextList(svs) => {
706                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.thp = Some(v); } }
707                        }
708                        _ => {}
709                    }
710                }
711                "GovSteamFV4.tmp" => {
712                    match val {
713                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tmp = Some(v); } }
714                        crate::base::FieldValue::TextList(svs) => {
715                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tmp = Some(v); } }
716                        }
717                        _ => {}
718                    }
719                }
720                "GovSteamFV4.trh" => {
721                    match val {
722                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.trh = Some(v); } }
723                        crate::base::FieldValue::TextList(svs) => {
724                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.trh = Some(v); } }
725                        }
726                        _ => {}
727                    }
728                }
729                "GovSteamFV4.tv" => {
730                    match val {
731                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.tv = Some(v); } }
732                        crate::base::FieldValue::TextList(svs) => {
733                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.tv = Some(v); } }
734                        }
735                        _ => {}
736                    }
737                }
738                "GovSteamFV4.ty" => {
739                    match val {
740                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ty = Some(v); } }
741                        crate::base::FieldValue::TextList(svs) => {
742                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ty = Some(v); } }
743                        }
744                        _ => {}
745                    }
746                }
747                "GovSteamFV4.y" => {
748                    match val {
749                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.y = Some(v); } }
750                        crate::base::FieldValue::TextList(svs) => {
751                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.y = Some(v); } }
752                        }
753                        _ => {}
754                    }
755                }
756                "GovSteamFV4.yhpmn" => {
757                    match val {
758                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.yhpmn = Some(v); } }
759                        crate::base::FieldValue::TextList(svs) => {
760                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.yhpmn = Some(v); } }
761                        }
762                        _ => {}
763                    }
764                }
765                "GovSteamFV4.yhpmx" => {
766                    match val {
767                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.yhpmx = Some(v); } }
768                        crate::base::FieldValue::TextList(svs) => {
769                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.yhpmx = Some(v); } }
770                        }
771                        _ => {}
772                    }
773                }
774                "GovSteamFV4.ympmn" => {
775                    match val {
776                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ympmn = Some(v); } }
777                        crate::base::FieldValue::TextList(svs) => {
778                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ympmn = Some(v); } }
779                        }
780                        _ => {}
781                    }
782                }
783                "GovSteamFV4.ympmx" => {
784                    match val {
785                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.ympmx = Some(v); } }
786                        crate::base::FieldValue::TextList(svs) => {
787                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.ympmx = Some(v); } }
788                        }
789                        _ => {}
790                    }
791                }
792                "TurbineGovernorDynamics.AsynchronousMachineDynamics" => {
793                    if let crate::base::FieldValue::Resource(sv) = val {
794                        obj.base.asynchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
795                    }
796                }
797                "TurbineGovernorDynamics.SynchronousMachineDynamics" => {
798                    if let crate::base::FieldValue::Resource(sv) = val {
799                        obj.base.synchronous_machine_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
800                    }
801                }
802                "DynamicsFunctionBlock.enabled" => {
803                    match val {
804                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
805                        crate::base::FieldValue::TextList(svs) => {
806                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
807                        }
808                        _ => {}
809                    }
810                }
811                "IdentifiedObject.description" => {
812                    match val {
813                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
814                        crate::base::FieldValue::TextList(svs) => {
815                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
816                        }
817                        _ => {}
818                    }
819                }
820                "IdentifiedObject.energyIdentCodeEic" => {
821                    match val {
822                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
823                        crate::base::FieldValue::TextList(svs) => {
824                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
825                        }
826                        _ => {}
827                    }
828                }
829                "IdentifiedObject.mRID" => {
830                    match val {
831                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
832                        crate::base::FieldValue::TextList(svs) => {
833                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
834                        }
835                        _ => {}
836                    }
837                }
838                "IdentifiedObject.name" => {
839                    match val {
840                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
841                        crate::base::FieldValue::TextList(svs) => {
842                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
843                        }
844                        _ => {}
845                    }
846                }
847                "IdentifiedObject.shortName" => {
848                    match val {
849                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
850                        crate::base::FieldValue::TextList(svs) => {
851                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
852                        }
853                        _ => {}
854                    }
855                }
856                _ => {}
857            }
858        }
859        obj
860    }
861}