Skip to main content

cimstructs/
CsConverter.rs

1/// DC side of the current source converter (CSC). The firing angle controls the dc voltage at the converter, both for rectifier and inverter. The difference between the dc voltages of the rectifier and inverter determines the dc current. The extinction angle is used to limit the dc voltage at the inverter, if needed, and is not used in active power control. The firing angle, transformer tap position and number of connected filters are the primary means to control a current source dc line. Higher level controls are built on top, e.g. dc voltage, dc current and active power. From a steady state perspective it is sufficient to specify the wanted active power transfer (ACDCConverter.targetPpcc) and the control functions will set the dc voltage, dc current, firing angle, transformer tap position and number of connected filters to meet this. Therefore attributes targetAlpha and targetGamma are not applicable in this case. The reactive power consumed by the converter is a function of the firing angle, transformer tap position and number of connected filter, which can be approximated with half of the active power. The losses is a function of the dc voltage and dc current. The attributes minAlpha and maxAlpha define the range of firing angles for rectifier operation between which no discrete tap changer action takes place. The range is typically 10-18 degrees. The attributes minGamma and maxGamma define the range of extinction angles for inverter operation between which no discrete tap changer action takes place. The range is typically 17-20 degrees.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct CsConverter {
4    #[serde(flatten)]
5    pub base: super::ACDCConverter,
6    /// Firing angle that determines the dc voltage at the converter dc terminal. Typical value between 10 degrees and 18 degrees for a rectifier. It is converter’s state variable, result from power flow. The attribute shall be a positive value.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub alpha: Option<f64>,
9    /// Extinction angle. It is used to limit the dc voltage at the inverter if needed. Typical value between 17 degrees and 20 degrees for an inverter. It is converter’s state variable, result from power flow. The attribute shall be a positive value.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub gamma: Option<f64>,
12    /// Maximum firing angle. It is converter’s configuration data used in power flow. The attribute shall be a positive value.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub max_alpha: Option<f64>,
15    /// Maximum extinction angle. It is converter’s configuration data used in power flow. The attribute shall be a positive value.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub max_gamma: Option<f64>,
18    /// The maximum direct current (Id) on the DC side at which the converter should operate. It is converter’s configuration data use in power flow. The attribute shall be a positive value.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub max_idc: Option<f64>,
21    /// Minimum firing angle. It is converter’s configuration data used in power flow. The attribute shall be a positive value.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub min_alpha: Option<f64>,
24    /// Minimum extinction angle. It is converter’s configuration data used in power flow. The attribute shall be a positive value.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub min_gamma: Option<f64>,
27    /// The minimum direct current (Id) on the DC side at which the converter should operate. It is converter’s configuration data used in power flow. The attribute shall be a positive value.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub min_idc: Option<f64>,
30    /// Indicates whether the DC pole is operating as an inverter or as a rectifier. It is converter’s control variable used in power flow.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub operating_mode: Option<super::base::UriRef>,
33    /// Kind of active power control.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub p_pcc_control: Option<super::base::UriRef>,
36    /// Rated converter DC current, also called IdN. The attribute shall be a positive value. It is converter’s configuration data used in power flow.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub rated_idc: Option<f64>,
39    /// Target firing angle. It is converter’s control variable used in power flow. It is only applicable for rectifier if continuous tap changer control is used. Allowed values are within the range minAlpha<=targetAlpha<=maxAlpha. The attribute shall be a positive value.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub target_alpha: Option<f64>,
42    /// Target extinction angle. It is converter’s control variable used in power flow. It is only applicable for inverter if continuous tap changer control is used. Allowed values are within the range minGamma<=targetGamma<=maxGamma. The attribute shall be a positive value.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub target_gamma: Option<f64>,
45    /// DC current target value. It is converter’s control variable used in power flow. The attribute shall be a positive value.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub target_idc: Option<f64>,
48}
49impl crate::base::CimElement for CsConverter {
50    fn mrid(&self) -> &str { &self.base.base.base.base.base.id }
51    fn type_name(&self) -> &'static str { "CsConverter" }
52    fn as_any(&self) -> &dyn std::any::Any { self }
53    fn to_json_value(&self) -> serde_json::Value {
54        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
55    }
56    fn to_block(&self) -> crate::base::RdfBlock {
57        let mut block = self.base.to_block();
58        block.type_name = "CsConverter".to_string();
59        if let Some(v) = self.alpha {
60            block.fields.insert("CsConverter.alpha".into(), crate::base::FieldValue::Text(v.to_string()));
61        }
62        if let Some(v) = self.gamma {
63            block.fields.insert("CsConverter.gamma".into(), crate::base::FieldValue::Text(v.to_string()));
64        }
65        if let Some(v) = self.max_alpha {
66            block.fields.insert("CsConverter.maxAlpha".into(), crate::base::FieldValue::Text(v.to_string()));
67        }
68        if let Some(v) = self.max_gamma {
69            block.fields.insert("CsConverter.maxGamma".into(), crate::base::FieldValue::Text(v.to_string()));
70        }
71        if let Some(v) = self.max_idc {
72            block.fields.insert("CsConverter.maxIdc".into(), crate::base::FieldValue::Text(v.to_string()));
73        }
74        if let Some(v) = self.min_alpha {
75            block.fields.insert("CsConverter.minAlpha".into(), crate::base::FieldValue::Text(v.to_string()));
76        }
77        if let Some(v) = self.min_gamma {
78            block.fields.insert("CsConverter.minGamma".into(), crate::base::FieldValue::Text(v.to_string()));
79        }
80        if let Some(v) = self.min_idc {
81            block.fields.insert("CsConverter.minIdc".into(), crate::base::FieldValue::Text(v.to_string()));
82        }
83        if let Some(ref v) = self.operating_mode {
84            block.fields.insert("CsConverter.operatingMode".into(), crate::base::FieldValue::Resource(v.uri.clone()));
85        }
86        if let Some(ref v) = self.p_pcc_control {
87            block.fields.insert("CsConverter.pPccControl".into(), crate::base::FieldValue::Resource(v.uri.clone()));
88        }
89        if let Some(v) = self.rated_idc {
90            block.fields.insert("CsConverter.ratedIdc".into(), crate::base::FieldValue::Text(v.to_string()));
91        }
92        if let Some(v) = self.target_alpha {
93            block.fields.insert("CsConverter.targetAlpha".into(), crate::base::FieldValue::Text(v.to_string()));
94        }
95        if let Some(v) = self.target_gamma {
96            block.fields.insert("CsConverter.targetGamma".into(), crate::base::FieldValue::Text(v.to_string()));
97        }
98        if let Some(v) = self.target_idc {
99            block.fields.insert("CsConverter.targetIdc".into(), crate::base::FieldValue::Text(v.to_string()));
100        }
101        block
102    }
103}
104
105impl CsConverter {
106    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
107        let mut obj = Self::default();
108        obj.base.base.base.base.base.id.clone_from(&b.mrid);
109        for (key, val) in &b.fields {
110            match key.as_str() {
111                "CsConverter.alpha" => {
112                    match val {
113                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.alpha = Some(v); } }
114                        crate::base::FieldValue::TextList(svs) => {
115                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.alpha = Some(v); } }
116                        }
117                        _ => {}
118                    }
119                }
120                "CsConverter.gamma" => {
121                    match val {
122                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.gamma = Some(v); } }
123                        crate::base::FieldValue::TextList(svs) => {
124                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.gamma = Some(v); } }
125                        }
126                        _ => {}
127                    }
128                }
129                "CsConverter.maxAlpha" => {
130                    match val {
131                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.max_alpha = Some(v); } }
132                        crate::base::FieldValue::TextList(svs) => {
133                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.max_alpha = Some(v); } }
134                        }
135                        _ => {}
136                    }
137                }
138                "CsConverter.maxGamma" => {
139                    match val {
140                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.max_gamma = Some(v); } }
141                        crate::base::FieldValue::TextList(svs) => {
142                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.max_gamma = Some(v); } }
143                        }
144                        _ => {}
145                    }
146                }
147                "CsConverter.maxIdc" => {
148                    match val {
149                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.max_idc = Some(v); } }
150                        crate::base::FieldValue::TextList(svs) => {
151                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.max_idc = Some(v); } }
152                        }
153                        _ => {}
154                    }
155                }
156                "CsConverter.minAlpha" => {
157                    match val {
158                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.min_alpha = Some(v); } }
159                        crate::base::FieldValue::TextList(svs) => {
160                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.min_alpha = Some(v); } }
161                        }
162                        _ => {}
163                    }
164                }
165                "CsConverter.minGamma" => {
166                    match val {
167                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.min_gamma = Some(v); } }
168                        crate::base::FieldValue::TextList(svs) => {
169                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.min_gamma = Some(v); } }
170                        }
171                        _ => {}
172                    }
173                }
174                "CsConverter.minIdc" => {
175                    match val {
176                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.min_idc = Some(v); } }
177                        crate::base::FieldValue::TextList(svs) => {
178                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.min_idc = Some(v); } }
179                        }
180                        _ => {}
181                    }
182                }
183                "CsConverter.operatingMode" => {
184                    if let crate::base::FieldValue::Resource(sv) = val {
185                        obj.operating_mode = Some(crate::base::UriRef { uri: sv.clone() });
186                    }
187                }
188                "CsConverter.pPccControl" => {
189                    if let crate::base::FieldValue::Resource(sv) = val {
190                        obj.p_pcc_control = Some(crate::base::UriRef { uri: sv.clone() });
191                    }
192                }
193                "CsConverter.ratedIdc" => {
194                    match val {
195                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rated_idc = Some(v); } }
196                        crate::base::FieldValue::TextList(svs) => {
197                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rated_idc = Some(v); } }
198                        }
199                        _ => {}
200                    }
201                }
202                "CsConverter.targetAlpha" => {
203                    match val {
204                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.target_alpha = Some(v); } }
205                        crate::base::FieldValue::TextList(svs) => {
206                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.target_alpha = Some(v); } }
207                        }
208                        _ => {}
209                    }
210                }
211                "CsConverter.targetGamma" => {
212                    match val {
213                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.target_gamma = Some(v); } }
214                        crate::base::FieldValue::TextList(svs) => {
215                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.target_gamma = Some(v); } }
216                        }
217                        _ => {}
218                    }
219                }
220                "CsConverter.targetIdc" => {
221                    match val {
222                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.target_idc = Some(v); } }
223                        crate::base::FieldValue::TextList(svs) => {
224                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.target_idc = Some(v); } }
225                        }
226                        _ => {}
227                    }
228                }
229                "ACDCConverter.PccTerminal" => {
230                    if let crate::base::FieldValue::Resource(sv) = val {
231                        obj.base.pcc_terminal = Some(crate::base::MridRef { mrid: sv.clone() });
232                    }
233                }
234                "ACDCConverter.baseS" => {
235                    match val {
236                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base_s = Some(v); } }
237                        crate::base::FieldValue::TextList(svs) => {
238                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base_s = Some(v); } }
239                        }
240                        _ => {}
241                    }
242                }
243                "ACDCConverter.idc" => {
244                    match val {
245                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.idc = Some(v); } }
246                        crate::base::FieldValue::TextList(svs) => {
247                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.idc = Some(v); } }
248                        }
249                        _ => {}
250                    }
251                }
252                "ACDCConverter.idleLoss" => {
253                    match val {
254                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.idle_loss = Some(v); } }
255                        crate::base::FieldValue::TextList(svs) => {
256                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.idle_loss = Some(v); } }
257                        }
258                        _ => {}
259                    }
260                }
261                "ACDCConverter.maxP" => {
262                    match val {
263                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.max_p = Some(v); } }
264                        crate::base::FieldValue::TextList(svs) => {
265                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.max_p = Some(v); } }
266                        }
267                        _ => {}
268                    }
269                }
270                "ACDCConverter.maxUdc" => {
271                    match val {
272                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.max_udc = Some(v); } }
273                        crate::base::FieldValue::TextList(svs) => {
274                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.max_udc = Some(v); } }
275                        }
276                        _ => {}
277                    }
278                }
279                "ACDCConverter.minP" => {
280                    match val {
281                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.min_p = Some(v); } }
282                        crate::base::FieldValue::TextList(svs) => {
283                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.min_p = Some(v); } }
284                        }
285                        _ => {}
286                    }
287                }
288                "ACDCConverter.minUdc" => {
289                    match val {
290                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.min_udc = Some(v); } }
291                        crate::base::FieldValue::TextList(svs) => {
292                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.min_udc = Some(v); } }
293                        }
294                        _ => {}
295                    }
296                }
297                "ACDCConverter.numberOfValves" => {
298                    match val {
299                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.number_of_valves = Some(v); } }
300                        crate::base::FieldValue::TextList(svs) => {
301                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.number_of_valves = Some(v); } }
302                        }
303                        _ => {}
304                    }
305                }
306                "ACDCConverter.p" => {
307                    match val {
308                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.p = Some(v); } }
309                        crate::base::FieldValue::TextList(svs) => {
310                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.p = Some(v); } }
311                        }
312                        _ => {}
313                    }
314                }
315                "ACDCConverter.poleLossP" => {
316                    match val {
317                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.pole_loss_p = Some(v); } }
318                        crate::base::FieldValue::TextList(svs) => {
319                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.pole_loss_p = Some(v); } }
320                        }
321                        _ => {}
322                    }
323                }
324                "ACDCConverter.q" => {
325                    match val {
326                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.q = Some(v); } }
327                        crate::base::FieldValue::TextList(svs) => {
328                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.q = Some(v); } }
329                        }
330                        _ => {}
331                    }
332                }
333                "ACDCConverter.ratedUdc" => {
334                    match val {
335                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.rated_udc = Some(v); } }
336                        crate::base::FieldValue::TextList(svs) => {
337                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.rated_udc = Some(v); } }
338                        }
339                        _ => {}
340                    }
341                }
342                "ACDCConverter.resistiveLoss" => {
343                    match val {
344                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.resistive_loss = Some(v); } }
345                        crate::base::FieldValue::TextList(svs) => {
346                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.resistive_loss = Some(v); } }
347                        }
348                        _ => {}
349                    }
350                }
351                "ACDCConverter.switchingLoss" => {
352                    match val {
353                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.switching_loss = Some(v); } }
354                        crate::base::FieldValue::TextList(svs) => {
355                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.switching_loss = Some(v); } }
356                        }
357                        _ => {}
358                    }
359                }
360                "ACDCConverter.targetPpcc" => {
361                    match val {
362                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.target_ppcc = Some(v); } }
363                        crate::base::FieldValue::TextList(svs) => {
364                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.target_ppcc = Some(v); } }
365                        }
366                        _ => {}
367                    }
368                }
369                "ACDCConverter.targetUdc" => {
370                    match val {
371                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.target_udc = Some(v); } }
372                        crate::base::FieldValue::TextList(svs) => {
373                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.target_udc = Some(v); } }
374                        }
375                        _ => {}
376                    }
377                }
378                "ACDCConverter.uc" => {
379                    match val {
380                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.uc = Some(v); } }
381                        crate::base::FieldValue::TextList(svs) => {
382                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.uc = Some(v); } }
383                        }
384                        _ => {}
385                    }
386                }
387                "ACDCConverter.udc" => {
388                    match val {
389                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.udc = Some(v); } }
390                        crate::base::FieldValue::TextList(svs) => {
391                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.udc = Some(v); } }
392                        }
393                        _ => {}
394                    }
395                }
396                "ACDCConverter.valveU0" => {
397                    match val {
398                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.valve_u0 = Some(v); } }
399                        crate::base::FieldValue::TextList(svs) => {
400                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.valve_u0 = Some(v); } }
401                        }
402                        _ => {}
403                    }
404                }
405                "ConductingEquipment.BaseVoltage" => {
406                    if let crate::base::FieldValue::Resource(sv) = val {
407                        obj.base.base.base_voltage = Some(crate::base::MridRef { mrid: sv.clone() });
408                    }
409                }
410                "Equipment.EquipmentContainer" => {
411                    if let crate::base::FieldValue::Resource(sv) = val {
412                        obj.base.base.base.equipment_container = Some(crate::base::MridRef { mrid: sv.clone() });
413                    }
414                }
415                "Equipment.aggregate" => {
416                    match val {
417                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.aggregate = Some(sv.trim() == "true"); }
418                        crate::base::FieldValue::TextList(svs) => {
419                            if let Some(sv) = svs.last() { obj.base.base.base.aggregate = Some(sv.trim() == "true"); }
420                        }
421                        _ => {}
422                    }
423                }
424                "Equipment.inService" => {
425                    match val {
426                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.in_service = Some(sv.trim() == "true"); }
427                        crate::base::FieldValue::TextList(svs) => {
428                            if let Some(sv) = svs.last() { obj.base.base.base.in_service = Some(sv.trim() == "true"); }
429                        }
430                        _ => {}
431                    }
432                }
433                "Equipment.normallyInService" => {
434                    match val {
435                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
436                        crate::base::FieldValue::TextList(svs) => {
437                            if let Some(sv) = svs.last() { obj.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
438                        }
439                        _ => {}
440                    }
441                }
442                "IdentifiedObject.description" => {
443                    match val {
444                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.description = sv.clone(); }
445                        crate::base::FieldValue::TextList(svs) => {
446                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.description = sv.clone(); }
447                        }
448                        _ => {}
449                    }
450                }
451                "IdentifiedObject.energyIdentCodeEic" => {
452                    match val {
453                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
454                        crate::base::FieldValue::TextList(svs) => {
455                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
456                        }
457                        _ => {}
458                    }
459                }
460                "IdentifiedObject.mRID" => {
461                    match val {
462                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.m_rid = sv.clone(); }
463                        crate::base::FieldValue::TextList(svs) => {
464                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.m_rid = sv.clone(); }
465                        }
466                        _ => {}
467                    }
468                }
469                "IdentifiedObject.name" => {
470                    match val {
471                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.name = sv.clone(); }
472                        crate::base::FieldValue::TextList(svs) => {
473                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.name = sv.clone(); }
474                        }
475                        _ => {}
476                    }
477                }
478                "IdentifiedObject.shortName" => {
479                    match val {
480                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.short_name = sv.clone(); }
481                        crate::base::FieldValue::TextList(svs) => {
482                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.short_name = sv.clone(); }
483                        }
484                        _ => {}
485                    }
486                }
487                _ => {}
488            }
489        }
490        obj
491    }
492}