主要内容

在 Simulink 中使用 PackNGo 进行 CAN 通信

此示例说明如何使用 PackNGo 功能创建一个 ZIP 文件,其中包含从 CAN 通信 Simulink® 模型生成的代码。

根据您的具体应用和硬件要求调整参数和模块。

Vehicle Network Toolbox™ 提供了 Simulink 模块,用于通过 Simulink 模型在使用控制器局域网 (CAN) 格式的网络上传输和接收实时报文。此示例使用 CAN Configuration、CAN Pack、CAN Transmit、CAN Receive 和 CAN Unpack 模块来执行 CAN 总线上的数据传输。请参阅示例 Simulink CAN 通信快速入门

打开传输和接收 CAN 报文的 Simulink 模型

打开模型以传输和接收携带正弦波数据信号的 CAN 报文。该模型设计为每个时间步传输一条报文。DBC 文件定义模型中使用的报文和信号。

open_system("CANCommunicationPackNGo")

CAN Receive 模块在任何特定时间步接收到新报文时,都会生成一个函数调用触发信号。这会通知模型中的其他模块,有一条报文需要解码。信号解码和处理在Function-Call Subsystem (Simulink)内执行。

当您运行模型时,它会通过创建 TransmitData.matReceiveData.mat 文件输出数据,这些文件分别包含源数据和来自 CAN 报文的解码信号。

transmitData = load("TransmitData.mat"); 
receiveData = load("ReceiveData.mat"); 

绘制传输之前和之后的正弦波值。X 轴对应于仿真时间步,Y 轴对应于信号的值。两个图之间的相移表示信号在网络中传播时的传播延迟。

plot(transmitData.ans(1,:), transmitData.ans(2,:))
hold on
plot(receiveData.ans(1,:), receiveData.ans(2,:))
legend('transmit', 'receive'); 
xlabel('time'); 
ylabel('SignalValue'); 

Figure contains an axes object. The axes object with xlabel time, ylabel SignalValue contains 2 objects of type line. These objects represent transmit, receive.

为代码生成配置模型

从代码生成窗格配置 PackNGo ZIP 文件打包。代码生成器在编译过程中使用 packNGo 输出 ZIP 文件。

转至 Modeling > Model Configuration Parameters

选择 Code Generation 节点,并将系统目标文件设置为 grt.tlc 以作为此示例中的实时目标。

将生成的代码和所需工件打包到单一的扁平 ZIP 文件中。

set_param('CANCommunicationPackNGo', 'PostCodeGenCommand', 'packNGo(buildInfo)');

在 PackNGo 设置完成后,通过点击 Build Model 按钮 (Ctrl+B) 编译 Build 模型。

在编译过程结束时,代码生成器输出该 ZIP 文件。ZIP 文件中的文件夹结构为扁平。

验证输出数据

要验证生成的代码,请使用以下步骤。

  1. 解压缩压缩的文件。

  2. 将可执行文件 (CANCommunicationPackNGo.exe) 移至解压缩的文件夹中。

  3. 运行可执行文件。

  4. 检查并绘制创建的 TransmitData.matReceiveData.mat

您现在可以通过将打包的代码 (CANCommunicationPackNGo.zip) 传输到目标硬件或仿真环境来部署包。