主要内容

MATLAB中基于事件的CAN通信

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

由于本例是基于在虚拟网络上发送和接收CAN消息,因此结合运行CAN Explorer可以提供对代码正在做什么的更完整的理解。要运行CAN Explorer,请打开并配置它,使其使用与示例中的接收通道相同的接口。确保在开始运行示例之前启动CAN Explorer,以便在所有消息出现时看到它们。

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

创建CAN通道

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

txCh = canChannel (“MathWorks”“虚拟1”,1);rxch = canchannel(“MathWorks”“虚拟1”2);

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

db = canDatabase (“candatabaseevent.dbc”);txCh。数据base = db; rxCh.Database = db;

创建CAN消息

创建可以信息EngineMsg使用数据库信息。

Msgenginemsg = CanMessage(DB,“EngineMsg”
msgEngineMsg = Message with properties: Message Identification ProtocolMode: 'CAN' ID: 100 Extended: 0 Name: ' engineemsg ' Data Details Timestamp: 0 Data: [0 00 00 00] Signals: [1x1 struct] Length: 8 Protocol Flags Error: 0 Remote: 0 Other Information Database: [1x1 CAN . 0]数据库用户数据:[]

配置基于事件的消息传输

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

transmitEvent (txCh msgEngineMsg,“上”);

启动基于事件的传输

启动接收和发送通道。

开始(rxCh);开始(txCh);

将新值写入数据属性并直接指向VehicleSpeed信号触发自动的基于事件的消息传输到CAN总线。

msgEngineMsg。数据= [250 100 0 0 20 0 0 0]; pause(1); msgEngineMsg.Signals.VehicleSpeed = 60; pause(1);

停止发射和接收通道。

停止(TXCH);停止(RXCH);

分析基于事件的传输行为

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

rxCh。MessagesAvailable
ans = 2

接收可用的消息。检查这些消息,并注意每个消息的数据值先前设置为数据财产。

Msgrx =接收(RXCH,INF,“OutputFormat”“时间表”
msgrx =.2×8的时间表时间ID扩展名称数据远程信号长度错误  ____________ ___ ________ _____________ ________________________ ______ ____________ _____ ______ 0.032835秒100假{‘EngineMsg} {(250 100 0 0 0 0 0)} {1 x1 struct} 8假假1.0606秒100假{‘EngineMsg} {[250 100 0 0 60 0 0 0]} 8 {1 x1 struct}假假

检查信号并注意第二个实例VehicleSpeed先前设置的数据值是否设置为VehicleSpeed信号。

信号= canSignalTimetable (msgRx)
信号=2×2的时间表时间VehicleSpeed EngineRPM  ____________ ____________ _________ 0.032835秒20 2835 1.0606秒60 2835

查看用于基于事件的传输的邮件

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

传输控制(TXCH)
定时消息无事件消息ID扩展名数据-------------------- --------------------- 100 false engineemsg 250 100 00 60 00 0

关闭频道和DBC文件

通过从工作区清除其变量,关闭对频道和DBC文件的封闭访问。

清除rxChtxCh清除db