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 模块支持:
示例
Simulink 周期性 CAN 报文传输行为
此示例说明如何使用 MathWorks® 虚拟 CAN 通道在 Simulink® 中设置 CAN 报文的周期性传输和接收。虚拟通道以环回配置形式连接。
端口
输入
此模块有一个输入端口,即 CAN Msg。该模块接收指定的输入 CAN 报文,并将其信号数据解包到单独的输出。
该模块支持以下信号数据类型:single、double、int8、int16、int32、int64、uint8、uint16、uint32、uint64 和 boolean。该模块不支持定点数据类型。
输出
该模块默认有一个输出端口。输出端口的数量是动态的,取决于您为模块指定的要输出的信号数。例如,如果您的报文有四个信号,则该模块可以有四个输出端口。
对于手动或由数据库指定的信号,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
:将数据输出为一个 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 specified signals
或 ARXML specified signals
,则此选项可用。点击浏览以在您的系统上找到数据库文件。数据库文件中指定的报文和信号定义填充对话框的报文部分。数据库文件中指定的信号填充信号表。包含非字母数字字符(如等号、& 符号等)的文件名不是有效的数据库文件名。您可以在数据库名称中使用句点。在使用之前,请重命名具有非字母数字字符的数据库文件。
编程用法
模块参数:CANdbFile
|
类型:string | character vector
|
如果您为数据输入为字段指定数据库,并在数据库文件字段中指定数据库文件,则此选项可用。您可以选择要查看的报文。然后,信号表会显示所选报文的详细信息。
编程用法
模块参数:MsgList
|
类型:string | character vector
|
指定 CAN 报文的名称。默认值为 CAN Msg
。如果您选择输出原始数据或手动指定信号,则此选项可用。
编程用法
模块参数:MsgName
|
类型:string | character vector
|
指定 CAN 报文标识符是 Standard
还是 Extended
类型。默认值为 Standard
。标准标识符是 11 位标识符,扩展标识符是 29 位标识符。如果您选择输出原始数据或手动指定信号,则此选项可用。对于数据库指定的信号,标识符类型从数据库继承类型。
编程用法
模块参数: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 个字节。如果您使用数据库指定的信号作为输出数据,数据库文件定义您的报文长度。否则,此字段默认为 8
。如果您选择输出原始数据或手动指定信号,则此选项可用。
注意:当接收到长度与封装或网络描述文件中指定的值不同的帧时,该帧将被丢弃。
编程用法
模块参数:MsgLength |
类型:string | character vector |
值:'0' 到 '8' |
默认值:'8'
|
向信号表中添加信号。
编程用法
无
从信号表中删除所选信号。
编程用法
无
如果您选择手动指定信号或使用数据库文件定义信号,则会出现此表。
如果您使用的是数据库文件,则文件中的数据会填充此表,您不能编辑字段。要编辑信号信息,请切换到指定的信号。
如果您已选择手动指定信号,请在此表中手动创建信号。您创建的每个信号都具有以下值:
- 名称
为信号指定说明性名称。模型中的 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 字节顺序
有关详细信息,请参阅 CAN 帧结构、字节顺序和位计数。
- 数据类型
指定信号如何解释分配的位中的数据。从下列各项中选择:
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
。对于数据库指定的信号,从数据库中读取这些设置。对于手动指定的信号,您可以指定信号的最小和最大物理值。默认情况下,这些设置不会对超过它们的信号值进行裁剪。
编程用法
模块参数: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 中推出为了支持 ARXML 文件定义,以下参数已更新:
要输出的数据格式 - 有新选项
ARXML specified signals
。
CANdb 文件 - 在模块封装中已重命名为数据库文件。其编程名称仍为
CANdbFile
。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)