Skip to main content

cimstructs/
PssSH.rs

1/// SiemensTM “H infinity” power system stabilizer with generator electrical power input. [Footnote: Siemens 'H infinity' power system stabilizers 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 PssSH {
4    #[serde(flatten)]
5    pub base: super::PowerSystemStabilizerDynamics,
6    /// Main gain (K). Typical value = 1.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub k: Option<f64>,
9    /// Gain 0 (K0). Typical value = 0,012.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub k0: Option<f64>,
12    /// Gain 1 (K1). Typical value = 0,488.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub k1: Option<f64>,
15    /// Gain 2 (K2). Typical value = 0,064.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub k2: Option<f64>,
18    /// Gain 3 (K3). Typical value = 0,224.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub k3: Option<f64>,
21    /// Gain 4 (K4). Typical value = 0,1.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub k4: Option<f64>,
24    /// Time constant 1 (T1) (> 0). Typical value = 0,076.
25    #[serde(skip_serializing_if = "Option::is_none")]
26    pub t1: Option<f64>,
27    /// Time constant 2 (T2) (> 0). Typical value = 0,086.
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub t2: Option<f64>,
30    /// Time constant 3 (T3) (> 0). Typical value = 1,068.
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub t3: Option<f64>,
33    /// Time constant 4 (T4) (> 0). Typical value = 1,913.
34    #[serde(skip_serializing_if = "Option::is_none")]
35    pub t4: Option<f64>,
36    /// Input time constant (Td) (>= 0). Typical value = 10.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub td: Option<f64>,
39    /// Output maximum limit (Vsmax) (> PssSH.vsmin). Typical value = 0,1.
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub vsmax: Option<f64>,
42    /// Output minimum limit (Vsmin) (< PssSH.vsmax). Typical value = -0,1.
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub vsmin: Option<f64>,
45}
46impl crate::base::CimElement for PssSH {
47    fn mrid(&self) -> &str { &self.base.base.base.id }
48    fn type_name(&self) -> &'static str { "PssSH" }
49    fn as_any(&self) -> &dyn std::any::Any { self }
50    fn to_json_value(&self) -> serde_json::Value {
51        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
52    }
53    fn to_block(&self) -> crate::base::RdfBlock {
54        let mut block = self.base.to_block();
55        block.type_name = "PssSH".to_string();
56        if let Some(v) = self.k {
57            block.fields.insert("PssSH.k".into(), crate::base::FieldValue::Text(v.to_string()));
58        }
59        if let Some(v) = self.k0 {
60            block.fields.insert("PssSH.k0".into(), crate::base::FieldValue::Text(v.to_string()));
61        }
62        if let Some(v) = self.k1 {
63            block.fields.insert("PssSH.k1".into(), crate::base::FieldValue::Text(v.to_string()));
64        }
65        if let Some(v) = self.k2 {
66            block.fields.insert("PssSH.k2".into(), crate::base::FieldValue::Text(v.to_string()));
67        }
68        if let Some(v) = self.k3 {
69            block.fields.insert("PssSH.k3".into(), crate::base::FieldValue::Text(v.to_string()));
70        }
71        if let Some(v) = self.k4 {
72            block.fields.insert("PssSH.k4".into(), crate::base::FieldValue::Text(v.to_string()));
73        }
74        if let Some(v) = self.t1 {
75            block.fields.insert("PssSH.t1".into(), crate::base::FieldValue::Text(v.to_string()));
76        }
77        if let Some(v) = self.t2 {
78            block.fields.insert("PssSH.t2".into(), crate::base::FieldValue::Text(v.to_string()));
79        }
80        if let Some(v) = self.t3 {
81            block.fields.insert("PssSH.t3".into(), crate::base::FieldValue::Text(v.to_string()));
82        }
83        if let Some(v) = self.t4 {
84            block.fields.insert("PssSH.t4".into(), crate::base::FieldValue::Text(v.to_string()));
85        }
86        if let Some(v) = self.td {
87            block.fields.insert("PssSH.td".into(), crate::base::FieldValue::Text(v.to_string()));
88        }
89        if let Some(v) = self.vsmax {
90            block.fields.insert("PssSH.vsmax".into(), crate::base::FieldValue::Text(v.to_string()));
91        }
92        if let Some(v) = self.vsmin {
93            block.fields.insert("PssSH.vsmin".into(), crate::base::FieldValue::Text(v.to_string()));
94        }
95        block
96    }
97}
98
99impl PssSH {
100    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
101        let mut obj = Self::default();
102        obj.base.base.base.id.clone_from(&b.mrid);
103        for (key, val) in &b.fields {
104            match key.as_str() {
105                "PssSH.k" => {
106                    match val {
107                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k = Some(v); } }
108                        crate::base::FieldValue::TextList(svs) => {
109                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k = Some(v); } }
110                        }
111                        _ => {}
112                    }
113                }
114                "PssSH.k0" => {
115                    match val {
116                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k0 = Some(v); } }
117                        crate::base::FieldValue::TextList(svs) => {
118                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k0 = Some(v); } }
119                        }
120                        _ => {}
121                    }
122                }
123                "PssSH.k1" => {
124                    match val {
125                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k1 = Some(v); } }
126                        crate::base::FieldValue::TextList(svs) => {
127                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k1 = Some(v); } }
128                        }
129                        _ => {}
130                    }
131                }
132                "PssSH.k2" => {
133                    match val {
134                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
135                        crate::base::FieldValue::TextList(svs) => {
136                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k2 = Some(v); } }
137                        }
138                        _ => {}
139                    }
140                }
141                "PssSH.k3" => {
142                    match val {
143                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k3 = Some(v); } }
144                        crate::base::FieldValue::TextList(svs) => {
145                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k3 = Some(v); } }
146                        }
147                        _ => {}
148                    }
149                }
150                "PssSH.k4" => {
151                    match val {
152                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.k4 = Some(v); } }
153                        crate::base::FieldValue::TextList(svs) => {
154                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.k4 = Some(v); } }
155                        }
156                        _ => {}
157                    }
158                }
159                "PssSH.t1" => {
160                    match val {
161                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t1 = Some(v); } }
162                        crate::base::FieldValue::TextList(svs) => {
163                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t1 = Some(v); } }
164                        }
165                        _ => {}
166                    }
167                }
168                "PssSH.t2" => {
169                    match val {
170                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
171                        crate::base::FieldValue::TextList(svs) => {
172                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t2 = Some(v); } }
173                        }
174                        _ => {}
175                    }
176                }
177                "PssSH.t3" => {
178                    match val {
179                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
180                        crate::base::FieldValue::TextList(svs) => {
181                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t3 = Some(v); } }
182                        }
183                        _ => {}
184                    }
185                }
186                "PssSH.t4" => {
187                    match val {
188                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.t4 = Some(v); } }
189                        crate::base::FieldValue::TextList(svs) => {
190                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.t4 = Some(v); } }
191                        }
192                        _ => {}
193                    }
194                }
195                "PssSH.td" => {
196                    match val {
197                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
198                        crate::base::FieldValue::TextList(svs) => {
199                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.td = Some(v); } }
200                        }
201                        _ => {}
202                    }
203                }
204                "PssSH.vsmax" => {
205                    match val {
206                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vsmax = Some(v); } }
207                        crate::base::FieldValue::TextList(svs) => {
208                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vsmax = Some(v); } }
209                        }
210                        _ => {}
211                    }
212                }
213                "PssSH.vsmin" => {
214                    match val {
215                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.vsmin = Some(v); } }
216                        crate::base::FieldValue::TextList(svs) => {
217                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.vsmin = Some(v); } }
218                        }
219                        _ => {}
220                    }
221                }
222                "PowerSystemStabilizerDynamics.ExcitationSystemDynamics" => {
223                    if let crate::base::FieldValue::Resource(sv) = val {
224                        obj.base.excitation_system_dynamics = Some(crate::base::MridRef { mrid: sv.clone() });
225                    }
226                }
227                "DynamicsFunctionBlock.enabled" => {
228                    match val {
229                        crate::base::FieldValue::Text(sv) => { obj.base.base.enabled = Some(sv.trim() == "true"); }
230                        crate::base::FieldValue::TextList(svs) => {
231                            if let Some(sv) = svs.last() { obj.base.base.enabled = Some(sv.trim() == "true"); }
232                        }
233                        _ => {}
234                    }
235                }
236                "IdentifiedObject.description" => {
237                    match val {
238                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.description = sv.clone(); }
239                        crate::base::FieldValue::TextList(svs) => {
240                            if let Some(sv) = svs.last() { obj.base.base.base.description = sv.clone(); }
241                        }
242                        _ => {}
243                    }
244                }
245                "IdentifiedObject.energyIdentCodeEic" => {
246                    match val {
247                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
248                        crate::base::FieldValue::TextList(svs) => {
249                            if let Some(sv) = svs.last() { obj.base.base.base.energy_ident_code_eic = sv.clone(); }
250                        }
251                        _ => {}
252                    }
253                }
254                "IdentifiedObject.mRID" => {
255                    match val {
256                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.m_rid = sv.clone(); }
257                        crate::base::FieldValue::TextList(svs) => {
258                            if let Some(sv) = svs.last() { obj.base.base.base.m_rid = sv.clone(); }
259                        }
260                        _ => {}
261                    }
262                }
263                "IdentifiedObject.name" => {
264                    match val {
265                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.name = sv.clone(); }
266                        crate::base::FieldValue::TextList(svs) => {
267                            if let Some(sv) = svs.last() { obj.base.base.base.name = sv.clone(); }
268                        }
269                        _ => {}
270                    }
271                }
272                "IdentifiedObject.shortName" => {
273                    match val {
274                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.short_name = sv.clone(); }
275                        crate::base::FieldValue::TextList(svs) => {
276                            if let Some(sv) = svs.last() { obj.base.base.base.short_name = sv.clone(); }
277                        }
278                        _ => {}
279                    }
280                }
281                _ => {}
282            }
283        }
284        obj
285    }
286}