主要内容

MATLAB中基于事件的CAN通信

此示例演示如何配置CAN通道和消息,以便在事件发生时传输消息。它使用以环回配置连接的MathWorks虚拟CAN通道。

由于此示例基于在虚拟网络上发送和接收CAN消息,因此结合运行CAN Explorer可以更全面地了解代码的作用。要运行CAN Explorer,请打开并将其配置为使用与示例的接收通道相同的界面。确保在开始运行示例之前启动CAN Explorer,以便在出现所有消息时查看它们。

本示例描述了CAN网络的工作流程,但所演示的概念也适用于CAN FD网络。

创建CAN通道

创建用于信息传输和接收的CAN通道。

txCh=canChannel(“数学作品”,“虚拟1”,1);rxCh=canChannel(“数学作品”,“虚拟1”, 2);

打开包含消息和信号定义的DBC文件,并将其附加到两个CAN通道。

db=canDatabase(“CANDatabaseEvent.dbc”); txCh.Database=db;rxCh.Database=db;

创建CAN消息

创建CAN消息引擎使用数据库信息。

msgEngineMsg=canMessage(db,“EngineMsg”)
msgEngineMsg=具有属性的消息:消息标识协议模式:“CAN”ID:100扩展:0名称:“EngineMsg”数据详细信息时间戳:0数据:[0 0 0 0]信号:[1x1结构]长度:8协议标志错误:0远程:0其他信息数据库:[1x1 CAN.Database]用户数据:[]

为基于事件的传输配置消息

要启用基于事件的消息传输,请使用传送器指定传输通道、要在通道上注册的消息和状态值的命令。

变速器(txCh、MSGENGENEMG、,“关于”);

启动基于事件的传输

启动接收和发送通道。

启动(rxCh);启动(txCh);

将新值写入数据财产,并直接向车速触发基于事件的信息自动传输至CAN总线的信号。

msgenginemg.Data=[250 100 0 0 20 0 0 0];暂停(1);msgenginemg.Signals.VehicleSpeed=60;暂停(1);

停止发送和接收通道。

停止(txCh);停止(rxCh);

分析基于事件的传输行为

接收通道现在有两条消息可用,对应于导致两次传输的两次更新。

rxCh.messagesavaailable
ans=2

接收可用的消息。检查消息,并注意每个消息的数据值都是先前设置的数据所有物

msgRx=接收(rxCh,Inf,“输出格式”,“时间表”)
msgRx=2×8时刻表UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU uuuuuuuuuuuuuuuuuuuuu0.032835秒100假{'EngineMsg'}{[25010002000]}8{1x1结构}假假1.0606秒100假{'EngineMsg'}{[2501000600]}8{1x1结构}假假

检查信号,并注意车速将数据值先前设置为车速信号

信号=信号时刻表(msgRx)
信号=2×2时间表计时车速度引擎PM uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

查看为基于事件的传输配置的消息

要查看传输通道上配置的自动传输消息,请使用传输配置命令

传输配置(txCh)
定期消息无事件消息ID扩展名称数据--------------------------------------------------100错误引擎MSG 250 100 0 0 60 0 0 0 0

关闭通道和DBC文件

通过从工作区中清除通道和DBC文件的变量,关闭对它们的访问。

清楚的rxChtxCh清楚的分贝