Main Content

CAN Unpack

从 CAN 报文中解包单个信号

  • 库:
  • Vehicle Network Toolbox / CAN Communication

    Embedded Coder / Embedded Targets / Host Communication

    Embedded Coder Support Package for Texas Instruments C2000 Processors / Target Communication

    Simulink Real-Time / CAN / CAN MSG blocks

  • CAN Unpack block

描述

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

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

CAN Unpack 模块支持:

  • 使用 Simulink Accelerator™ Rapid Accelerator 模式。使用此功能,可以加快 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。该模块不支持定点数据类型。

生成代码以将模型部署到目标。如果信号信息包含大于 32 位长度的有符号或无符号整数,则不支持代码生成。

输出

全部展开

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

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

可以通过选择参数 Output ports 窗格中的选项添加其他输出端口。有关详细信息,请参阅参数 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 文件中的所选报文有四个信号,则您的模块有四个输出端口。

编程用法

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

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

编程用法

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

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

编程用法

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

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

编程用法

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

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

编程用法

模块参数: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 文件,则文件中的数据会填充此表,您不能编辑字段。要编辑信号信息,请切换到指定的信号。

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

Name

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

Start bit

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

Length (bits)

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

Byte order

选择以下任一选项:

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

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

    Image of little-endian byte order counted from least-significant bit to the highest address

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

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

    Image of big-endian byte order counted from least-significant bit to lowest address

Data type

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

  • signed(默认值)

  • unsigned

  • single

  • double

Multiplex type

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

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

  • Multiplexor”:解包 “Multiplexor” 信号,即模式信号。对每条报文,只能指定一个 “Multiplexor” 信号。

  • Multiplexed”:如果在运行时 “Multiplexor” 信号(模式信号)的值与此信号的配置的 Multiplex value 匹配,则解包信号。

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

信号名称多路复用类型多路复用值
Signal-AStandard不适用
Signal-BMultiplexed1
Signal-CMultiplexed0
Signal-DMultiplexor不适用

在此示例中:

  • 该模块在每个时间步中解包 Signal-A(Standard 信号)和 Signal-D(Multiplexor 信号)。

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

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

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

Multiplex value

仅当您选择 Multiplex typeMultiplexed 时,此选项才可用。您提供的值必须与运行时的 “Multiplexor” 信号值匹配,模块才能解包 “Multiplexed” 信号。Multiplex value 必须是正整数或零。

Factor

指定将解包的原始值转换为物理值(信号值)时应用的 Factor 值。有关详细信息,请查看 Data input as 参数转换公式。

Offset

指定将物理值(信号值)转换为解包的原始值时应用的 Offset 值。有关详细信息,请查看 Data input as 参数转换公式。

MinMax

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

编程用法

模块参数: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 中推出