Skip to main content

cimstructs/
NonlinearShuntCompensator.rs

1/// A non linear shunt compensator has bank or section admittance values that differ. The attributes g, b, g0 and b0 of the associated NonlinearShuntCompensatorPoint describe the total conductance and admittance of a NonlinearShuntCompensatorPoint at a section number specified by NonlinearShuntCompensatorPoint.sectionNumber.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct NonlinearShuntCompensator {
4    #[serde(flatten)]
5    pub base: super::ShuntCompensator,
6}
7impl crate::base::CimElement for NonlinearShuntCompensator {
8    fn mrid(&self) -> &str { &self.base.base.base.base.base.base.base.id }
9    fn type_name(&self) -> &'static str { "NonlinearShuntCompensator" }
10    fn as_any(&self) -> &dyn std::any::Any { self }
11    fn to_json_value(&self) -> serde_json::Value {
12        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
13    }
14    fn to_block(&self) -> crate::base::RdfBlock {
15        let mut block = self.base.to_block();
16        block.type_name = "NonlinearShuntCompensator".to_string();
17        block
18    }
19}
20
21impl NonlinearShuntCompensator {
22    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
23        let mut obj = Self::default();
24        obj.base.base.base.base.base.base.base.id.clone_from(&b.mrid);
25        for (key, val) in &b.fields {
26            match key.as_str() {
27                "ShuntCompensator.aVRDelay" => {
28                    match val {
29                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.a_vr_delay = Some(v); } }
30                        crate::base::FieldValue::TextList(svs) => {
31                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.a_vr_delay = Some(v); } }
32                        }
33                        _ => {}
34                    }
35                }
36                "ShuntCompensator.grounded" => {
37                    match val {
38                        crate::base::FieldValue::Text(sv) => { obj.base.grounded = Some(sv.trim() == "true"); }
39                        crate::base::FieldValue::TextList(svs) => {
40                            if let Some(sv) = svs.last() { obj.base.grounded = Some(sv.trim() == "true"); }
41                        }
42                        _ => {}
43                    }
44                }
45                "ShuntCompensator.maximumSections" => {
46                    match val {
47                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.maximum_sections = Some(v); } }
48                        crate::base::FieldValue::TextList(svs) => {
49                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.maximum_sections = Some(v); } }
50                        }
51                        _ => {}
52                    }
53                }
54                "ShuntCompensator.nomU" => {
55                    match val {
56                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.nom_u = Some(v); } }
57                        crate::base::FieldValue::TextList(svs) => {
58                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.nom_u = Some(v); } }
59                        }
60                        _ => {}
61                    }
62                }
63                "ShuntCompensator.normalSections" => {
64                    match val {
65                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.normal_sections = Some(v); } }
66                        crate::base::FieldValue::TextList(svs) => {
67                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.normal_sections = Some(v); } }
68                        }
69                        _ => {}
70                    }
71                }
72                "ShuntCompensator.sections" => {
73                    match val {
74                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.sections = Some(v); } }
75                        crate::base::FieldValue::TextList(svs) => {
76                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.sections = Some(v); } }
77                        }
78                        _ => {}
79                    }
80                }
81                "ShuntCompensator.voltageSensitivity" => {
82                    match val {
83                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.voltage_sensitivity = Some(v); } }
84                        crate::base::FieldValue::TextList(svs) => {
85                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.voltage_sensitivity = Some(v); } }
86                        }
87                        _ => {}
88                    }
89                }
90                "RegulatingCondEq.RegulatingControl" => {
91                    if let crate::base::FieldValue::Resource(sv) = val {
92                        obj.base.base.regulating_control = Some(crate::base::MridRef { mrid: sv.clone() });
93                    }
94                }
95                "RegulatingCondEq.controlEnabled" => {
96                    match val {
97                        crate::base::FieldValue::Text(sv) => { obj.base.base.control_enabled = Some(sv.trim() == "true"); }
98                        crate::base::FieldValue::TextList(svs) => {
99                            if let Some(sv) = svs.last() { obj.base.base.control_enabled = Some(sv.trim() == "true"); }
100                        }
101                        _ => {}
102                    }
103                }
104                "ConductingEquipment.BaseVoltage" => {
105                    if let crate::base::FieldValue::Resource(sv) = val {
106                        obj.base.base.base.base.base_voltage = Some(crate::base::MridRef { mrid: sv.clone() });
107                    }
108                }
109                "Equipment.EquipmentContainer" => {
110                    if let crate::base::FieldValue::Resource(sv) = val {
111                        obj.base.base.base.base.base.equipment_container = Some(crate::base::MridRef { mrid: sv.clone() });
112                    }
113                }
114                "Equipment.aggregate" => {
115                    match val {
116                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.aggregate = Some(sv.trim() == "true"); }
117                        crate::base::FieldValue::TextList(svs) => {
118                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.aggregate = Some(sv.trim() == "true"); }
119                        }
120                        _ => {}
121                    }
122                }
123                "Equipment.inService" => {
124                    match val {
125                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.in_service = Some(sv.trim() == "true"); }
126                        crate::base::FieldValue::TextList(svs) => {
127                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.in_service = Some(sv.trim() == "true"); }
128                        }
129                        _ => {}
130                    }
131                }
132                "Equipment.normallyInService" => {
133                    match val {
134                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
135                        crate::base::FieldValue::TextList(svs) => {
136                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
137                        }
138                        _ => {}
139                    }
140                }
141                "IdentifiedObject.description" => {
142                    match val {
143                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.base.description = sv.clone(); }
144                        crate::base::FieldValue::TextList(svs) => {
145                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.base.description = sv.clone(); }
146                        }
147                        _ => {}
148                    }
149                }
150                "IdentifiedObject.energyIdentCodeEic" => {
151                    match val {
152                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
153                        crate::base::FieldValue::TextList(svs) => {
154                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
155                        }
156                        _ => {}
157                    }
158                }
159                "IdentifiedObject.mRID" => {
160                    match val {
161                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.base.m_rid = sv.clone(); }
162                        crate::base::FieldValue::TextList(svs) => {
163                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.base.m_rid = sv.clone(); }
164                        }
165                        _ => {}
166                    }
167                }
168                "IdentifiedObject.name" => {
169                    match val {
170                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.base.name = sv.clone(); }
171                        crate::base::FieldValue::TextList(svs) => {
172                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.base.name = sv.clone(); }
173                        }
174                        _ => {}
175                    }
176                }
177                "IdentifiedObject.shortName" => {
178                    match val {
179                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.base.short_name = sv.clone(); }
180                        crate::base::FieldValue::TextList(svs) => {
181                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.base.short_name = sv.clone(); }
182                        }
183                        _ => {}
184                    }
185                }
186                _ => {}
187            }
188        }
189        obj
190    }
191}