main content

在 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
网站地图