1pub type Model111 = InverterSinglePhaseFloat;
4#[derive(Debug)]
8#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
9pub struct InverterSinglePhaseFloat {
10 pub a: f32,
14 pub aph_a: f32,
20 pub aph_b: Option<f32>,
24 pub aph_c: Option<f32>,
28 pub pp_vph_ab: Option<f32>,
32 pub pp_vph_bc: Option<f32>,
36 pub pp_vph_ca: Option<f32>,
40 pub ph_vph_a: f32,
44 pub ph_vph_b: Option<f32>,
48 pub ph_vph_c: Option<f32>,
52 pub w: f32,
56 pub hz: f32,
60 pub va: Option<f32>,
64 pub v_ar: Option<f32>,
68 pub pf: Option<f32>,
72 pub wh: f32,
76 pub dca: Option<f32>,
80 pub dcv: Option<f32>,
84 pub dcw: Option<f32>,
88 pub tmp_cab: f32,
92 pub tmp_snk: Option<f32>,
96 pub tmp_trns: Option<f32>,
100 pub tmp_ot: Option<f32>,
104 pub st: St,
108 pub st_vnd: Option<u16>,
112 pub evt1: Evt1,
116 pub evt2: Evt2,
120 pub evt_vnd1: Option<EvtVnd1>,
124 pub evt_vnd2: Option<EvtVnd2>,
128 pub evt_vnd3: Option<EvtVnd3>,
132 pub evt_vnd4: Option<EvtVnd4>,
136}
137#[allow(missing_docs)]
138impl InverterSinglePhaseFloat {
139 pub const A: crate::Point<Self, f32> = crate::Point::new(0, 2, false);
140 pub const APH_A: crate::Point<Self, f32> = crate::Point::new(2, 2, false);
141 pub const APH_B: crate::Point<Self, Option<f32>> = crate::Point::new(4, 2, false);
142 pub const APH_C: crate::Point<Self, Option<f32>> = crate::Point::new(6, 2, false);
143 pub const PP_VPH_AB: crate::Point<Self, Option<f32>> = crate::Point::new(8, 2, false);
144 pub const PP_VPH_BC: crate::Point<Self, Option<f32>> = crate::Point::new(10, 2, false);
145 pub const PP_VPH_CA: crate::Point<Self, Option<f32>> = crate::Point::new(12, 2, false);
146 pub const PH_VPH_A: crate::Point<Self, f32> = crate::Point::new(14, 2, false);
147 pub const PH_VPH_B: crate::Point<Self, Option<f32>> = crate::Point::new(16, 2, false);
148 pub const PH_VPH_C: crate::Point<Self, Option<f32>> = crate::Point::new(18, 2, false);
149 pub const W: crate::Point<Self, f32> = crate::Point::new(20, 2, false);
150 pub const HZ: crate::Point<Self, f32> = crate::Point::new(22, 2, false);
151 pub const VA: crate::Point<Self, Option<f32>> = crate::Point::new(24, 2, false);
152 pub const V_AR: crate::Point<Self, Option<f32>> = crate::Point::new(26, 2, false);
153 pub const PF: crate::Point<Self, Option<f32>> = crate::Point::new(28, 2, false);
154 pub const WH: crate::Point<Self, f32> = crate::Point::new(30, 2, false);
155 pub const DCA: crate::Point<Self, Option<f32>> = crate::Point::new(32, 2, false);
156 pub const DCV: crate::Point<Self, Option<f32>> = crate::Point::new(34, 2, false);
157 pub const DCW: crate::Point<Self, Option<f32>> = crate::Point::new(36, 2, false);
158 pub const TMP_CAB: crate::Point<Self, f32> = crate::Point::new(38, 2, false);
159 pub const TMP_SNK: crate::Point<Self, Option<f32>> = crate::Point::new(40, 2, false);
160 pub const TMP_TRNS: crate::Point<Self, Option<f32>> = crate::Point::new(42, 2, false);
161 pub const TMP_OT: crate::Point<Self, Option<f32>> = crate::Point::new(44, 2, false);
162 pub const ST: crate::Point<Self, St> = crate::Point::new(46, 1, false);
163 pub const ST_VND: crate::Point<Self, Option<u16>> = crate::Point::new(47, 1, false);
164 pub const EVT1: crate::Point<Self, Evt1> = crate::Point::new(48, 2, false);
165 pub const EVT2: crate::Point<Self, Evt2> = crate::Point::new(50, 2, false);
166 pub const EVT_VND1: crate::Point<Self, Option<EvtVnd1>> = crate::Point::new(52, 2, false);
167 pub const EVT_VND2: crate::Point<Self, Option<EvtVnd2>> = crate::Point::new(54, 2, false);
168 pub const EVT_VND3: crate::Point<Self, Option<EvtVnd3>> = crate::Point::new(56, 2, false);
169 pub const EVT_VND4: crate::Point<Self, Option<EvtVnd4>> = crate::Point::new(58, 2, false);
170}
171impl crate::Group for InverterSinglePhaseFloat {
172 const LEN: u16 = 60;
173}
174impl InverterSinglePhaseFloat {
175 fn parse_group(data: &[u16]) -> Result<(&[u16], Self), crate::DecodeError> {
176 let nested_data = data
177 .get(usize::from(<Self as crate::Group>::LEN)..)
178 .unwrap_or(&[]);
179 Ok((
180 nested_data,
181 Self {
182 a: Self::A.from_data(data)?,
183 aph_a: Self::APH_A.from_data(data)?,
184 aph_b: Self::APH_B.from_data(data)?,
185 aph_c: Self::APH_C.from_data(data)?,
186 pp_vph_ab: Self::PP_VPH_AB.from_data(data)?,
187 pp_vph_bc: Self::PP_VPH_BC.from_data(data)?,
188 pp_vph_ca: Self::PP_VPH_CA.from_data(data)?,
189 ph_vph_a: Self::PH_VPH_A.from_data(data)?,
190 ph_vph_b: Self::PH_VPH_B.from_data(data)?,
191 ph_vph_c: Self::PH_VPH_C.from_data(data)?,
192 w: Self::W.from_data(data)?,
193 hz: Self::HZ.from_data(data)?,
194 va: Self::VA.from_data(data)?,
195 v_ar: Self::V_AR.from_data(data)?,
196 pf: Self::PF.from_data(data)?,
197 wh: Self::WH.from_data(data)?,
198 dca: Self::DCA.from_data(data)?,
199 dcv: Self::DCV.from_data(data)?,
200 dcw: Self::DCW.from_data(data)?,
201 tmp_cab: Self::TMP_CAB.from_data(data)?,
202 tmp_snk: Self::TMP_SNK.from_data(data)?,
203 tmp_trns: Self::TMP_TRNS.from_data(data)?,
204 tmp_ot: Self::TMP_OT.from_data(data)?,
205 st: Self::ST.from_data(data)?,
206 st_vnd: Self::ST_VND.from_data(data)?,
207 evt1: Self::EVT1.from_data(data)?,
208 evt2: Self::EVT2.from_data(data)?,
209 evt_vnd1: Self::EVT_VND1.from_data(data)?,
210 evt_vnd2: Self::EVT_VND2.from_data(data)?,
211 evt_vnd3: Self::EVT_VND3.from_data(data)?,
212 evt_vnd4: Self::EVT_VND4.from_data(data)?,
213 },
214 ))
215 }
216}
217#[derive(Copy, Clone, Debug, Eq, PartialEq)]
221#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
222pub enum St {
223 #[allow(missing_docs)]
224 GgOff,
225 #[allow(missing_docs)]
226 GgSleeping,
227 #[allow(missing_docs)]
228 GgStarting,
229 #[allow(missing_docs)]
230 GgMppt,
231 #[allow(missing_docs)]
232 GgThrottled,
233 #[allow(missing_docs)]
234 GgShuttingDown,
235 #[allow(missing_docs)]
236 GgFault,
237 #[allow(missing_docs)]
238 GgStandby,
239 Invalid(u16),
241}
242impl crate::EnumValue for St {
243 type Repr = u16;
244 const INVALID: Self::Repr = 65535;
245 fn from_repr(value: Self::Repr) -> Self {
246 match value {
247 1 => Self::GgOff,
248 2 => Self::GgSleeping,
249 3 => Self::GgStarting,
250 4 => Self::GgMppt,
251 5 => Self::GgThrottled,
252 6 => Self::GgShuttingDown,
253 7 => Self::GgFault,
254 8 => Self::GgStandby,
255 value => Self::Invalid(value),
256 }
257 }
258 fn to_repr(self) -> Self::Repr {
259 match self {
260 Self::GgOff => 1,
261 Self::GgSleeping => 2,
262 Self::GgStarting => 3,
263 Self::GgMppt => 4,
264 Self::GgThrottled => 5,
265 Self::GgShuttingDown => 6,
266 Self::GgFault => 7,
267 Self::GgStandby => 8,
268 Self::Invalid(value) => value,
269 }
270 }
271}
272impl crate::FixedSize for St {
273 const SIZE: u16 = 1u16;
274 const INVALID: Self = Self::Invalid(65535);
275 fn is_invalid(&self) -> bool {
276 matches!(self, Self::Invalid(_))
277 }
278}
279bitflags::bitflags! {
280 #[doc = " Event1"] #[doc = " "] #[doc = " Bitmask value. Event fields"]
281 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
282 derive(::serde::Serialize, ::serde::Deserialize))] pub struct Evt1 : u32 {
283 #[allow(missing_docs)] const GroundFault = 1; #[allow(missing_docs)] const DcOverVolt
284 = 2; #[allow(missing_docs)] const AcDisconnect = 4; #[allow(missing_docs)] const
285 DcDisconnect = 8; #[allow(missing_docs)] const GridDisconnect = 16;
286 #[allow(missing_docs)] const CabinetOpen = 32; #[allow(missing_docs)] const
287 ManualShutdown = 64; #[allow(missing_docs)] const OverTemp = 128;
288 #[allow(missing_docs)] const OverFrequency = 256; #[allow(missing_docs)] const
289 UnderFrequency = 512; #[allow(missing_docs)] const AcOverVolt = 1024;
290 #[allow(missing_docs)] const AcUnderVolt = 2048; #[allow(missing_docs)] const
291 BlownStringFuse = 4096; #[allow(missing_docs)] const UnderTemp = 8192;
292 #[allow(missing_docs)] const MemoryLoss = 16384; #[allow(missing_docs)] const
293 HwTestFailure = 32768; }
294}
295impl crate::Value for Evt1 {
296 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
297 let value = u32::decode(data)?;
298 Ok(Self::from_bits_retain(value))
299 }
300 fn encode(self) -> Box<[u16]> {
301 self.bits().encode()
302 }
303}
304impl crate::FixedSize for Evt1 {
305 const SIZE: u16 = 2u16;
306 const INVALID: Self = Self::from_bits_retain(4294967295u32);
307 fn is_invalid(&self) -> bool {
308 self.bits() == 4294967295u32
309 }
310}
311bitflags::bitflags! {
312 #[doc = " Event Bitfield 2"] #[doc = " "] #[doc = " Reserved for future use"]
313 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
314 derive(::serde::Serialize, ::serde::Deserialize))] pub struct Evt2 : u32 {}
315}
316impl crate::Value for Evt2 {
317 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
318 let value = u32::decode(data)?;
319 Ok(Self::from_bits_retain(value))
320 }
321 fn encode(self) -> Box<[u16]> {
322 self.bits().encode()
323 }
324}
325impl crate::FixedSize for Evt2 {
326 const SIZE: u16 = 2u16;
327 const INVALID: Self = Self::from_bits_retain(4294967295u32);
328 fn is_invalid(&self) -> bool {
329 self.bits() == 4294967295u32
330 }
331}
332bitflags::bitflags! {
333 #[doc = " Vendor Event Bitfield 1"] #[doc = " "] #[doc = " Vendor defined events"]
334 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
335 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd1 : u32 {}
336}
337impl crate::Value for EvtVnd1 {
338 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
339 let value = u32::decode(data)?;
340 Ok(Self::from_bits_retain(value))
341 }
342 fn encode(self) -> Box<[u16]> {
343 self.bits().encode()
344 }
345}
346impl crate::FixedSize for EvtVnd1 {
347 const SIZE: u16 = 2u16;
348 const INVALID: Self = Self::from_bits_retain(4294967295u32);
349 fn is_invalid(&self) -> bool {
350 self.bits() == 4294967295u32
351 }
352}
353bitflags::bitflags! {
354 #[doc = " Vendor Event Bitfield 2"] #[doc = " "] #[doc = " Vendor defined events"]
355 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
356 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd2 : u32 {}
357}
358impl crate::Value for EvtVnd2 {
359 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
360 let value = u32::decode(data)?;
361 Ok(Self::from_bits_retain(value))
362 }
363 fn encode(self) -> Box<[u16]> {
364 self.bits().encode()
365 }
366}
367impl crate::FixedSize for EvtVnd2 {
368 const SIZE: u16 = 2u16;
369 const INVALID: Self = Self::from_bits_retain(4294967295u32);
370 fn is_invalid(&self) -> bool {
371 self.bits() == 4294967295u32
372 }
373}
374bitflags::bitflags! {
375 #[doc = " Vendor Event Bitfield 3"] #[doc = " "] #[doc = " Vendor defined events"]
376 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
377 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd3 : u32 {}
378}
379impl crate::Value for EvtVnd3 {
380 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
381 let value = u32::decode(data)?;
382 Ok(Self::from_bits_retain(value))
383 }
384 fn encode(self) -> Box<[u16]> {
385 self.bits().encode()
386 }
387}
388impl crate::FixedSize for EvtVnd3 {
389 const SIZE: u16 = 2u16;
390 const INVALID: Self = Self::from_bits_retain(4294967295u32);
391 fn is_invalid(&self) -> bool {
392 self.bits() == 4294967295u32
393 }
394}
395bitflags::bitflags! {
396 #[doc = " Vendor Event Bitfield 4"] #[doc = " "] #[doc = " Vendor defined events"]
397 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
398 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd4 : u32 {}
399}
400impl crate::Value for EvtVnd4 {
401 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
402 let value = u32::decode(data)?;
403 Ok(Self::from_bits_retain(value))
404 }
405 fn encode(self) -> Box<[u16]> {
406 self.bits().encode()
407 }
408}
409impl crate::FixedSize for EvtVnd4 {
410 const SIZE: u16 = 2u16;
411 const INVALID: Self = Self::from_bits_retain(4294967295u32);
412 fn is_invalid(&self) -> bool {
413 self.bits() == 4294967295u32
414 }
415}
416impl crate::Model for InverterSinglePhaseFloat {
417 const ID: u16 = 111;
418 fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
419 models.m111
420 }
421 fn parse(data: &[u16]) -> Result<Self, crate::ParseError<Self>> {
422 let (_, model) = Self::parse_group(data)?;
423 Ok(model)
424 }
425}