Skip to main content

cimstructs/
PssSTAB2A.rs

1/// Power system stabilizer part of an ABB excitation system. [Footnote: ABB excitation systems are an example of suitable products available commercially. This information is given for the convenience of users of this document and does not constitute an endorsement by IEC of these products.]
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct PssSTAB2A {
4    #[serde(flatten)]
5    pub base: super::PowerSystemStabilizerDynamics,
6    /// Stabilizer output limiter (HLIM). Typical value = 0,5.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub hlim: Option<f64>,
9    /// Gain (K2). Typical value = 1,0.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub k2: Option<f64>,
12    /// Gain (K3). Typical value = 0,25.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub k3: Option<f64>,
15    /// Gain (K4). Typical value = 0,075.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub k4: Option<f64>,
18    /// Gain (K5). Typical value = 2,5.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub k5: Option<f64>,
21    /// Time constant (T2). Typical value = 4,0.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub t2: Option<f64>,
24    /// Time constant (T3). Typical value = 2,0.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub t3: Option<f64>,
27    /// Time constant (T5). Typical value = 4,5.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub t5: Option<f64>,
30}
31impl crate::base::CimElement for PssSTAB2A {
32    fn mrid(&self) -> &str { &self.base.base.base.id }
33    fn type_name(&self) -> &'static str { "PssSTAB2A" }
34    fn as_any(&self) -> &dyn std::any::Any { self }
35    fn to_json_value(&self) -> serde_json::Value {
36        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
37    }
38    fn to_block(&self) -> crate::base::RdfBlock {
39        let mut block = self.base.to_block();
40        block.type_name = "PssSTAB2A".to_string();
41        if let Some(v) = self.hlim {
42            block.fields.insert("PssSTAB2A.hlim".into(), crate::base::FieldValue::Text(v.to_string()));
43        }
44        if let Some(v) = self.k2 {
45            block.fields.insert("PssSTAB2A.k2".into(), crate::base::FieldValue::Text(v.to_string()));
46        }
47        if let Some(v) = self.k3 {
48            block.fields.insert("PssSTAB2A.k3".into(), crate::base::FieldValue::Text(v.to_string()));
49        }
50        if let Some(v) = self.k4 {
51            block.fields.insert("PssSTAB2A.k4".into(), crate::base::FieldValue::Text(v.to_string()));
52        }
53        if let Some(v) = self.k5 {
54            block.fields.insert("PssSTAB2A.k5".into(), crate::base::FieldValue::Text(v.to_string()));
55        }
56        if let Some(v) = self.t2 {
57            block.fields.insert("PssSTAB2A.t2".into(), crate::base::FieldValue::Text(v.to_string()));
58        }
59        if let Some(v) = self.t3 {
60            block.fields.insert("PssSTAB2A.t3".into(), crate::base::FieldValue::Text(v.to_string()));
61        }
62        if let Some(v) = self.t5 {
63            block.fields.insert("PssSTAB2A.t5".into(), crate::base::FieldValue::Text(v.to_string()));
64        }
65        block
66    }
67}
68
69impl PssSTAB2A {
70    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
71        let mut obj = Self::default();
72        obj.base.base.base.id.clone_from(&b.mrid);
73        for (key, val) in &b.fields {
74            match key.as_str() {
75                "PssSTAB2A.hlim" => {
76                    match val {
77                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.hlim = Some(v); } }
78                        crate::base::FieldValue::TextList(svs) => {
79                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.hlim = Some(v); } }
80                        }
81                        _ => {}
82                    }
83                }
84                "PssSTAB2A.k2" => {
85                    match val {
86                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
87                        crate::base::FieldValue::TextList(svs) => {
88                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
89                        }
90                        _ => {}
91                    }
92                }
93                "PssSTAB2A.k3" => {
94                    match val {
95                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k3 = Some(v); } }
96                        crate::base::FieldValue::TextList(svs) => {
97                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k3 = Some(v); } }
98                        }
99                        _ => {}
100                    }
101                }
102                "PssSTAB2A.k4" => {
103                    match val {
104                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k4 = Some(v); } }
105                        crate::base::FieldValue::TextList(svs) => {
106                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k4 = Some(v); } }
107                        }
108                        _ => {}
109                    }
110                }
111                "PssSTAB2A.k5" => {
112                    match val {
113                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k5 = Some(v); } }
114                        crate::base::FieldValue::TextList(svs) => {
115                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k5 = Some(v); } }
116                        }
117                        _ => {}
118                    }
119                }
120                "PssSTAB2A.t2" => {
121                    match val {
122                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
123                        crate::base::FieldValue::TextList(svs) => {
124                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
125                        }
126                        _ => {}
127                    }
128                }
129                "PssSTAB2A.t3" => {
130                    match val {
131                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
132                        crate::base::FieldValue::TextList(svs) => {
133                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
134                        }
135                        _ => {}
136                    }
137                }
138                "PssSTAB2A.t5" => {
139                    match val {
140                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t5 = Some(v); } }
141                        crate::base::FieldValue::TextList(svs) => {
142                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t5 = Some(v); } }
143                        }
144                        _ => {}
145                    }
146                }
147                "PowerSystemStabilizerDynamics.ExcitationSystemDynamics" => {
148                    if let crate::base::FieldValue::Resource(sv) = val {
149                        obj.base.excitation_system_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
150                    }
151                }
152                "DynamicsFunctionBlock.enabled" => {
153                    match val {
154                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
155                        crate::base::FieldValue::TextList(svs) => {
156                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
157                        }
158                        _ => {}
159                    }
160                }
161                "IdentifiedObject.description" => {
162                    match val {
163                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
164                        crate::base::FieldValue::TextList(svs) => {
165                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
166                        }
167                        _ => {}
168                    }
169                }
170                "IdentifiedObject.energyIdentCodeEic" => {
171                    match val {
172                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
173                        crate::base::FieldValue::TextList(svs) => {
174                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
175                        }
176                        _ => {}
177                    }
178                }
179                "IdentifiedObject.mRID" => {
180                    match val {
181                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
182                        crate::base::FieldValue::TextList(svs) => {
183                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
184                        }
185                        _ => {}
186                    }
187                }
188                "IdentifiedObject.name" => {
189                    match val {
190                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
191                        crate::base::FieldValue::TextList(svs) => {
192                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
193                        }
194                        _ => {}
195                    }
196                }
197                "IdentifiedObject.shortName" => {
198                    match val {
199                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
200                        crate::base::FieldValue::TextList(svs) => {
201                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
202                        }
203                        _ => {}
204                    }
205                }
206                _ => {}
207            }
208        }
209        obj
210    }
211}