基于事件的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