Skip to main content

cimstructs/
RotatingMachine.rs

1/// A rotating machine which may be used as a generator or motor.
2#[derive(Debug, Default, Clone, serde::Serialize, serde::Deserialize)]
3pub struct RotatingMachine {
4    #[serde(flatten)]
5    pub base: super::RegulatingCondEq,
6    /// A synchronous machine may operate as a generator and as such becomes a member of a generating unit.
7    #[serde(skip_serializing_if = "Option::is_none")]
8    pub generating_unit: Option<super::base::MridRef>,
9    /// Active power injection. Load sign convention is used, i.e. positive sign means flow out from a node. Starting value for a steady state solution.
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub p: Option<f64>,
12    /// Reactive power injection. Load sign convention is used, i.e. positive sign means flow out from a node. Starting value for a steady state solution.
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub q: Option<f64>,
15    /// Power factor (nameplate data). It is primarily used for short circuit data exchange according to IEC 60909. The attribute cannot be a negative value.
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub rated_power_factor: Option<f64>,
18    /// Nameplate apparent power rating for the unit. The attribute shall have a positive value.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub rated_s: Option<f64>,
21    /// Rated voltage (nameplate data, Ur in IEC 60909-0). It is primarily used for short circuit data exchange according to IEC 60909. The attribute shall be a positive value.
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub rated_u: Option<f64>,
24}
25impl crate::base::CimElement for RotatingMachine {
26    fn mrid(&self) -> &str { &self.base.base.base.base.base.base.id }
27    fn type_name(&self) -> &'static str { "RotatingMachine" }
28    fn as_any(&self) -> &dyn std::any::Any { self }
29    fn to_json_value(&self) -> serde_json::Value {
30        serde_json::to_value(self).unwrap_or(serde_json::Value::Null)
31    }
32    fn to_block(&self) -> crate::base::RdfBlock {
33        let mut block = self.base.to_block();
34        block.type_name = "RotatingMachine".to_string();
35        if let Some(ref v) = self.generating_unit {
36            block.fields.insert("RotatingMachine.GeneratingUnit".into(), crate::base::FieldValue::Resource(v.mrid.clone()));
37        }
38        if let Some(v) = self.p {
39            block.fields.insert("RotatingMachine.p".into(), crate::base::FieldValue::Text(v.to_string()));
40        }
41        if let Some(v) = self.q {
42            block.fields.insert("RotatingMachine.q".into(), crate::base::FieldValue::Text(v.to_string()));
43        }
44        if let Some(v) = self.rated_power_factor {
45            block.fields.insert("RotatingMachine.ratedPowerFactor".into(), crate::base::FieldValue::Text(v.to_string()));
46        }
47        if let Some(v) = self.rated_s {
48            block.fields.insert("RotatingMachine.ratedS".into(), crate::base::FieldValue::Text(v.to_string()));
49        }
50        if let Some(v) = self.rated_u {
51            block.fields.insert("RotatingMachine.ratedU".into(), crate::base::FieldValue::Text(v.to_string()));
52        }
53        block
54    }
55}
56
57impl RotatingMachine {
58    pub fn from_block(b: &crate::base::RdfBlock) -> Self {
59        let mut obj = Self::default();
60        obj.base.base.base.base.base.base.id.clone_from(&b.mrid);
61        for (key, val) in &b.fields {
62            match key.as_str() {
63                "RotatingMachine.GeneratingUnit" => {
64                    if let crate::base::FieldValue::Resource(sv) = val {
65                        obj.generating_unit = Some(crate::base::MridRef { mrid: sv.clone() });
66                    }
67                }
68                "RotatingMachine.p" => {
69                    match val {
70                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.p = Some(v); } }
71                        crate::base::FieldValue::TextList(svs) => {
72                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.p = Some(v); } }
73                        }
74                        _ => {}
75                    }
76                }
77                "RotatingMachine.q" => {
78                    match val {
79                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.q = Some(v); } }
80                        crate::base::FieldValue::TextList(svs) => {
81                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.q = Some(v); } }
82                        }
83                        _ => {}
84                    }
85                }
86                "RotatingMachine.ratedPowerFactor" => {
87                    match val {
88                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rated_power_factor = Some(v); } }
89                        crate::base::FieldValue::TextList(svs) => {
90                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rated_power_factor = Some(v); } }
91                        }
92                        _ => {}
93                    }
94                }
95                "RotatingMachine.ratedS" => {
96                    match val {
97                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rated_s = Some(v); } }
98                        crate::base::FieldValue::TextList(svs) => {
99                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rated_s = Some(v); } }
100                        }
101                        _ => {}
102                    }
103                }
104                "RotatingMachine.ratedU" => {
105                    match val {
106                        crate::base::FieldValue::Text(sv) => { if let Ok(v) = sv.trim().parse() { obj.rated_u = Some(v); } }
107                        crate::base::FieldValue::TextList(svs) => {
108                            if let Some(sv) = svs.last() { if let Ok(v) = sv.trim().parse() { obj.rated_u = Some(v); } }
109                        }
110                        _ => {}
111                    }
112                }
113                "RegulatingCondEq.RegulatingControl" => {
114                    if let crate::base::FieldValue::Resource(sv) = val {
115                        obj.base.regulating_control = Some(crate::base::MridRef { mrid: sv.clone() });
116                    }
117                }
118                "RegulatingCondEq.controlEnabled" => {
119                    match val {
120                        crate::base::FieldValue::Text(sv) => { obj.base.control_enabled = Some(sv.trim() == "true"); }
121                        crate::base::FieldValue::TextList(svs) => {
122                            if let Some(sv) = svs.last() { obj.base.control_enabled = Some(sv.trim() == "true"); }
123                        }
124                        _ => {}
125                    }
126                }
127                "ConductingEquipment.BaseVoltage" => {
128                    if let crate::base::FieldValue::Resource(sv) = val {
129                        obj.base.base.base.base_voltage = Some(crate::base::MridRef { mrid: sv.clone() });
130                    }
131                }
132                "Equipment.EquipmentContainer" => {
133                    if let crate::base::FieldValue::Resource(sv) = val {
134                        obj.base.base.base.base.equipment_container = Some(crate::base::MridRef { mrid: sv.clone() });
135                    }
136                }
137                "Equipment.aggregate" => {
138                    match val {
139                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.aggregate = Some(sv.trim() == "true"); }
140                        crate::base::FieldValue::TextList(svs) => {
141                            if let Some(sv) = svs.last() { obj.base.base.base.base.aggregate = Some(sv.trim() == "true"); }
142                        }
143                        _ => {}
144                    }
145                }
146                "Equipment.inService" => {
147                    match val {
148                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.in_service = Some(sv.trim() == "true"); }
149                        crate::base::FieldValue::TextList(svs) => {
150                            if let Some(sv) = svs.last() { obj.base.base.base.base.in_service = Some(sv.trim() == "true"); }
151                        }
152                        _ => {}
153                    }
154                }
155                "Equipment.normallyInService" => {
156                    match val {
157                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
158                        crate::base::FieldValue::TextList(svs) => {
159                            if let Some(sv) = svs.last() { obj.base.base.base.base.normally_in_service = Some(sv.trim() == "true"); }
160                        }
161                        _ => {}
162                    }
163                }
164                "IdentifiedObject.description" => {
165                    match val {
166                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.description = sv.clone(); }
167                        crate::base::FieldValue::TextList(svs) => {
168                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.description = sv.clone(); }
169                        }
170                        _ => {}
171                    }
172                }
173                "IdentifiedObject.energyIdentCodeEic" => {
174                    match val {
175                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
176                        crate::base::FieldValue::TextList(svs) => {
177                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.energy_ident_code_eic = sv.clone(); }
178                        }
179                        _ => {}
180                    }
181                }
182                "IdentifiedObject.mRID" => {
183                    match val {
184                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.m_rid = sv.clone(); }
185                        crate::base::FieldValue::TextList(svs) => {
186                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.m_rid = sv.clone(); }
187                        }
188                        _ => {}
189                    }
190                }
191                "IdentifiedObject.name" => {
192                    match val {
193                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.name = sv.clone(); }
194                        crate::base::FieldValue::TextList(svs) => {
195                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.name = sv.clone(); }
196                        }
197                        _ => {}
198                    }
199                }
200                "IdentifiedObject.shortName" => {
201                    match val {
202                        crate::base::FieldValue::Text(sv) => { obj.base.base.base.base.base.base.short_name = sv.clone(); }
203                        crate::base::FieldValue::TextList(svs) => {
204                            if let Some(sv) = svs.last() { obj.base.base.base.base.base.base.short_name = sv.clone(); }
205                        }
206                        _ => {}
207                    }
208                }
209                _ => {}
210            }
211        }
212        obj
213    }
214}