1pub type Model101 = InverterSinglePhase;
4#[derive(Debug)]
8#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
9pub struct InverterSinglePhase {
10 pub a: u16,
14 pub aph_a: u16,
20 pub aph_b: Option<u16>,
24 pub aph_c: Option<u16>,
28 #[allow(missing_docs)]
29 pub a_sf: i16,
30 pub pp_vph_ab: Option<u16>,
34 pub pp_vph_bc: Option<u16>,
38 pub pp_vph_ca: Option<u16>,
42 pub ph_vph_a: u16,
46 pub ph_vph_b: Option<u16>,
50 pub ph_vph_c: Option<u16>,
54 #[allow(missing_docs)]
55 pub v_sf: i16,
56 pub w: i16,
60 #[allow(missing_docs)]
61 pub w_sf: i16,
62 pub hz: u16,
66 #[allow(missing_docs)]
67 pub hz_sf: i16,
68 pub va: Option<i16>,
72 #[allow(missing_docs)]
73 pub va_sf: Option<i16>,
74 pub v_ar: Option<i16>,
78 #[allow(missing_docs)]
79 pub v_ar_sf: Option<i16>,
80 pub pf: Option<i16>,
84 #[allow(missing_docs)]
85 pub pf_sf: Option<i16>,
86 pub wh: u32,
90 #[allow(missing_docs)]
91 pub wh_sf: i16,
92 pub dca: Option<u16>,
96 #[allow(missing_docs)]
97 pub dca_sf: Option<i16>,
98 pub dcv: Option<u16>,
102 #[allow(missing_docs)]
103 pub dcv_sf: Option<i16>,
104 pub dcw: Option<i16>,
108 #[allow(missing_docs)]
109 pub dcw_sf: Option<i16>,
110 pub tmp_cab: i16,
114 pub tmp_snk: Option<i16>,
118 pub tmp_trns: Option<i16>,
122 pub tmp_ot: Option<i16>,
126 #[allow(missing_docs)]
127 pub tmp_sf: i16,
128 pub st: St,
132 pub st_vnd: Option<u16>,
136 pub evt1: Evt1,
140 pub evt2: Evt2,
144 pub evt_vnd1: Option<EvtVnd1>,
148 pub evt_vnd2: Option<EvtVnd2>,
152 pub evt_vnd3: Option<EvtVnd3>,
156 pub evt_vnd4: Option<EvtVnd4>,
160}
161#[allow(missing_docs)]
162impl InverterSinglePhase {
163 pub const A: crate::Point<Self, u16> = crate::Point::new(0, 1, false);
164 pub const APH_A: crate::Point<Self, u16> = crate::Point::new(1, 1, false);
165 pub const APH_B: crate::Point<Self, Option<u16>> = crate::Point::new(2, 1, false);
166 pub const APH_C: crate::Point<Self, Option<u16>> = crate::Point::new(3, 1, false);
167 pub const A_SF: crate::Point<Self, i16> = crate::Point::new(4, 1, false);
168 pub const PP_VPH_AB: crate::Point<Self, Option<u16>> = crate::Point::new(5, 1, false);
169 pub const PP_VPH_BC: crate::Point<Self, Option<u16>> = crate::Point::new(6, 1, false);
170 pub const PP_VPH_CA: crate::Point<Self, Option<u16>> = crate::Point::new(7, 1, false);
171 pub const PH_VPH_A: crate::Point<Self, u16> = crate::Point::new(8, 1, false);
172 pub const PH_VPH_B: crate::Point<Self, Option<u16>> = crate::Point::new(9, 1, false);
173 pub const PH_VPH_C: crate::Point<Self, Option<u16>> = crate::Point::new(10, 1, false);
174 pub const V_SF: crate::Point<Self, i16> = crate::Point::new(11, 1, false);
175 pub const W: crate::Point<Self, i16> = crate::Point::new(12, 1, false);
176 pub const W_SF: crate::Point<Self, i16> = crate::Point::new(13, 1, false);
177 pub const HZ: crate::Point<Self, u16> = crate::Point::new(14, 1, false);
178 pub const HZ_SF: crate::Point<Self, i16> = crate::Point::new(15, 1, false);
179 pub const VA: crate::Point<Self, Option<i16>> = crate::Point::new(16, 1, false);
180 pub const VA_SF: crate::Point<Self, Option<i16>> = crate::Point::new(17, 1, false);
181 pub const V_AR: crate::Point<Self, Option<i16>> = crate::Point::new(18, 1, false);
182 pub const V_AR_SF: crate::Point<Self, Option<i16>> = crate::Point::new(19, 1, false);
183 pub const PF: crate::Point<Self, Option<i16>> = crate::Point::new(20, 1, false);
184 pub const PF_SF: crate::Point<Self, Option<i16>> = crate::Point::new(21, 1, false);
185 pub const WH: crate::Point<Self, u32> = crate::Point::new(22, 2, false);
186 pub const WH_SF: crate::Point<Self, i16> = crate::Point::new(24, 1, false);
187 pub const DCA: crate::Point<Self, Option<u16>> = crate::Point::new(25, 1, false);
188 pub const DCA_SF: crate::Point<Self, Option<i16>> = crate::Point::new(26, 1, false);
189 pub const DCV: crate::Point<Self, Option<u16>> = crate::Point::new(27, 1, false);
190 pub const DCV_SF: crate::Point<Self, Option<i16>> = crate::Point::new(28, 1, false);
191 pub const DCW: crate::Point<Self, Option<i16>> = crate::Point::new(29, 1, false);
192 pub const DCW_SF: crate::Point<Self, Option<i16>> = crate::Point::new(30, 1, false);
193 pub const TMP_CAB: crate::Point<Self, i16> = crate::Point::new(31, 1, false);
194 pub const TMP_SNK: crate::Point<Self, Option<i16>> = crate::Point::new(32, 1, false);
195 pub const TMP_TRNS: crate::Point<Self, Option<i16>> = crate::Point::new(33, 1, false);
196 pub const TMP_OT: crate::Point<Self, Option<i16>> = crate::Point::new(34, 1, false);
197 pub const TMP_SF: crate::Point<Self, i16> = crate::Point::new(35, 1, false);
198 pub const ST: crate::Point<Self, St> = crate::Point::new(36, 1, false);
199 pub const ST_VND: crate::Point<Self, Option<u16>> = crate::Point::new(37, 1, false);
200 pub const EVT1: crate::Point<Self, Evt1> = crate::Point::new(38, 2, false);
201 pub const EVT2: crate::Point<Self, Evt2> = crate::Point::new(40, 2, false);
202 pub const EVT_VND1: crate::Point<Self, Option<EvtVnd1>> = crate::Point::new(42, 2, false);
203 pub const EVT_VND2: crate::Point<Self, Option<EvtVnd2>> = crate::Point::new(44, 2, false);
204 pub const EVT_VND3: crate::Point<Self, Option<EvtVnd3>> = crate::Point::new(46, 2, false);
205 pub const EVT_VND4: crate::Point<Self, Option<EvtVnd4>> = crate::Point::new(48, 2, false);
206}
207impl crate::Group for InverterSinglePhase {
208 const LEN: u16 = 50;
209}
210impl InverterSinglePhase {
211 fn parse_group(data: &[u16]) -> Result<(&[u16], Self), crate::DecodeError> {
212 let nested_data = data
213 .get(usize::from(<Self as crate::Group>::LEN)..)
214 .unwrap_or(&[]);
215 Ok((
216 nested_data,
217 Self {
218 a: Self::A.from_data(data)?,
219 aph_a: Self::APH_A.from_data(data)?,
220 aph_b: Self::APH_B.from_data(data)?,
221 aph_c: Self::APH_C.from_data(data)?,
222 a_sf: Self::A_SF.from_data(data)?,
223 pp_vph_ab: Self::PP_VPH_AB.from_data(data)?,
224 pp_vph_bc: Self::PP_VPH_BC.from_data(data)?,
225 pp_vph_ca: Self::PP_VPH_CA.from_data(data)?,
226 ph_vph_a: Self::PH_VPH_A.from_data(data)?,
227 ph_vph_b: Self::PH_VPH_B.from_data(data)?,
228 ph_vph_c: Self::PH_VPH_C.from_data(data)?,
229 v_sf: Self::V_SF.from_data(data)?,
230 w: Self::W.from_data(data)?,
231 w_sf: Self::W_SF.from_data(data)?,
232 hz: Self::HZ.from_data(data)?,
233 hz_sf: Self::HZ_SF.from_data(data)?,
234 va: Self::VA.from_data(data)?,
235 va_sf: Self::VA_SF.from_data(data)?,
236 v_ar: Self::V_AR.from_data(data)?,
237 v_ar_sf: Self::V_AR_SF.from_data(data)?,
238 pf: Self::PF.from_data(data)?,
239 pf_sf: Self::PF_SF.from_data(data)?,
240 wh: Self::WH.from_data(data)?,
241 wh_sf: Self::WH_SF.from_data(data)?,
242 dca: Self::DCA.from_data(data)?,
243 dca_sf: Self::DCA_SF.from_data(data)?,
244 dcv: Self::DCV.from_data(data)?,
245 dcv_sf: Self::DCV_SF.from_data(data)?,
246 dcw: Self::DCW.from_data(data)?,
247 dcw_sf: Self::DCW_SF.from_data(data)?,
248 tmp_cab: Self::TMP_CAB.from_data(data)?,
249 tmp_snk: Self::TMP_SNK.from_data(data)?,
250 tmp_trns: Self::TMP_TRNS.from_data(data)?,
251 tmp_ot: Self::TMP_OT.from_data(data)?,
252 tmp_sf: Self::TMP_SF.from_data(data)?,
253 st: Self::ST.from_data(data)?,
254 st_vnd: Self::ST_VND.from_data(data)?,
255 evt1: Self::EVT1.from_data(data)?,
256 evt2: Self::EVT2.from_data(data)?,
257 evt_vnd1: Self::EVT_VND1.from_data(data)?,
258 evt_vnd2: Self::EVT_VND2.from_data(data)?,
259 evt_vnd3: Self::EVT_VND3.from_data(data)?,
260 evt_vnd4: Self::EVT_VND4.from_data(data)?,
261 },
262 ))
263 }
264}
265#[derive(Copy, Clone, Debug, Eq, PartialEq)]
269#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
270pub enum St {
271 #[allow(missing_docs)]
272 Off,
273 #[allow(missing_docs)]
274 Sleeping,
275 #[allow(missing_docs)]
276 Starting,
277 #[allow(missing_docs)]
278 Mppt,
279 #[allow(missing_docs)]
280 Throttled,
281 #[allow(missing_docs)]
282 ShuttingDown,
283 #[allow(missing_docs)]
284 Fault,
285 #[allow(missing_docs)]
286 Standby,
287 Invalid(u16),
289}
290impl crate::EnumValue for St {
291 type Repr = u16;
292 const INVALID: Self::Repr = 65535;
293 fn from_repr(value: Self::Repr) -> Self {
294 match value {
295 1 => Self::Off,
296 2 => Self::Sleeping,
297 3 => Self::Starting,
298 4 => Self::Mppt,
299 5 => Self::Throttled,
300 6 => Self::ShuttingDown,
301 7 => Self::Fault,
302 8 => Self::Standby,
303 value => Self::Invalid(value),
304 }
305 }
306 fn to_repr(self) -> Self::Repr {
307 match self {
308 Self::Off => 1,
309 Self::Sleeping => 2,
310 Self::Starting => 3,
311 Self::Mppt => 4,
312 Self::Throttled => 5,
313 Self::ShuttingDown => 6,
314 Self::Fault => 7,
315 Self::Standby => 8,
316 Self::Invalid(value) => value,
317 }
318 }
319}
320impl crate::FixedSize for St {
321 const SIZE: u16 = 1u16;
322 const INVALID: Self = Self::Invalid(65535);
323 fn is_invalid(&self) -> bool {
324 matches!(self, Self::Invalid(_))
325 }
326}
327bitflags::bitflags! {
328 #[doc = " Event1"] #[doc = " "] #[doc = " Bitmask value. Event fields"]
329 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
330 derive(::serde::Serialize, ::serde::Deserialize))] pub struct Evt1 : u32 {
331 #[allow(missing_docs)] const GroundFault = 1; #[allow(missing_docs)] const DcOverVolt
332 = 2; #[allow(missing_docs)] const AcDisconnect = 4; #[allow(missing_docs)] const
333 DcDisconnect = 8; #[allow(missing_docs)] const GridDisconnect = 16;
334 #[allow(missing_docs)] const CabinetOpen = 32; #[allow(missing_docs)] const
335 ManualShutdown = 64; #[allow(missing_docs)] const OverTemp = 128;
336 #[allow(missing_docs)] const OverFrequency = 256; #[allow(missing_docs)] const
337 UnderFrequency = 512; #[allow(missing_docs)] const AcOverVolt = 1024;
338 #[allow(missing_docs)] const AcUnderVolt = 2048; #[allow(missing_docs)] const
339 BlownStringFuse = 4096; #[allow(missing_docs)] const UnderTemp = 8192;
340 #[allow(missing_docs)] const MemoryLoss = 16384; #[allow(missing_docs)] const
341 HwTestFailure = 32768; }
342}
343impl crate::Value for Evt1 {
344 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
345 let value = u32::decode(data)?;
346 Ok(Self::from_bits_retain(value))
347 }
348 fn encode(self) -> Box<[u16]> {
349 self.bits().encode()
350 }
351}
352impl crate::FixedSize for Evt1 {
353 const SIZE: u16 = 2u16;
354 const INVALID: Self = Self::from_bits_retain(4294967295u32);
355 fn is_invalid(&self) -> bool {
356 self.bits() == 4294967295u32
357 }
358}
359bitflags::bitflags! {
360 #[doc = " Event Bitfield 2"] #[doc = " "] #[doc = " Reserved for future use"]
361 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
362 derive(::serde::Serialize, ::serde::Deserialize))] pub struct Evt2 : u32 {}
363}
364impl crate::Value for Evt2 {
365 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
366 let value = u32::decode(data)?;
367 Ok(Self::from_bits_retain(value))
368 }
369 fn encode(self) -> Box<[u16]> {
370 self.bits().encode()
371 }
372}
373impl crate::FixedSize for Evt2 {
374 const SIZE: u16 = 2u16;
375 const INVALID: Self = Self::from_bits_retain(4294967295u32);
376 fn is_invalid(&self) -> bool {
377 self.bits() == 4294967295u32
378 }
379}
380bitflags::bitflags! {
381 #[doc = " Vendor Event Bitfield 1"] #[doc = " "] #[doc = " Vendor defined events"]
382 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
383 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd1 : u32 {}
384}
385impl crate::Value for EvtVnd1 {
386 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
387 let value = u32::decode(data)?;
388 Ok(Self::from_bits_retain(value))
389 }
390 fn encode(self) -> Box<[u16]> {
391 self.bits().encode()
392 }
393}
394impl crate::FixedSize for EvtVnd1 {
395 const SIZE: u16 = 2u16;
396 const INVALID: Self = Self::from_bits_retain(4294967295u32);
397 fn is_invalid(&self) -> bool {
398 self.bits() == 4294967295u32
399 }
400}
401bitflags::bitflags! {
402 #[doc = " Vendor Event Bitfield 2"] #[doc = " "] #[doc = " Vendor defined events"]
403 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
404 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd2 : u32 {}
405}
406impl crate::Value for EvtVnd2 {
407 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
408 let value = u32::decode(data)?;
409 Ok(Self::from_bits_retain(value))
410 }
411 fn encode(self) -> Box<[u16]> {
412 self.bits().encode()
413 }
414}
415impl crate::FixedSize for EvtVnd2 {
416 const SIZE: u16 = 2u16;
417 const INVALID: Self = Self::from_bits_retain(4294967295u32);
418 fn is_invalid(&self) -> bool {
419 self.bits() == 4294967295u32
420 }
421}
422bitflags::bitflags! {
423 #[doc = " Vendor Event Bitfield 3"] #[doc = " "] #[doc = " Vendor defined events"]
424 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
425 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd3 : u32 {}
426}
427impl crate::Value for EvtVnd3 {
428 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
429 let value = u32::decode(data)?;
430 Ok(Self::from_bits_retain(value))
431 }
432 fn encode(self) -> Box<[u16]> {
433 self.bits().encode()
434 }
435}
436impl crate::FixedSize for EvtVnd3 {
437 const SIZE: u16 = 2u16;
438 const INVALID: Self = Self::from_bits_retain(4294967295u32);
439 fn is_invalid(&self) -> bool {
440 self.bits() == 4294967295u32
441 }
442}
443bitflags::bitflags! {
444 #[doc = " Vendor Event Bitfield 4"] #[doc = " "] #[doc = " Vendor defined events"]
445 #[derive(Copy, Clone, Debug, Eq, PartialEq)] #[cfg_attr(feature = "serde",
446 derive(::serde::Serialize, ::serde::Deserialize))] pub struct EvtVnd4 : u32 {}
447}
448impl crate::Value for EvtVnd4 {
449 fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
450 let value = u32::decode(data)?;
451 Ok(Self::from_bits_retain(value))
452 }
453 fn encode(self) -> Box<[u16]> {
454 self.bits().encode()
455 }
456}
457impl crate::FixedSize for EvtVnd4 {
458 const SIZE: u16 = 2u16;
459 const INVALID: Self = Self::from_bits_retain(4294967295u32);
460 fn is_invalid(&self) -> bool {
461 self.bits() == 4294967295u32
462 }
463}
464impl crate::Model for InverterSinglePhase {
465 const ID: u16 = 101;
466 fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
467 models.m101
468 }
469 fn parse(data: &[u16]) -> Result<Self, crate::ParseError<Self>> {
470 let (_, model) = Self::parse_group(data)?;
471 Ok(model)
472 }
473}