CAN Unpack
从 CAN 报文中解包单个信号
库:
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 模块支持:
示例
端口
输入
CAN Msg — CAN 报文输入
CAN_MESSAGE
| CAN_MESSAGE_BUS
此模块有一个输入端口,即 CAN Msg。该模块接收指定的输入 CAN 报文,并将其信号数据解包到单独的输出。
该模块支持以下信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点数据类型。
输出
Data — CAN 信号输出
单精度值 | 双精度值 | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | 布尔值
该模块默认有一个输出端口。输出端口的数量是动态的,取决于您为模块指定的要输出的信号数。例如,如果您的报文有四个信号,则该模块可以有四个输出端口。
对于手动或由 CANdb 指定的信号,CAN 信号的默认输出数据类型为 double。要指定其他类型,请使用 Signal Specification (Simulink) 模块。该模块可支持以下输出信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点类型。
可以通过选择参数输出端口窗格中的选项添加其他输出端口。有关详细信息,请参阅参数 Output identifier
、Output timestamp
、Output error
、Output remote
、Output length
和 Output status
。
参数
要输出的数据格式 — 选择您的数据信号:
raw data
(默认) | manually specify signals
| CANdb specified signals
| ARXML 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 文件中的所选报文有四个信号,则您的模块有四个输出端口。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 文件 — CAN 数据库文件
字符向量
如果在数据输出为列表中指定通过 CANdb 文件输出数据,则此选项可用。点击浏览以找到系统上的 CANdb 文件。CANdb 文件中指定的报文和信号定义填充对话框的报文部分。CANdb 文件中指定的信号填充信号表。包含非字母数字字符(如等号、& 符号等)的文件名不是有效的 CAN 数据库文件名。您可以在数据库名称中使用句点。在使用之前,请重命名具有非字母数字字符的 CAN 数据库文件。
编程用法
模块参数:CANdbFile
|
类型:string | character vector
|
报文列表 — CAN 报文列表
字符向量数组
如果在数据输出为列表中指定以 CANdb 文件输出数据,并在 CANdb 文件字段中选择 CANdb 文件,则此选项可用。您可以选择要查看的报文。然后,信号表会显示所选报文的详细信息。
编程用法
模块参数:MsgList
|
类型:string | character vector
|
名称 — CAN 报文名称
CAN Msg
(默认) | 字符向量
指定 CAN 报文的名称。默认值为 CAN Msg
。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgName
|
类型:string | character vector
|
标识符类型 — CAN 标识符类型
Standard (11-bit identifier)
(默认) | Extended (29-bit identifier)
指定 CAN 报文标识符是 Standard
还是 Extended
类型。默认值为 Standard
。标准标识符是 11 位标识符,扩展标识符是 29 位标识符。如果您选择输出原始数据或手动指定信号,则此选项可用。对于 CANdb 指定的信号,标识符类型从数据库继承类型。
编程用法
模块参数:MsgIDType |
类型:string | character vector |
值:'Standard (11-bit identifier)' | 'Extended (29-bit identifier)' |
默认值:'Standard (11-bit identifier)'
|
CAN 标识符 — CAN 报文标识符
0
(默认) | 0
到 536870911
指定 CAN 报文 ID。对于标准标识符,此数字必须是 0 到 2047 之间的整数,对于扩展标识符,此数字必须是 0 到 536870911 之间的整数。如果指定 -1
,则模块将解包您所指定长度的报文。您还可以使用 hex2dec
函数指定十六进制值。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgIdentifier |
类型:string | character vector |
值:'0' 到 '536870911' |
长度(字节) — CAN 报文长度
8
(默认) | 0
到 8
指定 CAN 报文的长度,范围为 0 到 8 个字节。如果对输出数据使用 CANdb specified signals
,CANdb 文件将定义报文的长度。否则,此字段默认为 8
。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgLength |
类型:string | character vector |
值:'0' 到 '8' |
默认值:'8'
|
添加信号 — 添加 CAN 信号
向信号表中添加信号。
编程用法
无
删除信号 — 删除 CAN 信号
从信号表中删除所选信号。
编程用法
无
信号 — 信号表
表
如果您选择手动指定信号或使用 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 ID 输出端口
off
(默认)
选择此选项可输出 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'
|
扩展功能
C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。
版本历史记录
在 R2009a 中推出
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)