在 matlab 中进行基于事件的 can 通信 -凯发k8网页登录
此示例说明如何配置 can 通道和报文,以便在事件发生时传输报文。它使用以环回配置形式连接的 mathworks® 虚拟 can 通道。
由于此示例是在虚拟网络上发送和接收 can 报文,因此结合运行 can explorer 可以更全面地了解代码所执行的操作。要运行 can explorer,请打开并配置它使用与示例的接收通道相同的接口。确保在开始运行示例之前启动 can explorer,以便查看发生的所有报文。
此示例说明 can 网络的工作流,但所展示的概念也适用于 can fd 网络。
创建 can 通道
创建两个分别用于报文传输和接收的 can 通道。
txch = canchannel("mathworks", "virtual 1", 1); rxch = canchannel("mathworks", "virtual 1", 2);
打开包含报文和信号定义的 dbc 文件,并将其连接到这两个 can 通道。
db = candatabase("candatabaseevent.dbc");
txch.database = db;
rxch.database = db;
创建 can 报文
使用数据库信息创建 can 报文 enginemsg
。
msgenginemsg = canmessage(db, "enginemsg")
msgenginemsg = message with properties: message identification protocolmode: 'can' id: 100 extended: 0 name: 'enginemsg' data details timestamp: 0 data: [0 0 0 0 0 0 0 0] signals: [1×1 struct] length: 8 protocol flags error: 0 remote: 0 other information database: [1×1 can.database] userdata: []
为基于事件的传输配置报文
要启用基于事件的报文传输,请使用 命令指定传输通道、要在通道上注册的报文和状态值。
transmitevent(txch, msgenginemsg, "on");
开始基于事件的传输
启动接收和发送通道。
start(rxch); start(txch);
将新值写入 data
属性,并直接写入 vehiclespeed
信号,以触发自动基于事件的传输,从而将报文传输到 can 总线上。
msgenginemsg.data = [250 100 0 0 20 0 0 0]; pause(1); msgenginemsg.signals.vehiclespeed = 60; pause(1);
停止传输和接收通道。
stop(txch); stop(rxch);
分析基于事件的传输行为
接收通道现在有两条可用报文,对应于导致两次传输的两个更新。
rxch.messagesavailable
ans = 2
接收可用的报文。检查报文,注意每个报文都有先前设置为 data
属性的数据值。
msgrx = receive(rxch, inf, "outputformat", "timetable")
msgrx=2×8 timetable
time id extended name data length signals error remote
____________ ___ ________ _____________ ________________________ ______ ____________ _____ ______
0.045004 sec 100 false {'enginemsg'} {[250 100 0 0 20 0 0 0]} 8 {1×1 struct} false false
1.0556 sec 100 false {'enginemsg'} {[250 100 0 0 60 0 0 0]} 8 {1×1 struct} false false
检查信号,注意 vehiclespeed
的第二个实例具有先前设置为 vehiclespeed
信号的数据值。
signals = cansignaltimetable(msgrx)
signals=2×2 timetable
time vehiclespeed enginerpm
____________ ____________ _________
0.045004 sec 20 2835
1.0556 sec 60 2835
查看为基于事件的传输配置的报文
要查看为自动传输而在传输通道上配置的报文,请使用 命令。
transmitconfiguration(txch)
periodic messages none event messages id extended name data --- -------- --------- --------------------- 100 false enginemsg 250 100 0 0 60 0 0 0
关闭通道和 dbc 文件
通过从工作区中清除 dbc 文件的变量,关闭对通道和 dbc 文件的访问。
clear rxch txch clear db