///|
/// AlarmCRBlockReq — the alarm communication relationship requested in an AR
/// Connect. Field order and defaults mirror the C# reference
/// `JIYUAN.PROFINET.IO.Block.AlarmCRBlockReq`.
pub(all) struct AlarmCRBlockReq {
alarm_cr_type : Int
lt : Int
alarm_cr_properties : Int
rta_timeout_factor : Int
rta_retries : Int
local_alarm_reference : Int
max_alarm_data_length : Int
alarm_cr_tag_header_high : Int
alarm_cr_tag_header_low : Int
} derive(Eq, Debug)
///|
/// Default AlarmCR matching the C# reference (LT=0x8892, retries=3,
/// max data length=200, tag headers 0xC000/0xA000).
pub fn AlarmCRBlockReq::default() -> AlarmCRBlockReq {
AlarmCRBlockReq::{
alarm_cr_type: 1,
lt: 0x8892,
alarm_cr_properties: 0,
rta_timeout_factor: 1,
rta_retries: 3,
local_alarm_reference: 0,
max_alarm_data_length: 200,
alarm_cr_tag_header_high: 0xC000,
alarm_cr_tag_header_low: 0xA000,
}
}
///|
/// Encode the AlarmCR block body (without the IO block header). 20 bytes,
/// all big-endian.
pub fn encode_alarm_cr_block_req(req : AlarmCRBlockReq) -> Bytes {
let output : Array[Byte] = []
push_u16_be(output, req.alarm_cr_type)
push_u16_be(output, req.lt)
push_u32_be(output, req.alarm_cr_properties)
push_u16_be(output, req.rta_timeout_factor)
push_u16_be(output, req.rta_retries)
push_u16_be(output, req.local_alarm_reference)
push_u16_be(output, req.max_alarm_data_length)
push_u16_be(output, req.alarm_cr_tag_header_high)
push_u16_be(output, req.alarm_cr_tag_header_low)
Bytes::from_array(output)
}