Main Content

CAN FD Unpack

从 CAN FD 报文中解包单个信号

  • CAN FD Unpack block

库:
Vehicle Network Toolbox / CAN FD Communication
C2000 Microcontroller Blockset / Target Communication
Simulink Real-Time / CAN / CAN-FD MSG blocks

描述

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

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

CAN FD Unpack 模块支持:

  • Simulink 加速模式。您可以加快 Simulink 模型的执行速度。有关详细信息,请参阅加速 (Simulink)

提示

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

  • 要使用 J1939 报文,请使用 J1939 Communication 模块库中的模块,而不是此模块。请参阅 J1939 通信

端口

输入

全部展开

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

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

输出

全部展开

CAN FD Unpack 模块默认有一个输出端口。数据输出端口的数量是动态的,取决于您为模块指定的要输出的信号数。例如,如果您的模块有四个信号,那么它就会有四个以信号名称为标签的输出端口。

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

可以通过参数输出端口窗格中的选项添加其他输出端口。

参数

全部展开

  • 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'

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

编程用法

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

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

编程用法

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

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

编程用法

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

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

编程用法

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

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

编程用法

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

指定报文的长度。对于 CAN 报文,该值可以是 0-8 个字节;对于 CAN FD,该值可以是 0-8、12、16、20、24、32、48 或 64 个字节。如果对输出数据使用 CANdb specified signals,CANdb 文件将定义报文的长度。如果您选择输出原始数据或手动指定信号,则此选项可用。

编程用法

模块参数:MsgLength
类型:string | character vector
值:'0''8''12''16''20''24''32''48''64'
默认值:'8'

向信号表中添加信号。

编程用法

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

编程用法

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

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

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

名称

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

开始位

指定数据的开始位。开始位是从报文数据的开头计数的最低有效位。对于 CAN,开始位必须是 0 到 63 之间的整数,对于 CAN FD,开始位必须是 0 到 511 之间的整数(同时还需在报文的位数内)。(请注意,报文长度以字节为单位指定。)

长度(位)

指定信号在报文中占用的位数。长度必须是 1 到 64 之间的整数。报文中所有信号长度的总和不能超过报文长度中的位数;也就是说,所有信号的累积长度必须在报文的长度内。(注意,报文长度以字节为单位,信号长度以位为单位。)

字节顺序

选择以下任一选项:

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

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

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

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

数据类型

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

  • signed(默认值)

  • unsigned

  • single

  • double

    注意:如果某 double 信号与报文字节边界不完全对齐,要使用 Embedded Coder® 生成代码,则必须选中“配置参数”对话框的硬件实现窗格中的设备详细信息下的支持 long long

多路复用类型

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

  • 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'

(对于 CAN 协议禁用。)选择此选项可输出报文比特率开关。此选项向模块添加新输出端口,指示 CAN FD 报文比特率开关是否已设置。此端口的数据类型为 boolean,指示报文数据相位的比特率与仲裁相位的比特率相比是更快 (true) 还是与之相同 (false)。

有关 BRS 的详细信息,请参阅 CAN FD - 部分协议详细信息

编程用法

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

(对于 CAN 协议禁用。)选择此选项可输出报文错误状态。此选项会向模块添加一个新的输出端口。此端口的数据类型为 boolean,表示 CAN FD 报文错误状态指示标志是否已设置。

有关 ESI 的详细信息,请参阅 CAN FD - 部分协议详细信息

编程用法

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

(对于 CAN 协议禁用。)选择此选项可输出报文数据长度。此选项会向模块添加一个新的输出端口。此端口的数据类型为 double

编程用法

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

扩展功能

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

版本历史记录

在 R2018a 中推出