CAN FD Unpack
从 CAN FD 报文中解包单个信号
![](block_canfdunpack.gif)
库:
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)。
示例
端口
输入
Msg — CAN FD 报文输入
CAN_FD_MESSAGE_BUS
此模块有一个输入端口 Msg。CAN FD Unpack 模块接收指定的输入 CAN 报文,并将其信号数据解包到单独的输出。
该模块支持以下输入信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点数据类型。
输出
Data — CAN 报文输出
单精度值 | 双精度值 | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | 布尔值
CAN FD Unpack 模块默认有一个输出端口。数据输出端口的数量是动态的,取决于您为模块指定的要输出的信号数。例如,如果您的模块有四个信号,那么它就会有四个以信号名称为标签的输出端口。
对于手动或 CANdb 指定的信号,默认输出信号数据类型为 double。要指定其他类型,请使用 Signal Specification (Simulink) 模块。该模块可支持以下输出信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点类型。
可以通过参数输出端口窗格中的选项添加其他输出端口。
参数
要输出的数据格式 — 选择您的数据信号:
raw data
(默认) | manually specify signals
| CANdb specified signals
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 文件 — CAN 数据库文件
字符向量
如果在数据输出为列表中指定通过 CANdb 文件输出数据,则此选项可用。点击浏览以找到系统上的 CANdb 文件。CANdb 文件中指定的报文和信号定义填充对话框的报文部分。CANdb 文件中指定的信号会填充信号表。包含非字母数字字符(如等号、& 符号等)的文件名不是有效的 CAN 数据库文件名。您可以在数据库名称中使用句点。在使用之前,请重命名具有非字母数字字符的 CAN 数据库文件。
编程用法
模块参数:CANdbFile
|
类型:string | character vector
|
报文列表 — 报文列表
字符向量数组
如果在数据输出为列表中指定以 CANdb 文件输出数据,并在 CANdb 文件字段中选择 CANdb 文件,则此选项可用。您可以选择要查看的报文。然后,信号表会显示所选报文的详细信息。
编程用法
模块参数:MsgList
|
类型:string | character vector
|
名称 — 报文名称
CAN Msg
(默认) | 字符向量
指定报文的名称。默认值为 Msg
。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgName
|
类型:string | character vector
|
标识符类型 — 标识符类型
Standard (11-bit identifier)
(默认) | Extended (29-bit identifier)
指定报文标识符是 Standard
还是 Extended
类型。默认值为 Standard
。标准标识符是 11 位标识符,扩展标识符是 29 位标识符。如果您选择输出原始数据或手动指定信号,则此选项可用。对于 CANdb 指定的信号,标识符类型从数据库继承类型。
编程用法
模块参数:MsgIDType |
类型:string | character vector |
值:'Standard (11-bit identifier)' | 'Extended (29-bit identifier)' |
默认值:'Standard (11-bit identifier)'
|
标识符 — 消息标识符
0
(默认) | 0 .. 536870911
指定您的报文 ID。对于标准标识符,此数字必须是 0 到 2047 之间的整数,对于扩展标识符,此数字必须是 0 到 536870911 之间的整数。如果指定 -1
,则模块将解包您所指定长度的报文。您还可以使用 hex2dec
函数指定十六进制值。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgIdentifier |
类型:string | character vector |
值:'0' 到 '536870911' |
长度(字节) — CAN 报文长度
8
(默认) | 0 .. 8
指定报文的长度。对于 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'
|
添加信号 — 添加 CAN 信号
向信号表中添加信号。
编程用法
无
删除信号 — 删除 CAN 信号
从信号表中删除所选信号。
编程用法
无
信号 — 信号表
表
如果您选择手动指定信号或使用 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 ID 输出端口
off
(默认) | on
选择此选项可输出 CAN 报文标识符。此端口的数据类型为 uint32
。
编程用法
模块参数:IDPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出时间戳 — 添加时间戳输出端口
off
(默认) | on
选择此选项可输出报文时间戳。此值指示收到报文的时间,测量值为模型仿真开始以来经过的秒数。此选项会向模块添加一个新的输出端口。此端口的数据类型为 double
。
编程用法
模块参数:TimestampPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出错误 — 添加错误输出端口
off
(默认) | on
选择此选项可输出报文错误状态。此选项会向模块添加一个新的输出端口。该端口上的输出值 1
表明传入报文是错误帧。如果输出值为 0
,则没有错误。此端口的数据类型为 uint8
。
编程用法
模块参数:ErrorPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出远程 — 添加远程输出端口
off
(默认) | on
选择此选项可输出报文远程帧状态。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8
。
编程用法
模块参数:RemotePort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出长度 — 添加长度输出端口
off
(默认) | on
选择此选项可输出报文的长度(以字节为单位)。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8
。
编程用法
模块参数:LengthPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出状态 — 添加状态输出端口
off
(默认) | on
选择此选项可输出报文接收状态。如果模块接收到新报文,则状态为 1
,如果没有收到,则状态为 0
。此选项会向模块添加一个新的输出端口。此端口的数据类型为 uint8
。
编程用法
模块参数:StatusPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出比特率开关(BRS) — 添加 BRS 输出端口
off
(默认) | on
(对于 CAN 协议禁用。)选择此选项可输出报文比特率开关。此选项向模块添加新输出端口,指示 CAN FD 报文比特率开关是否已设置。此端口的数据类型为 boolean
,指示报文数据相位的比特率与仲裁相位的比特率相比是更快 (true
) 还是与之相同 (false
)。
有关 BRS 的详细信息,请参阅 CAN FD - 部分协议详细信息。
编程用法
模块参数:BRSPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出错误状态指示符(ESI) — 添加 ESI 输出端口
off
(默认) | on
(对于 CAN 协议禁用。)选择此选项可输出报文错误状态。此选项会向模块添加一个新的输出端口。此端口的数据类型为 boolean
,表示 CAN FD 报文错误状态指示标志是否已设置。
有关 ESI 的详细信息,请参阅 CAN FD - 部分协议详细信息。
编程用法
模块参数:ESIPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
输出数据长度代码(DLC) — 添加 DLC 输出端口
off
(默认) | on
(对于 CAN 协议禁用。)选择此选项可输出报文数据长度。此选项会向模块添加一个新的输出端口。此端口的数据类型为 double
。
编程用法
模块参数:DLCPort
|
类型:string | character vector |
值:'off' | 'on' |
默认值:'off'
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
版本历史记录
在 R2018a 中推出
另请参阅
模块
- CAN FD Configuration | CAN FD Pack | CAN FD Receive | CAN Unpack | CAN Unpack (Simulink Real-Time)
函数
主题
- 支持的模块功能
- 设计模型以实现有效加速 (Simulink)
- 合成接口 (Simulink)
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)