Simulink 中对 CAN 的 ARXML 文件支持
模块增强功能
与 DBC 文件相比,CAN Pack 和 CAN Unpack 模块支持更广泛的 ARXML 文件结构。一个可以在 ARXML 文件中建模但在 DBC 文件中没有对应项的重要元素就是协议数据单元 (PDU)。
原则上,一个帧可以包含多个 PDU,但具体到 CAN,AUTOSAR 标准限制一个帧只能载送一个 PDU。为了确定帧中每个信号的参数值,CAN Pack 和 CAN Unpack 模块使用文件中可用的 PDU 信息。但是,此信息不会显示在模块封装上。
模块的功能
下图显示使用从示例 ARXML 文件中读取的数据配置的 CAN Pack 模块的封装。CAN Unpack 模块封装类似于 CAN Pack。
在文件解析后,该模块按如下方式处理信息。
提取 CanFrameTriggerings 列表,每个 CanFrameTriggering 提供对应帧的 CAN 标识符值和 CAN 寻址模式(标识符类型,即标准或扩展)。
帧名称(出现在报文列表中以及名称字段中)是包含支持的 PDU 类型的文件中任何帧的名称。仅支持 ISignalIPdus,因此会跳过任何其他 PDU 类型,对应的帧也不会出现在下拉列表中。如果在文件中发现不支持的 PDU,该模块将在诊断查看器中引发警告。
文件中的每个 CanFrame 元素都以字节为单位提供长度。
系统不会从文件中读取远程帧标志,因此该选项保持激活状态以便在封装中手动指定。
信号表填写如下。
每个 CanFrame 还提供所谓的 PduToFrameMapping,从其中可获得 PDU 的起始位和字节顺序。此信息用于确定每个信号相对于帧的起始位和字节顺序的值。
系统会从 PduToFrameMapping 中还原 ISignalIPdu,并从中获取其 ISignalToIPduMappings 信息,后者提供 PDU 中每个信号的字节顺序和起始位置。每个 ISignalToIPduMapping 又引用一个 ISignal,并从中提取信号名称和位长度。这些信息可用来填写信号表的前四列。请注意,起始位是 PDU 起始位(相对于帧)和信号起始位(相对于 PDU)的组合,它取决于字节顺序。
数据类型列中的值按如下方式确定:
如果 ISignal 提供非空 networkRepresentationProps 字段,该字段定义 baseType,则 baseType 用于根据标准中的规则确定数据类型。
否则,模块回调会尝试根据 CompuMethods 中提供的信息推断数据类型。
如果无法确定数据类型,则会默认设置值
signed
并引发警告。
信号表的最后 4 列是根据与每个 ISignal 相关联的 SystemSignal 所引用的 CompuMethod 中的可用信息确定的。
仅支持线性缩放(即,物理值 = 因子 * 内部值 + 偏移量)。
如果 CompuMethods 缺失或不完整,模块将设置与没有上限或下限的标识关系对应的默认值,并引发警告。
一般情况下,如果数据缺失或不完整,该模块将引发警告,并建议切换到 Manually specified signals
以修改推断的值或设置为默认值。这样,即使提供的文件不完整,工作流也不会中断。
限制
仅支持 ISignalIPdus。
使用 ARXML 文件时不支持多路复用。相应地,“多路复用类型”将设置为“标准”,“多路复用值”将设置为“0”。
IDENTICAL
、LINEAR
、SCALE_LINEAR
的 CompuMethods 和空类别:如果类别为
SCALE_LINEAR
,则仅支持具有单个区间的情况(即等效于LINEAR
);否则,将使用默认值并引发警告。如果未指定类别,则假定它为
LINEAR
。如果内容与假设不一致,则使用默认值并引发警告。