一、总体架构分层决策模型核心思想谁有权发言Triggered/Pending→ 发言内容是否重要TMC→ 大家合起来决定是否要立即行动TMS→ 行动的具体方式TxMode。二、第一层信号权限Triggered vs Pending属性含义作用层级类比TRIGGERED信号更新时可以触发发送流程拥有发言权信号级别“我有权利举手要求发言”PENDING信号更新时不会触发任何发送流程仅存储值信号级别“我只能写纸条不能主动发言”关键这个属性在Com_SendSignal调用时立即判断决定了后续流程是否继续。示例发动机数据 PDUcpp// 信号配置 RPM_Signal { TRIGGERED, ONE_EVERY_5 }; // 有发言权但内容不是每次都重要 Temp_Signal { PENDING, NEW_IS_OUTSIDE }; // 无发言权但异常内容重要 // 场景1更新转速3000 rpm Com_SendSignal(RPM_Signal, 3000); → Triggered → 触发流程 → 计算 TMCONE_EVERY_5 可能为 True/False → 若 TMCTrue最终可能发送 PDU // 场景2更新温度85°C正常范围 Com_SendSignal(Temp_Signal, 85); → Pending → 只更新内部存储流程结束 → 不会触发 PDU 发送 // 场景3更新温度120°C异常范围 Com_SendSignal(Temp_Signal, 120); → Pending → 仍只更新值无触发 → 虽然内容重要TMC 本可为 True但无权发起发送补充说明TRIGGERED_ON_CHANGE是 TRIGGERED 的变种仅当新值与上次存储值不同时才触发流程。对于 PENDING 信号其最新值仍会保存在 I-PDU 缓冲区中当其他信号触发 PDU 发送时该值会一并被发送出去。所以 PENDING 信号并非永远发不出去只是不能主动触发发送。三、第二层发送条件判断TMCTMCTransmission Mode Condition是单个信号级别的布尔条件用于判断“这个信号当前是否值得触发发送”。它通过滤波算法Filter对信号新值进行计算。TMC 类型含义示例ALWAYS总是需要发送刹车信号每次更新都重要NEVER永远不需要发送调试信号量产时忽略MASKED_NEW_EQUALS_X掩码后等于特定值才发送只有故障码0x08时发送MASKED_NEW_DIFFERS_X掩码后不等于特定值才发送不是正常状态(0x00)就发送MASKED_NEW_DIFFERS_MASKED_OLD掩码后的值发生变化才发送忽略数值波动只关心变化NEW_IS_WITHIN新值在指定范围内才发送水温70-110°C正常范围时发送NEW_IS_OUTSIDE新值超出指定范围才发送油压异常超出2.0-4.0 bar时发送ONE_EVERY_N每N次更新才发送1次每5次轮速更新才发一次降采样配置示例cpp// 1. 刹车信号总是重要 Brake_Signal.TMC ALWAYS; // 2. 温度信号只在异常时重要 Temp_Signal.TMC NEW_IS_OUTSIDE; Temp_Signal.min 70; Temp_Signal.max 110; // 3. 转速信号降采样 RPM_Signal.TMC ONE_EVERY_N; RPM_Signal.N 3; // 4. 状态信号变化才重要 Status_Signal.TMC MASKED_NEW_DIFFERS_MASKED_OLD; Status_Signal.mask 0x0F; // 只关心低4位四、第三层PDU 级决策TMSTMSTransmission Mode Selector是整个 I-PDU 级别的布尔值由该 PDU 内所有信号的 TMC逻辑或OR运算得到textTMS TMC_signal_1 OR TMC_signal_2 OR ... OR TMC_signal_N只要有一个信号的 TMC 为TRUE整个 PDU 的 TMS 就是TRUE。示例某 PDU 包含三个信号信号 ATMC TRUE需要发送信号 BTMC FALSE不急需信号 CTMC FALSE不急需则TMS TRUE OR FALSE OR FALSE TRUE→ 选择ComTxModeTrue发送策略。五、第四层发送策略ComTxModeTrue / ComTxModeFalse根据 TMS 结果COM 模块会选择两种预配置的发送模式之一模式含义典型配置ComTxModeTrueTMS TRUE时使用紧急、快速发送如 DIRECT、N-timesComTxModeFalseTMS FALSE时使用常规、周期发送如 PERIODIC发送模式类型TxMode模式行为适用场景DIRECT立即发送一次紧急信号DIRECT_N_TIMES立即连续发送 N 次增强可靠性安全关键信号PERIODIC按固定周期发送周期性状态信息MIXED先立即发送一次再按周期发送重要事件 持续监控NONE不自动发送由上层手动触发诊断或特殊控制配置示例cpp// 紧急策略 (TMSTrue) ComTxModeTrue: { mode DIRECT_N_TIMES, n_times 3, // 连发3次 period 0 } // 常规策略 (TMSFalse) ComTxModeFalse: { mode PERIODIC, period 100 // 100ms周期 }六、完整工作流程示例车门控制 PDU配置PDU 发送策略ComTxModeTrue→DIRECT立即发送3次ComTxModeFalse→PERIODIC_50ms每50ms周期发送PDU 内信号刹车压力信号TMC ALWAYS超级紧急ABS 状态信号TMC MASKED_NEW_DIFFERS_MASKED_OLD变化时才重要轮速参考信号TMC ONE_EVERY_N, N5每5次更新才重要运行过程场景信号更新信号TMC该PDU的TMS选择的发送模式实际行为正常刹车刹车压力变化TRUETRUEComTxModeTrue立即发送连发3次ABS状态变化ABS状态变化TRUETRUEComTxModeTrue立即发送连发3次轮速第5次更新轮速值更新TRUETRUEComTxModeTrue立即发送连发3次轮速前4次更新轮速值更新FALSEFALSEComTxModeFalse不立即发送按50ms周期发送保底所有信号都不急无变化或条件不满足全部FALSEFALSEComTxModeFalse周期发送七、常见误区澄清误区1Pending 信号永远不会被发送纠正Pending 信号不能主动触发发送但当该 PDU 因其他信号Triggered被发送时Pending 信号的最新值会被包含在 PDU 中一起发送。误区2Triggered 信号总是会触发发送纠正Triggered 只是开启了发送决策流程最终是否发送还取决于TMC 计算结果若为FALSE且无其他信号 TMC 为TRUE则 TMS 为FALSE可能不会立即发送。发送模式若模式为PERIODIC可能只标记待发送等到周期才发。误区3TMC 重要的信号一定要配置为 Triggered纠正不一定。如果一个信号内容很重要但更新频率极高例如每毫秒一次配置为 Triggered 会导致总线负载暴增。此时可以配置为 Pending依赖其他信号如周期定时器触发 PDU 发送从而降采样。误区4TMS 只在信号更新时计算一次纠正TMS 可能因以下情况重新计算任何信号更新通过Com_SendSignal。周期定时器触发用于周期发送模式。显式调用Com_TriggerIPDUSend强制触发。误区5ComTxModeTrue 一定比 ComTxModeFalse 发送得更快纠正不一定。虽然通常True模式配置为立即发送但也可以配置为更慢的周期相反False模式也可以配置为较快周期。关键在于配置策略而非名字。八、总结决策链速查表层级概念输入输出时机权限层ComTransferProperty信号新旧值Triggered / PendingCom_SendSignal调用时条件层TMC滤波机制信号新值BooleanTriggered 流程内聚合层TMS所有信号 TMCBooleanOR任一信号 TMC 变化时策略层ComTxModeTrue/FalseTMS 结果发送模式DIRECT/PERIODIC等TMS 确定后执行层PduR_ComTransmit发送模式总线报文根据模式立即 or 周期