在 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.mat 和 ReceiveData.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');

为代码生成配置模型
从代码生成窗格配置 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 文件中的文件夹结构为扁平。
验证输出数据
要验证生成的代码,请使用以下步骤。
解压缩压缩的文件。
将可执行文件 (
CANCommunicationPackNGo.exe) 移至解压缩的文件夹中。运行可执行文件。
检查并绘制创建的
TransmitData.mat和ReceiveData.mat。
您现在可以通过将打包的代码 (CANCommunicationPackNGo.zip) 传输到目标硬件或仿真环境来部署包。