#[derive(Debug)]
pub struct Model802 {
pub ahrtg: u16,
pub whrtg: u16,
pub wchartemax: u16,
pub wdischartemax: u16,
pub discharte: Option<u16>,
pub socmax: Option<u16>,
pub socmin: Option<u16>,
pub socrsvmax: Option<u16>,
pub socrsvmin: Option<u16>,
pub soc: u16,
pub dod: Option<u16>,
pub soh: Option<u16>,
pub ncyc: Option<u32>,
pub chast: Option<u16>,
pub locremctl: u16,
pub hb: Option<u16>,
pub ctrlhb: Option<u16>,
pub almrst: u16,
pub typ: u16,
pub state: u16,
pub statevnd: Option<u16>,
pub warrdt: Option<u32>,
pub evt1: u32,
pub evt2: u32,
pub evtvnd1: u32,
pub evtvnd2: u32,
pub v: u16,
pub vmax: Option<u16>,
pub vmin: Option<u16>,
pub cellvmax: Option<u16>,
pub cellvmaxstr: Option<u16>,
pub cellvmaxmod: Option<u16>,
pub cellvmin: Option<u16>,
pub cellvminstr: Option<u16>,
pub cellvminmod: Option<u16>,
pub cellvavg: Option<u16>,
pub a: i16,
pub achamax: Option<u16>,
pub adischamax: Option<u16>,
pub w: i16,
pub reqinvstate: Option<u16>,
pub reqw: Option<i16>,
pub setop: u16,
pub setinvstate: u16,
pub ahrtg_sf: i16,
pub whrtg_sf: i16,
pub wchadischamax_sf: i16,
pub discharte_sf: Option<i16>,
pub soc_sf: i16,
pub dod_sf: Option<i16>,
pub soh_sf: Option<i16>,
pub v_sf: i16,
pub cellv_sf: i16,
pub a_sf: i16,
pub amax_sf: i16,
pub w_sf: Option<i16>,
}
#[allow(missing_docs)]
impl Model802 {
pub const AHRTG: crate::PointDef<Self, u16> = crate::PointDef::new(0, 1, false);
pub const WHRTG: crate::PointDef<Self, u16> = crate::PointDef::new(1, 1, false);
pub const WCHARTEMAX: crate::PointDef<Self, u16> = crate::PointDef::new(2, 1, false);
pub const WDISCHARTEMAX: crate::PointDef<Self, u16> = crate::PointDef::new(3, 1, false);
pub const DISCHARTE: crate::PointDef<Self, u16> = crate::PointDef::new(4, 1, false);
pub const SOCMAX: crate::PointDef<Self, u16> = crate::PointDef::new(5, 1, false);
pub const SOCMIN: crate::PointDef<Self, u16> = crate::PointDef::new(6, 1, false);
pub const SOCRSVMAX: crate::PointDef<Self, u16> = crate::PointDef::new(7, 1, true);
pub const SOCRSVMIN: crate::PointDef<Self, u16> = crate::PointDef::new(8, 1, true);
pub const SOC: crate::PointDef<Self, u16> = crate::PointDef::new(9, 1, false);
pub const DOD: crate::PointDef<Self, u16> = crate::PointDef::new(10, 1, false);
pub const SOH: crate::PointDef<Self, u16> = crate::PointDef::new(11, 1, false);
pub const NCYC: crate::PointDef<Self, u32> = crate::PointDef::new(12, 2, false);
pub const CHAST: crate::PointDef<Self, u16> = crate::PointDef::new(14, 1, false);
pub const LOCREMCTL: crate::PointDef<Self, u16> = crate::PointDef::new(15, 1, false);
pub const HB: crate::PointDef<Self, u16> = crate::PointDef::new(16, 1, false);
pub const CTRLHB: crate::PointDef<Self, u16> = crate::PointDef::new(17, 1, true);
pub const ALMRST: crate::PointDef<Self, u16> = crate::PointDef::new(18, 1, true);
pub const TYP: crate::PointDef<Self, u16> = crate::PointDef::new(19, 1, false);
pub const STATE: crate::PointDef<Self, u16> = crate::PointDef::new(20, 1, false);
pub const STATEVND: crate::PointDef<Self, u16> = crate::PointDef::new(21, 1, false);
pub const WARRDT: crate::PointDef<Self, u32> = crate::PointDef::new(22, 2, false);
pub const EVT1: crate::PointDef<Self, u32> = crate::PointDef::new(24, 2, false);
pub const EVT2: crate::PointDef<Self, u32> = crate::PointDef::new(26, 2, false);
pub const EVTVND1: crate::PointDef<Self, u32> = crate::PointDef::new(28, 2, false);
pub const EVTVND2: crate::PointDef<Self, u32> = crate::PointDef::new(30, 2, false);
pub const V: crate::PointDef<Self, u16> = crate::PointDef::new(32, 1, false);
pub const VMAX: crate::PointDef<Self, u16> = crate::PointDef::new(33, 1, false);
pub const VMIN: crate::PointDef<Self, u16> = crate::PointDef::new(34, 1, false);
pub const CELLVMAX: crate::PointDef<Self, u16> = crate::PointDef::new(35, 1, false);
pub const CELLVMAXSTR: crate::PointDef<Self, u16> = crate::PointDef::new(36, 1, false);
pub const CELLVMAXMOD: crate::PointDef<Self, u16> = crate::PointDef::new(37, 1, false);
pub const CELLVMIN: crate::PointDef<Self, u16> = crate::PointDef::new(38, 1, false);
pub const CELLVMINSTR: crate::PointDef<Self, u16> = crate::PointDef::new(39, 1, false);
pub const CELLVMINMOD: crate::PointDef<Self, u16> = crate::PointDef::new(40, 1, false);
pub const CELLVAVG: crate::PointDef<Self, u16> = crate::PointDef::new(41, 1, false);
pub const A: crate::PointDef<Self, i16> = crate::PointDef::new(42, 1, false);
pub const ACHAMAX: crate::PointDef<Self, u16> = crate::PointDef::new(43, 1, false);
pub const ADISCHAMAX: crate::PointDef<Self, u16> = crate::PointDef::new(44, 1, false);
pub const W: crate::PointDef<Self, i16> = crate::PointDef::new(45, 1, false);
pub const REQINVSTATE: crate::PointDef<Self, u16> = crate::PointDef::new(46, 1, false);
pub const REQW: crate::PointDef<Self, i16> = crate::PointDef::new(47, 1, false);
pub const SETOP: crate::PointDef<Self, u16> = crate::PointDef::new(48, 1, true);
pub const SETINVSTATE: crate::PointDef<Self, u16> = crate::PointDef::new(49, 1, true);
pub const AHRTG_SF: crate::PointDef<Self, i16> = crate::PointDef::new(50, 1, false);
pub const WHRTG_SF: crate::PointDef<Self, i16> = crate::PointDef::new(51, 1, false);
pub const WCHADISCHAMAX_SF: crate::PointDef<Self, i16> = crate::PointDef::new(52, 1, false);
pub const DISCHARTE_SF: crate::PointDef<Self, i16> = crate::PointDef::new(53, 1, false);
pub const SOC_SF: crate::PointDef<Self, i16> = crate::PointDef::new(54, 1, false);
pub const DOD_SF: crate::PointDef<Self, i16> = crate::PointDef::new(55, 1, false);
pub const SOH_SF: crate::PointDef<Self, i16> = crate::PointDef::new(56, 1, false);
pub const V_SF: crate::PointDef<Self, i16> = crate::PointDef::new(57, 1, false);
pub const CELLV_SF: crate::PointDef<Self, i16> = crate::PointDef::new(58, 1, false);
pub const A_SF: crate::PointDef<Self, i16> = crate::PointDef::new(59, 1, false);
pub const AMAX_SF: crate::PointDef<Self, i16> = crate::PointDef::new(60, 1, false);
pub const W_SF: crate::PointDef<Self, i16> = crate::PointDef::new(61, 1, false);
}
impl crate::Model for Model802 {
const ID: u16 = 802;
const LENGTH: u16 = 62;
fn from_data(data: &[u16]) -> Result<Self, crate::ReadModelError> {
Ok(Self {
ahrtg: Self::AHRTG
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
whrtg: Self::WHRTG
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
wchartemax: Self::WCHARTEMAX
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
wdischartemax: Self::WDISCHARTEMAX
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
discharte: Self::DISCHARTE.from_data(data)?,
socmax: Self::SOCMAX.from_data(data)?,
socmin: Self::SOCMIN.from_data(data)?,
socrsvmax: Self::SOCRSVMAX.from_data(data)?,
socrsvmin: Self::SOCRSVMIN.from_data(data)?,
soc: Self::SOC
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
dod: Self::DOD.from_data(data)?,
soh: Self::SOH.from_data(data)?,
ncyc: Self::NCYC.from_data(data)?,
chast: Self::CHAST.from_data(data)?,
locremctl: Self::LOCREMCTL
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
hb: Self::HB.from_data(data)?,
ctrlhb: Self::CTRLHB.from_data(data)?,
almrst: Self::ALMRST
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
typ: Self::TYP
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
state: Self::STATE
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
statevnd: Self::STATEVND.from_data(data)?,
warrdt: Self::WARRDT.from_data(data)?,
evt1: Self::EVT1
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
evt2: Self::EVT2
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
evtvnd1: Self::EVTVND1
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
evtvnd2: Self::EVTVND2
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
v: Self::V
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
vmax: Self::VMAX.from_data(data)?,
vmin: Self::VMIN.from_data(data)?,
cellvmax: Self::CELLVMAX.from_data(data)?,
cellvmaxstr: Self::CELLVMAXSTR.from_data(data)?,
cellvmaxmod: Self::CELLVMAXMOD.from_data(data)?,
cellvmin: Self::CELLVMIN.from_data(data)?,
cellvminstr: Self::CELLVMINSTR.from_data(data)?,
cellvminmod: Self::CELLVMINMOD.from_data(data)?,
cellvavg: Self::CELLVAVG.from_data(data)?,
a: Self::A
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
achamax: Self::ACHAMAX.from_data(data)?,
adischamax: Self::ADISCHAMAX.from_data(data)?,
w: Self::W
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
reqinvstate: Self::REQINVSTATE.from_data(data)?,
reqw: Self::REQW.from_data(data)?,
setop: Self::SETOP
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
setinvstate: Self::SETINVSTATE
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
ahrtg_sf: Self::AHRTG_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
whrtg_sf: Self::WHRTG_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
wchadischamax_sf: Self::WCHADISCHAMAX_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
discharte_sf: Self::DISCHARTE_SF.from_data(data)?,
soc_sf: Self::SOC_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
dod_sf: Self::DOD_SF.from_data(data)?,
soh_sf: Self::SOH_SF.from_data(data)?,
v_sf: Self::V_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
cellv_sf: Self::CELLV_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
a_sf: Self::A_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
amax_sf: Self::AMAX_SF
.from_data(data)?
.ok_or(crate::ReadPointError::MissingMandatoryValue)?,
w_sf: Self::W_SF.from_data(data)?,
})
}
}