Skip to main content

cimstructs/
PhaseTapChangerSymmetrical.rs

1/// Describes a symmetrical phase shifting transformer tap model in which the voltage magnitude of both sides is the same. The difference voltage magnitude is the base in an equal-sided triangle where the sides corresponds to the primary and secondary voltages. The phase angle difference corresponds to the top angle and can be expressed as twice the arctangent of half the total difference voltage.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct PhaseTapChangerSymmetrical {
4    #[serde(flatten)]
5    pub base: super::PhaseTapChangerNonLinear,
6}
7impl crate::base::CimElement for PhaseTapChangerSymmetrical {
8    fn mrid(&self) -> &str { &self.base.base.base.base.base.id }
9    fn type_name(&self) -> &'static str { "PhaseTapChangerSymmetrical" }
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 = "PhaseTapChangerSymmetrical".to_string();
17        block
18    }
19}
20
21impl PhaseTapChangerSymmetrical {
22    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
23        let mut obj = Self::default();
24        obj.base.base.base.base.base.id.clone_from(&b.mrid);
25        for (key, val) in &b.fields {
26            match key.as_str() {
27                "PhaseTapChangerNonLinear.voltageStepIncrement" => {
28                    match val {
29                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.voltage_step_increment = Some(v); } }
30                        crate::base::FieldValue::TextList(svs) => {
31                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.voltage_step_increment = Some(v); } }
32                        }
33                        _ => {}
34                    }
35                }
36                "PhaseTapChangerNonLinear.xMax" => {
37                    match val {
38                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.x_max = Some(v); } }
39                        crate::base::FieldValue::TextList(svs) => {
40                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.x_max = Some(v); } }
41                        }
42                        _ => {}
43                    }
44                }
45                "PhaseTapChangerNonLinear.xMin" => {
46                    match val {
47                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.x_min = Some(v); } }
48                        crate::base::FieldValue::TextList(svs) => {
49                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.x_min = Some(v); } }
50                        }
51                        _ => {}
52                    }
53                }
54                "PhaseTapChanger.TransformerEnd" => {
55                    if let crate::base::FieldValue::Resource(sv) = val {
56                        obj.base.base.transformer_end = Some(crate::base::MridRef { mrid: sv.clone() });
57                    }
58                }
59                "TapChanger.TapChangerControl" => {
60                    if let crate::base::FieldValue::Resource(sv) = val {
61                        obj.base.base.base.tap_changer_control = Some(crate::base::MridRef { mrid: sv.clone() });
62                    }
63                }
64                "TapChanger.controlEnabled" => {
65                    match val {
66                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.control_enabled = Some(sv.trim() == "true"); }
67                        crate::base::FieldValue::TextList(svs) => {
68                            if let Some(sv) = svs.last() { obj.base.base.base.control_enabled = Some(sv.trim() == "true"); }
69                        }
70                        _ => {}
71                    }
72                }
73                "TapChanger.highStep" => {
74                    match val {
75                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.high_step = Some(v); } }
76                        crate::base::FieldValue::TextList(svs) => {
77                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.high_step = Some(v); } }
78                        }
79                        _ => {}
80                    }
81                }
82                "TapChanger.lowStep" => {
83                    match val {
84                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.low_step = Some(v); } }
85                        crate::base::FieldValue::TextList(svs) => {
86                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.low_step = Some(v); } }
87                        }
88                        _ => {}
89                    }
90                }
91                "TapChanger.ltcFlag" => {
92                    match val {
93                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.ltc_flag = Some(sv.trim() == "true"); }
94                        crate::base::FieldValue::TextList(svs) => {
95                            if let Some(sv) = svs.last() { obj.base.base.base.ltc_flag = Some(sv.trim() == "true"); }
96                        }
97                        _ => {}
98                    }
99                }
100                "TapChanger.neutralStep" => {
101                    match val {
102                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.neutral_step = Some(v); } }
103                        crate::base::FieldValue::TextList(svs) => {
104                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.neutral_step = Some(v); } }
105                        }
106                        _ => {}
107                    }
108                }
109                "TapChanger.neutralU" => {
110                    match val {
111                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.neutral_u = Some(v); } }
112                        crate::base::FieldValue::TextList(svs) => {
113                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.neutral_u = Some(v); } }
114                        }
115                        _ => {}
116                    }
117                }
118                "TapChanger.normalStep" => {
119                    match val {
120                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.normal_step = Some(v); } }
121                        crate::base::FieldValue::TextList(svs) => {
122                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.normal_step = Some(v); } }
123                        }
124                        _ => {}
125                    }
126                }
127                "TapChanger.step" => {
128                    match val {
129                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.base.base.step = Some(v); } }
130                        crate::base::FieldValue::TextList(svs) => {
131                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.base.base.step = Some(v); } }
132                        }
133                        _ => {}
134                    }
135                }
136                "IdentifiedObject.description" => {
137                    match val {
138                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.description = sv.clone(); }
139                        crate::base::FieldValue::TextList(svs) => {
140                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.description = sv.clone(); }
141                        }
142                        _ => {}
143                    }
144                }
145                "IdentifiedObject.energyIdentCodeEic" => {
146                    match val {
147                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
148                        crate::base::FieldValue::TextList(svs) => {
149                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
150                        }
151                        _ => {}
152                    }
153                }
154                "IdentifiedObject.mRID" => {
155                    match val {
156                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.m_rid = sv.clone(); }
157                        crate::base::FieldValue::TextList(svs) => {
158                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.m_rid = sv.clone(); }
159                        }
160                        _ => {}
161                    }
162                }
163                "IdentifiedObject.name" => {
164                    match val {
165                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.name = sv.clone(); }
166                        crate::base::FieldValue::TextList(svs) => {
167                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.name = sv.clone(); }
168                        }
169                        _ => {}
170                    }
171                }
172                "IdentifiedObject.shortName" => {
173                    match val {
174                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.short_name = sv.clone(); }
175                        crate::base::FieldValue::TextList(svs) => {
176                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.short_name = sv.clone(); }
177                        }
178                        _ => {}
179                    }
180                }
181                _ => {}
182            }
183        }
184        obj
185    }
186}