Main Content

CAN Unpack

从 CAN 报文中解包单个信号

  • CAN Unpack block

库:
Vehicle Network Toolbox / CAN Communication
C2000 Microcontroller Blockset / Target Communication
Embedded Coder / Embedded Targets / Host Communication
Simulink Real-Time / CAN / CAN MSG blocks

描述

CAN Unpack 模块在每个时间步使用指定的输出参数将 CAN 报文解包为信号数据。数据作为单个信号输出。

要使用此模块,您还需要 Simulink® 软件的许可证。

CAN Unpack 模块支持:

  • 使用 Simulink 加速和快速加速模式。使用此功能,可以加快 Simulink 模型的执行速度。有关详细信息,请参阅加速 (Simulink)

  • 使用模型引用。使用此功能,您的模型可以包含其他 Simulink 模型作为模块化组件。有关详细信息,请参阅模型引用 (Simulink)

提示

  • 要处理通过通道传来的每个报文,建议您使用函数触发子系统中的 CAN Unpack 模块。请参阅使用触发子系统 (Simulink)

  • 此模块可用于解码最多 8 个字节的 J1939 参数组的信号。但是,要使用 J1939 报文,最好使用 J1939 Communication 模块库中的模块,而不是此模块。请参阅 J1939 通信

端口

输入

全部展开

此模块有一个输入端口,即 CAN Msg。该模块接收指定的输入 CAN 报文,并将其信号数据解包到单独的输出。

该模块支持以下信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点数据类型。

输出

全部展开

该模块默认有一个输出端口。输出端口的数量是动态的,取决于您为模块指定的要输出的信号数。例如,如果您的报文有四个信号,则该模块可以有四个输出端口。

对于手动或由 CANdb 指定的信号,CAN 信号的默认输出数据类型为 double。要指定其他类型,请使用 Signal Specification (Simulink) 模块。该模块可支持以下输出信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点类型。

可以通过选择参数输出端口窗格中的选项添加其他输出端口。有关详细信息,请参阅参数 Output identifierOutput timestampOutput errorOutput remoteOutput lengthOutput status

参数

全部展开

  • raw data:将数据输出为一个 uint8 向量数组。如果选择此选项,则只需指定报文的字段。其他信号参数字段不可用。此选项仅在模块上创建一个输出端口。

    转换公式为:

    physical_value = raw_value * Factor + Offset
    其中 raw_value 是解包的信号值,physical_value 是缩放的信号值。

  • manually specified signals:您可以指定数据信号。如果选择此选项,请使用 Signals 表来手动创建信号报文。模块上的输出端口数取决于您指定的信号数。例如,如果指定四个信号,则模块具有四个输出端口。

  • CANdb specified signals:您可以指定包含数据信号的 CAN 数据库文件。如果选择此选项,请选择 CANdb 文件。模块上的输出端口数取决于 CANdb 文件中指定的信号数。例如,如果 CANdb 文件中的所选报文有四个信号,则您的模块有四个输出端口。

  • ARXML specified signals:允许您为信号定义指定 ARXML 文件。这将禁用一些远程选项。从 ARXML 文件中读取数据后,您可以切换到 manually specified signals 来进一步修改该表。

    有关详细信息,请参阅Simulink 中对 CAN 的 ARXML 文件支持

编程用法

模块参数:DataFormat
类型:string | character vector
值:'raw data' | 'manually specified signals' | 'CANdb specified signals' | 'ARXML specified signals'
默认值:'raw data'

如果在数据输出为列表中指定通过 CANdb 文件输出数据,则此选项可用。点击浏览以找到系统上的 CANdb 文件。CANdb 文件中指定的报文和信号定义填充对话框的报文部分。CANdb 文件中指定的信号填充信号表。包含非字母数字字符(如等号、& 符号等)的文件名不是有效的 CAN 数据库文件名。您可以在数据库名称中使用句点。在使用之前,请重命名具有非字母数字字符的 CAN 数据库文件。

编程用法

模块参数:CANdbFile
类型:string | character vector

如果在数据输出为列表中指定以 CANdb 文件输出数据,并在 CANdb 文件字段中选择 CANdb 文件,则此选项可用。您可以选择要查看的报文。然后,信号表会显示所选报文的详细信息。

编程用法

模块参数:MsgList
类型:string | character vector

指定 CAN 报文的名称。默认值为 CAN Msg。如果您选择输出原始数据或手动指定信号,则此选项可用。

编程用法

模块参数:MsgName
类型:string | character vector

指定 CAN 报文标识符是 Standard 还是 Extended 类型。默认值为 Standard。标准标识符是 11 位标识符,扩展标识符是 29 位标识符。如果您选择输出原始数据或手动指定信号,则此选项可用。对于 CANdb 指定的信号,标识符类型从数据库继承类型。

编程用法

模块参数:MsgIDType
类型:string | character vector
值:'Standard (11-bit identifier)' | 'Extended (29-bit identifier)'
默认值:'Standard (11-bit identifier)'

指定 CAN 报文 ID。对于标准标识符,此数字必须是 0 到 2047 之间的整数,对于扩展标识符,此数字必须是 0 到 536870911 之间的整数。如果指定 -1,则模块将解包您所指定长度的报文。您还可以使用 hex2dec 函数指定十六进制值。如果您选择输出原始数据或手动指定信号,则此选项可用。

