pub type Model702 = DerCapacity;
#[derive(Debug)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub struct DerCapacity {
pub w_max_rtg: Option<u16>,
pub w_ovr_ext_rtg: Option<u16>,
pub w_ovr_ext_rtg_pf: Option<u16>,
pub w_und_ext_rtg: Option<u16>,
pub w_und_ext_rtg_pf: Option<u16>,
pub va_max_rtg: Option<u16>,
pub var_max_inj_rtg: Option<u16>,
pub var_max_abs_rtg: Option<u16>,
pub w_cha_rte_max_rtg: Option<u16>,
pub w_dis_cha_rte_max_rtg: Option<u16>,
pub va_cha_rte_max_rtg: Option<u16>,
pub va_dis_cha_rte_max_rtg: Option<u16>,
pub v_nom_rtg: Option<u16>,
pub v_max_rtg: Option<u16>,
pub v_min_rtg: Option<u16>,
pub a_max_rtg: Option<u16>,
pub pf_ovr_ext_rtg: Option<u16>,
pub pf_und_ext_rtg: Option<u16>,
pub react_suscept_rtg: Option<u16>,
pub nor_op_cat_rtg: Option<NorOpCatRtg>,
pub abn_op_cat_rtg: Option<AbnOpCatRtg>,
pub ctrl_modes: Option<CtrlModes>,
pub int_island_cat_rtg: Option<IntIslandCatRtg>,
pub w_max: Option<u16>,
pub w_max_ovr_ext: Option<u16>,
pub w_ovr_ext_pf: Option<u16>,
pub w_max_und_ext: Option<u16>,
pub w_und_ext_pf: Option<u16>,
pub va_max: Option<u16>,
pub var_max_inj: Option<u16>,
pub var_max_abs: Option<u16>,
pub w_cha_rte_max: Option<u16>,
pub w_dis_cha_rte_max: Option<u16>,
pub va_cha_rte_max: Option<u16>,
pub va_dis_cha_rte_max: Option<u16>,
pub v_nom: Option<u16>,
pub v_max: Option<u16>,
pub v_min: Option<u16>,
pub a_max: Option<u16>,
pub pf_ovr_ext: Option<u16>,
pub pf_und_ext: Option<u16>,
pub int_island_cat: Option<IntIslandCat>,
pub w_sf: Option<i16>,
pub pf_sf: Option<i16>,
pub va_sf: Option<i16>,
pub var_sf: Option<i16>,
pub v_sf: Option<i16>,
pub a_sf: Option<i16>,
pub s_sf: Option<i16>,
}
#[allow(missing_docs)]
impl DerCapacity {
pub const W_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(0, 1, false);
pub const W_OVR_EXT_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(1, 1, false);
pub const W_OVR_EXT_RTG_PF: crate::Point<Self, Option<u16>> = crate::Point::new(2, 1, false);
pub const W_UND_EXT_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(3, 1, false);
pub const W_UND_EXT_RTG_PF: crate::Point<Self, Option<u16>> = crate::Point::new(4, 1, false);
pub const VA_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(5, 1, false);
pub const VAR_MAX_INJ_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(6, 1, false);
pub const VAR_MAX_ABS_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(7, 1, false);
pub const W_CHA_RTE_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(8, 1, false);
pub const W_DIS_CHA_RTE_MAX_RTG: crate::Point<Self, Option<u16>> =
crate::Point::new(9, 1, false);
pub const VA_CHA_RTE_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(10, 1, false);
pub const VA_DIS_CHA_RTE_MAX_RTG: crate::Point<Self, Option<u16>> =
crate::Point::new(11, 1, false);
pub const V_NOM_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(12, 1, false);
pub const V_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(13, 1, false);
pub const V_MIN_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(14, 1, false);
pub const A_MAX_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(15, 1, false);
pub const PF_OVR_EXT_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(16, 1, false);
pub const PF_UND_EXT_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(17, 1, false);
pub const REACT_SUSCEPT_RTG: crate::Point<Self, Option<u16>> = crate::Point::new(18, 1, false);
pub const NOR_OP_CAT_RTG: crate::Point<Self, Option<NorOpCatRtg>> =
crate::Point::new(19, 1, false);
pub const ABN_OP_CAT_RTG: crate::Point<Self, Option<AbnOpCatRtg>> =
crate::Point::new(20, 1, false);
pub const CTRL_MODES: crate::Point<Self, Option<CtrlModes>> = crate::Point::new(21, 2, false);
pub const INT_ISLAND_CAT_RTG: crate::Point<Self, Option<IntIslandCatRtg>> =
crate::Point::new(23, 1, false);
pub const W_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(24, 1, true);
pub const W_MAX_OVR_EXT: crate::Point<Self, Option<u16>> = crate::Point::new(25, 1, true);
pub const W_OVR_EXT_PF: crate::Point<Self, Option<u16>> = crate::Point::new(26, 1, true);
pub const W_MAX_UND_EXT: crate::Point<Self, Option<u16>> = crate::Point::new(27, 1, true);
pub const W_UND_EXT_PF: crate::Point<Self, Option<u16>> = crate::Point::new(28, 1, true);
pub const VA_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(29, 1, true);
pub const VAR_MAX_INJ: crate::Point<Self, Option<u16>> = crate::Point::new(30, 1, true);
pub const VAR_MAX_ABS: crate::Point<Self, Option<u16>> = crate::Point::new(31, 1, true);
pub const W_CHA_RTE_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(32, 1, true);
pub const W_DIS_CHA_RTE_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(33, 1, true);
pub const VA_CHA_RTE_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(34, 1, true);
pub const VA_DIS_CHA_RTE_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(35, 1, true);
pub const V_NOM: crate::Point<Self, Option<u16>> = crate::Point::new(36, 1, true);
pub const V_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(37, 1, true);
pub const V_MIN: crate::Point<Self, Option<u16>> = crate::Point::new(38, 1, true);
pub const A_MAX: crate::Point<Self, Option<u16>> = crate::Point::new(39, 1, true);
pub const PF_OVR_EXT: crate::Point<Self, Option<u16>> = crate::Point::new(40, 1, true);
pub const PF_UND_EXT: crate::Point<Self, Option<u16>> = crate::Point::new(41, 1, true);
pub const INT_ISLAND_CAT: crate::Point<Self, Option<IntIslandCat>> =
crate::Point::new(42, 1, true);
pub const W_SF: crate::Point<Self, Option<i16>> = crate::Point::new(43, 1, false);
pub const PF_SF: crate::Point<Self, Option<i16>> = crate::Point::new(44, 1, false);
pub const VA_SF: crate::Point<Self, Option<i16>> = crate::Point::new(45, 1, false);
pub const VAR_SF: crate::Point<Self, Option<i16>> = crate::Point::new(46, 1, false);
pub const V_SF: crate::Point<Self, Option<i16>> = crate::Point::new(47, 1, false);
pub const A_SF: crate::Point<Self, Option<i16>> = crate::Point::new(48, 1, false);
pub const S_SF: crate::Point<Self, Option<i16>> = crate::Point::new(49, 1, false);
}
impl crate::Group for DerCapacity {
const LEN: u16 = 50;
}
impl DerCapacity {
fn parse_group(data: &[u16]) -> Result<(&[u16], Self), crate::DecodeError> {
let nested_data = data
.get(usize::from(<Self as crate::Group>::LEN)..)
.unwrap_or(&[]);
Ok((
nested_data,
Self {
w_max_rtg: Self::W_MAX_RTG.from_data(data)?,
w_ovr_ext_rtg: Self::W_OVR_EXT_RTG.from_data(data)?,
w_ovr_ext_rtg_pf: Self::W_OVR_EXT_RTG_PF.from_data(data)?,
w_und_ext_rtg: Self::W_UND_EXT_RTG.from_data(data)?,
w_und_ext_rtg_pf: Self::W_UND_EXT_RTG_PF.from_data(data)?,
va_max_rtg: Self::VA_MAX_RTG.from_data(data)?,
var_max_inj_rtg: Self::VAR_MAX_INJ_RTG.from_data(data)?,
var_max_abs_rtg: Self::VAR_MAX_ABS_RTG.from_data(data)?,
w_cha_rte_max_rtg: Self::W_CHA_RTE_MAX_RTG.from_data(data)?,
w_dis_cha_rte_max_rtg: Self::W_DIS_CHA_RTE_MAX_RTG.from_data(data)?,
va_cha_rte_max_rtg: Self::VA_CHA_RTE_MAX_RTG.from_data(data)?,
va_dis_cha_rte_max_rtg: Self::VA_DIS_CHA_RTE_MAX_RTG.from_data(data)?,
v_nom_rtg: Self::V_NOM_RTG.from_data(data)?,
v_max_rtg: Self::V_MAX_RTG.from_data(data)?,
v_min_rtg: Self::V_MIN_RTG.from_data(data)?,
a_max_rtg: Self::A_MAX_RTG.from_data(data)?,
pf_ovr_ext_rtg: Self::PF_OVR_EXT_RTG.from_data(data)?,
pf_und_ext_rtg: Self::PF_UND_EXT_RTG.from_data(data)?,
react_suscept_rtg: Self::REACT_SUSCEPT_RTG.from_data(data)?,
nor_op_cat_rtg: Self::NOR_OP_CAT_RTG.from_data(data)?,
abn_op_cat_rtg: Self::ABN_OP_CAT_RTG.from_data(data)?,
ctrl_modes: Self::CTRL_MODES.from_data(data)?,
int_island_cat_rtg: Self::INT_ISLAND_CAT_RTG.from_data(data)?,
w_max: Self::W_MAX.from_data(data)?,
w_max_ovr_ext: Self::W_MAX_OVR_EXT.from_data(data)?,
w_ovr_ext_pf: Self::W_OVR_EXT_PF.from_data(data)?,
w_max_und_ext: Self::W_MAX_UND_EXT.from_data(data)?,
w_und_ext_pf: Self::W_UND_EXT_PF.from_data(data)?,
va_max: Self::VA_MAX.from_data(data)?,
var_max_inj: Self::VAR_MAX_INJ.from_data(data)?,
var_max_abs: Self::VAR_MAX_ABS.from_data(data)?,
w_cha_rte_max: Self::W_CHA_RTE_MAX.from_data(data)?,
w_dis_cha_rte_max: Self::W_DIS_CHA_RTE_MAX.from_data(data)?,
va_cha_rte_max: Self::VA_CHA_RTE_MAX.from_data(data)?,
va_dis_cha_rte_max: Self::VA_DIS_CHA_RTE_MAX.from_data(data)?,
v_nom: Self::V_NOM.from_data(data)?,
v_max: Self::V_MAX.from_data(data)?,
v_min: Self::V_MIN.from_data(data)?,
a_max: Self::A_MAX.from_data(data)?,
pf_ovr_ext: Self::PF_OVR_EXT.from_data(data)?,
pf_und_ext: Self::PF_UND_EXT.from_data(data)?,
int_island_cat: Self::INT_ISLAND_CAT.from_data(data)?,
w_sf: Self::W_SF.from_data(data)?,
pf_sf: Self::PF_SF.from_data(data)?,
va_sf: Self::VA_SF.from_data(data)?,
var_sf: Self::VAR_SF.from_data(data)?,
v_sf: Self::V_SF.from_data(data)?,
a_sf: Self::A_SF.from_data(data)?,
s_sf: Self::S_SF.from_data(data)?,
},
))
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub enum NorOpCatRtg {
CatA,
CatB,
Invalid(u16),
}
impl crate::EnumValue for NorOpCatRtg {
type Repr = u16;
const INVALID: Self::Repr = 65535;
fn from_repr(value: Self::Repr) -> Self {
match value {
0 => Self::CatA,
1 => Self::CatB,
value => Self::Invalid(value),
}
}
fn to_repr(self) -> Self::Repr {
match self {
Self::CatA => 0,
Self::CatB => 1,
Self::Invalid(value) => value,
}
}
}
impl crate::FixedSize for NorOpCatRtg {
const SIZE: u16 = 1u16;
const INVALID: Self = Self::Invalid(65535);
fn is_invalid(&self) -> bool {
matches!(self, Self::Invalid(_))
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
pub enum AbnOpCatRtg {
Cat1,
Cat2,
Cat3,
Invalid(u16),
}
impl crate::EnumValue for AbnOpCatRtg {
type Repr = u16;
const INVALID: Self::Repr = 65535;
fn from_repr(value: Self::Repr) -> Self {
match value {
0 => Self::Cat1,
1 => Self::Cat2,
2 => Self::Cat3,
value => Self::Invalid(value),
}
}
fn to_repr(self) -> Self::Repr {
match self {
Self::Cat1 => 0,
Self::Cat2 => 1,
Self::Cat3 => 2,
Self::Invalid(value) => value,
}
}
}
impl crate::FixedSize for AbnOpCatRtg {
const SIZE: u16 = 1u16;
const INVALID: Self = Self::Invalid(65535);
fn is_invalid(&self) -> bool {
matches!(self, Self::Invalid(_))
}
}
bitflags::bitflags! {
#[doc = " Supported Control Modes"] #[doc = " "] #[doc =
" Supported control mode functions."] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct CtrlModes : u32 { #[doc = " Limit Maximum Active Power"] const MaxW = 1; #[doc
= " Fixed Active Power"] const FixedW = 2; #[doc = " Fixed Reactive Power"] const
FixedVar = 4; #[doc = " Fixed Power Factor"] const FixedPf = 8; #[doc =
" Volt-Var Function"] const VoltVar = 16; #[doc = " Freq-Watt Function"] const
FreqWatt = 32; #[doc = " Dynamic Reactive Current Function"] const DynReactCurr = 64;
#[doc = " Low-Voltage Trip"] const LvTrip = 128; #[doc = " High-Voltage Trip"] const
HvTrip = 256; #[doc = " Watt-Var Function"] const WattVar = 512; #[doc =
" Volt-Watt Function"] const VoltWatt = 1024; #[doc = " Scheduling"] const Scheduled
= 2048; #[doc = " Low-Frequency Trip"] const LfTrip = 4096; #[doc =
" High-Frequency Trip"] const HfTrip = 8192; }
}
impl crate::Value for CtrlModes {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u32::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::FixedSize for CtrlModes {
const SIZE: u16 = 2u16;
const INVALID: Self = Self::from_bits_retain(4294967295u32);
fn is_invalid(&self) -> bool {
self.bits() == 4294967295u32
}
}
bitflags::bitflags! {
#[doc = " Intentional Island Categories"] #[doc = " "] #[doc =
" Intentional island categories."] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct IntIslandCatRtg : u16 { #[doc = " Uncategorized"] const Uncategorized = 1;
#[doc = " Intentional Island-Capable"] const IntIslCapable = 2; #[doc =
" Black Start-Capable"] const BlackStartCapable = 4; #[doc = " Isochronous-Capable"]
const IsochCapable = 8; }
}
impl crate::Value for IntIslandCatRtg {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::FixedSize for IntIslandCatRtg {
const SIZE: u16 = 1u16;
const INVALID: Self = Self::from_bits_retain(65535u16);
fn is_invalid(&self) -> bool {
self.bits() == 65535u16
}
}
bitflags::bitflags! {
#[doc = " Intentional Island Categories"] #[doc = " "] #[doc =
" Intentional island categories."] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))] pub
struct IntIslandCat : u16 { #[doc = " Uncategorized"] const Uncategorized = 1; #[doc
= " Intentional Island-Capable"] const IntIslCapable = 2; #[doc =
" Black Start-Capable"] const BlackStartCapable = 4; #[doc = " Isochronous-Capable"]
const IsochCapable = 8; }
}
impl crate::Value for IntIslandCat {
fn decode(data: &[u16]) -> Result<Self, crate::DecodeError> {
let value = u16::decode(data)?;
Ok(Self::from_bits_retain(value))
}
fn encode(self) -> Box<[u16]> {
self.bits().encode()
}
}
impl crate::FixedSize for IntIslandCat {
const SIZE: u16 = 1u16;
const INVALID: Self = Self::from_bits_retain(65535u16);
fn is_invalid(&self) -> bool {
self.bits() == 65535u16
}
}
impl crate::Model for DerCapacity {
const ID: u16 = 702;
fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
models.m702
}
fn parse(data: &[u16]) -> Result<Self, crate::ParseError<Self>> {
let (_, model) = Self::parse_group(data)?;
Ok(model)
}
}