Chronaxis用户手册English
本页目录

chronaxis.planning.signal_validity

源码基线:8904c2f744951857659abd40aaa3535d57faf53c

1"""确定信号的有效期声明,不读取DBC或日志。23显式valid_for优先;否则使用本信号period的三倍。原始报文未填period时4保留None,执行启动再从本次已有DBC元数据取得周期。已解码数据不能借用5别的信号或计算驱动的周期。所有数值以正int64纳秒表示,无I/O或全局缓存。6"""78from .checks import PlanValidationError, duration_at9from ..timebase.conversion import require_int64_ns101112def triple_period(period_ns, path):13    """将周期乘三并检查溢出,避免产生无限或负有效期。1415    参数: period_ns为正整数纳秒;path为配置错误位置。16    返回: 正int64纳秒有效期。异常: PlanValidationError为非法周期或乘积超界。17    副作用: 无,不读取文件。18    """19    try:20        # bool不表示一个纳秒;先核周期,再核乘积,保持精确整数运算。21        if type(period_ns) is not int or period_ns <= 0:22            raise ValueError('信号周期必须是正整数纳秒')23        return require_int64_ns(period_ns * 3, 'valid_for_ns')24    except (TypeError, ValueError, OverflowError) as error:25        raise PlanValidationError(path, '周期的3倍不能作为有效期:' + str(error)) from error262728def declared_valid_for(raw, path, *, dbc_available):29    """按显式有效期、信号周期、待查DBC的优先顺序解析声明。3031    参数: raw为单信号配置;path为其配置位置;dbc_available说明原始来源有DBC。32    返回: 正int纳秒或None(只用于尚待DBC的声明)。33    异常: PlanValidationError为显式空值、周期/有效期错误或没有周期依据。34    副作用: 无;validate/explain不会因此打开DBC。35    """36    # 即使有效期已覆盖默认值,用户填写的周期也必须合法,不能静默忽略错误。37    period = duration_at(raw['period'], path + '.period', positive=True) if 'period' in raw else None38    if 'valid_for' in raw:39        return duration_at(raw['valid_for'], path + '.valid_for', positive=True)40    if period is not None:41        return triple_period(period, path + '.valid_for')42    # 原始报文可在运行启动借用同次DBC;静态阶段不为默认值提前读文件。43    if dbc_available:44        return None45    raise PlanValidationError(path + '.valid_for',46        '未填写valid_for且无法取得信号周期;请填写本信号period或valid_for')47
Chronaxis 用户手册 · 离线阅读