主要内容

本页采用了机器翻译。点击此处可查看英文原文。

基于 CAN 总线的基本 J1939 通信

本示例演示了如何通过 CAN 协议实现基本的 J1939 通信。

Simulink Real-Time 提供用于在控制器局域网 (CAN) 上收发参数组的 J1939 模块,适用于 Simulink 模型。此示例通过 CAN 总线进行数据传输,使用了J1939 Network ConfigurationJ1939 Node ConfigurationJ1939 CAN Transport LayerJ1939 TransmitJ1939 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);

model-j1933-can-communication.png

J1939 模块参数

该模型通过网络建立 J1939 通信。该模型配置为在 J1939 DBC 文件中定义的两个节点之间传输和接收单帧消息。

  • J1939 Network Configuration 模块选择文件 J1939.dbc。此 J1939 数据库文件定义了两个网络节点 Node1Node2、单帧消息 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);