Skip to main content

cimstructs/
PhaseTapChanger.rs

1/// A transformer phase shifting tap model that controls the phase angle difference across the power transformer and potentially the active power flow through the power transformer. This phase tap model may also impact the voltage magnitude.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct PhaseTapChanger {
4    #[serde(flatten)]
5    pub base: super::TapChanger,
6    /// Transformer end to which this phase tap changer belongs.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub transformer_end: Option<super::base::MridRef>,
9}
10impl crate::base::CimElement for PhaseTapChanger {
11    fn mrid(&self) -> &str { &self.base.base.base.id }
12    fn type_name(&self) -> &'static str { "PhaseTapChanger" }
13    fn as_any(&self) -> &dyn std::any::Any { self }
14    fn to_json_value(&self) -> serde_json::Value {
15        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
16    }
17    fn to_block(&self) -> crate::base::RdfBlock {
18        let mut block = self.base.to_block();
19        block.type_name = "PhaseTapChanger".to_string();
20        if let Some(ref v) = self.transformer_end {
21            block.fields.insert("PhaseTapChanger.TransformerEnd".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
22        }
23        block
24    }
25}
26
27impl PhaseTapChanger {
28    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
29        let mut obj = Self::default();
30        obj.base.base.base.id.clone_from(&b.mrid);
31        for (key, val) in &b.fields {
32            match key.as_str() {
33                "PhaseTapChanger.TransformerEnd" => {
34                    if let crate::base::FieldValue::Resource(sv) = val {
35                        obj.transformer_end = Some(crate::base::MridRef { mrid: sv.clone() });
36                    }
37                }
38                "TapChanger.TapChangerControl" => {
39                    if let crate::base::FieldValue::Resource(sv) = val {
40                        obj.base.tap_changer_control = Some(crate::base::MridRef { mrid: sv.clone() });
41                    }
42                }
43                "TapChanger.controlEnabled" => {
44                    match val {
45                        crate::base::FieldValue::Text(sv) => { obj.base.control_enabled = Some(sv.trim() == "true"); }
46                        crate::base::FieldValue::TextList(svs) => {
47                            if let Some(sv) = svs.last() { obj.base.control_enabled = Some(sv.trim() == "true"); }
48                        }
49                        _ => {}
50                    }
51                }
52                "TapChanger.highStep" => {
53                    match val {
54                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.high_step = Some(v); } }
55                        crate::base::FieldValue::TextList(svs) => {
56                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.high_step = Some(v); } }
57                        }
58                        _ => {}
59                    }
60                }
61                "TapChanger.lowStep" => {
62                    match val {
63                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.low_step = Some(v); } }
64                        crate::base::FieldValue::TextList(svs) => {
65                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.low_step = Some(v); } }
66                        }
67                        _ => {}
68                    }
69                }
70                "TapChanger.ltcFlag" => {
71                    match val {
72                        crate::base::FieldValue::Text(sv) => { obj.base.ltc_flag = Some(sv.trim() == "true"); }
73                        crate::base::FieldValue::TextList(svs) => {
74                            if let Some(sv) = svs.last() { obj.base.ltc_flag = Some(sv.trim() == "true"); }
75                        }
76                        _ => {}
77                    }
78                }
79                "TapChanger.neutralStep" => {
80                    match val {
81                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.neutral_step = Some(v); } }
82                        crate::base::FieldValue::TextList(svs) => {
83                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.neutral_step = Some(v); } }
84                        }
85                        _ => {}
86                    }
87                }
88                "TapChanger.neutralU" => {
89                    match val {
90                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.neutral_u = Some(v); } }
91                        crate::base::FieldValue::TextList(svs) => {
92                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.neutral_u = Some(v); } }
93                        }
94                        _ => {}
95                    }
96                }
97                "TapChanger.normalStep" => {
98                    match val {
99                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.normal_step = Some(v); } }
100                        crate::base::FieldValue::TextList(svs) => {
101                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.normal_step = Some(v); } }
102                        }
103                        _ => {}
104                    }
105                }
106                "TapChanger.step" => {
107                    match val {
108                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.base.step = Some(v); } }
109                        crate::base::FieldValue::TextList(svs) => {
110                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.base.step = Some(v); } }
111                        }
112                        _ => {}
113                    }
114                }
115                "IdentifiedObject.description" => {
116                    match val {
117                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
118                        crate::base::FieldValue::TextList(svs) => {
119                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
120                        }
121                        _ => {}
122                    }
123                }
124                "IdentifiedObject.energyIdentCodeEic" => {
125                    match val {
126                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
127                        crate::base::FieldValue::TextList(svs) => {
128                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
129                        }
130                        _ => {}
131                    }
132                }
133                "IdentifiedObject.mRID" => {
134                    match val {
135                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
136                        crate::base::FieldValue::TextList(svs) => {
137                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
138                        }
139                        _ => {}
140                    }
141                }
142                "IdentifiedObject.name" => {
143                    match val {
144                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
145                        crate::base::FieldValue::TextList(svs) => {
146                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
147                        }
148                        _ => {}
149                    }
150                }
151                "IdentifiedObject.shortName" => {
152                    match val {
153                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
154                        crate::base::FieldValue::TextList(svs) => {
155                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
156                        }
157                        _ => {}
158                    }
159                }
160                _ => {}
161            }
162        }
163        obj
164    }
165}