基于 CAN 总线的基本 J1939 通信
本示例演示了如何通过 CAN 协议实现基本的 J1939 通信。
Simulink Real-Time 提供用于在控制器局域网 (CAN) 上收发参数组的 J1939 模块,适用于 Simulink 模型。此示例通过 CAN 总线进行数据传输,使用了J1939 Network Configuration、J1939 Node Configuration、J1939 CAN Transport Layer、J1939 Transmit和J1939 Receive模块。通信在目标计算机上的 Speedgoat IO612 模块上进行。
开放模型
连接到目标计算机。识别目标计算机的系统目标文件 (STF)。打开模型。为模型配置 STF。
tg = slrealtime;
connect(tg);
modelSTF = getSTFName(tg);
model = 'slrt_ex_j1939_can_communication';
open_system(model);Warning: Unrecognized function or variable 'CloneDetectionUI.internal.CloneDetectionPerspective.register'.
set_param(model,"SystemTargetFile",modelSTF);
J1939 模块参数
该模型通过网络建立 J1939 通信。该模型配置为在 J1939 DBC 文件中定义的两个节点之间传输和接收单帧消息。
J1939 Network Configuration 模块选择文件
J1939.dbc。此 J1939 数据库文件定义了两个网络节点Node1和Node2、单帧消息VehicleDataSingle以及多帧消息VehicleDataMulti。J1939 CAN Transport Layer 模块将设备设置为 Speedgoat IO612 模块。传输层配置为通过指定通道在 CAN 总线上传输 J1939 消息。
Simulink 源模块(如 Counter Limited 模块和 Constant 模块)连接到J1939 Transmit模块的输入端。当触发器端口被启用时,J1939 Transmit 模块会在每个时间步长将数据排入队列以供传输。在此示例中,周期性触发子系统每隔 50 毫秒发送一个高电平脉冲。
J1939 Receive 模块接收通过网络传输的消息。
构建、加载并启动应用程序
从模型构建实时应用程序。加载并运行应用程序。
start(tg) 函数已被注释掉。要启动该应用程序,PCI 总线上必须配备 Speedgoat IO612 模块。
evalc('slbuild(model)'); load(tg,model); % start(tg);
停止应用程序并关闭模型
停止实时应用程序。关闭模型。
stop(tg) 函数被注释掉,因为上方的 start(tg) 函数已被注释掉。
% stop(tg);
bdclose(model);