编程用法

模块参数:MsgIdentifier
类型:string | character vector
值:'0''536870911'

指定 CAN 报文的长度,范围为 0 到 8 个字节。如果对输出数据使用 CANdb specified signals,CANdb 文件将定义报文的长度。否则,此字段默认为 8。如果您选择输出原始数据或手动指定信号,则此选项可用。

编程用法

模块参数:MsgLength
类型:string | character vector
值:'0''8'
默认值:'8'

向信号表中添加信号。

编程用法

从信号表中删除所选信号。

编程用法

如果您选择手动指定信号或使用 CANdb 文件定义信号,则会出现此表。

如果您使用的是 CANdb 文件,则文件中的数据会填充此表,您不能编辑字段。要编辑信号信息,请切换到指定的信号。

如果您已选择手动指定信号,请在此表中手动创建信号。您创建的每个信号都具有以下值:

名称

为信号指定说明性名称。模型中的 Simulink 模块将显示此名称。默认值为 Signal [row number]

开始位

指定数据的开始位。开始位是从报文的开头起计的最低有效位。开始位必须是 0 到 63 之间的整数。

长度(位)

指定信号在报文中占用的位数。长度必须是 1 到 64 之间的整数。

字节顺序

选择以下任一选项:

  • LE:其中字节顺序为 little-endian 格式 (Intel®)。在这种格式中,从最低有效位到最高有效位进行计数。例如,如果以 little-endian 格式打包数据的一个字节,并且开始位为 20,则数据位表类似于下图所示。

    从最低有效位到最高地址计数的 Little-Endian 字节顺序

  • BE:其中字节顺序为 big-endian 格式 (Motorola®)。在这种格式中,从最低有效位到最高有效位进行计数。例如,如果以 big-endian 格式打包数据的一个字节,并且开始位为 20,则数据位表类似于下图所示。

    从最低有效位到最低地址计数的 Big-Endian 字节顺序

数据类型

指定信号如何解释分配的位中的数据。从下列各项中选择:

  • signed(默认值)

  • unsigned

  • single

  • double

多路复用类型

指定模块在每个时间步从 CAN 报文中解包信号的方式:

  • Standard:在每个时间步都解包信号。

  • 多路选择器:解包多路选择器信号,即模式信号。对每条报文,只能指定一个多路选择器信号。

  • 多路复用:如果在运行时多路选择器信号(模式信号)的值与此信号的配置的多路复用值匹配,则解包信号。

例如,一条报文包含四个具有以下值的信号。

信号名称多路复用类型多路复用值
Signal-A标准不适用
Signal-B多路复用1
Signal-C多路复用0
Signal-D多路选择器不适用

在此示例中:

  • 该模块在每个时间步中解包 Signal-A(标准信号)和 Signal-D(多路选择器信号)。

  • 如果 Signal-D 的值在特定时间步为 1,则模块在该时间步中将 Signal-B 与 Signal-A 和 Signal-D 一起解包。

  • 如果 Signal-D 的值在特定时间步为 0,则模块在该时间步中将 Signal-C 与 Signal-A 和 Signal-D 一起解包。

  • 如果 Signal-D 的值不是 1 或 0,则模块不会在该时间步中解包任一复用信号。

多路复用值

仅当您选择的多路复用类型Multiplexed 时,此选项才可用。您提供的值必须与运行时的多路选择器信号值匹配,模块才能解包多路复用信号。多路复用值必须是正整数或零。

因子

指定将解包的原始值转换为物理值(信号值)时应用的因子值。有关详细信息,请查看数据输入为参数转换公式。

偏移量

指定将物理值(信号值)转换为解包的原始值时应用的偏移量值。有关详细信息,请查看数据输入为参数转换公式。

最小值最大值

定义一个原始信号值范围。默认设置分别为 -Inf(负无穷)和 Inf。对于 CANdb 指定的信号,将从 CAN 数据库中读取这些设置。对于手动指定的信号,您可以指定信号的最小和最大物理值。默认情况下,这些设置不会对超过它们的信号值进行裁剪。

编程用法

模块参数:SignalInfo
类型:string | character vector

选择此选项可输出 CAN 报文标识符。此端口的数据类型为 uint32

编程用法

模块参数:IDPort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

选择此选项可输出报文时间戳。此值指示收到报文的时间,测量值为模型仿真开始以来经过的秒数。此选项会向模块添加一个新的输出端口。此端口的数据类型为 double

编程用法

模块参数:TimestampPort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

选择此选项可输出报文错误状态。此选项会向模块添加一个新的输出端口。该端口上的输出值 1 表明传入报文是错误帧。如果输出值为 0,则没有错误。此端口的数据类型为 uint8

编程用法

模块参数:ErrorPort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

选择此选项可输出报文远程帧状态。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8

编程用法

模块参数:RemotePort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

选择此选项可输出报文的长度(以字节为单位)。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8

编程用法

模块参数:LengthPort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

选择此选项可输出报文接收状态。如果模块接收到新报文,则状态为 1,如果没有收到,则状态为 0。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8

编程用法

模块参数:StatusPort
类型:string | character vector
值:'off' | 'on'
默认值:'off'

扩展功能

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2009a 中推出