主要内容

基于事件的CAN通信MATLAB

此示例向您展示如何配置CAN通道和消息,以便在事件上传输消息。它使用MathWorks®虚拟CAN通道连接在环回配置。

由于本例基于在虚拟网络上发送和接收CAN消息,因此同时运行CAN Explorer可以更全面地理解代码的操作。要运行CAN资源管理器,请打开并配置它以使用与示例的接收通道相同的接口。确保在开始运行示例之前启动CAN Explorer,以便在出现消息时看到所有消息。

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

创建CAN通道

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

txCh = canChannel(“MathWorks”“虚拟1”1);rxCh = canChannel(“MathWorks”“虚拟1”2);

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

数据库:“CANDatabaseEvent.dbc”);txCh。数据base = 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 00 00 00 00 0] Signals: [1×1 struct] Length: 8 Protocol Flags Error: 0 Remote: 0 Other Information Database: [1×1 CAN .]数据库]UserData: []

配置基于事件传输的消息

要启用消息进行基于事件的传输,请使用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 = receive(rxCh, Inf,“OutputFormat”“时间表”
msgRx =2×8的时间表时间ID扩展名称数据远程信号长度错误  ____________ ___ ________ _____________ ________________________ ______ ____________ _____ ______ 0.045004秒100假{‘EngineMsg}{(250 100 0 0 0 0 0)} 8{1×1 struct}假假1.0556秒100假{‘EngineMsg}{[250 100 0 0 60 0 0 0]} 8{1×1 struct}假假

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

信号= csignaltimeline (msgRx)
信号=2×2的时间表时间VehicleSpeed EngineRPM  ____________ ____________ _________ 0.045004秒20 2835 1.0556秒60 2835

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

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

transmitConfiguration (txCh)
周期消息无事件消息ID扩展名数据-------------------- --------------------- 100 false engineemsg 250 100 00 60 00 00

关闭通道和DBC-File

通过从工作空间清除通道和dbc文件的变量来关闭对它们的访问。

清晰的rxChtxCh清晰的db
Baidu
map