本示例演示如何配置CAN通道和消息,以便在事件上传输消息。它使用在环回配置中连接的MathWorks虚拟CAN通道。
由于本例是基于在虚拟网络上发送和接收CAN消息,因此结合运行CAN Explorer可以提供对代码正在做什么的更完整的理解。要运行CAN Explorer,请打开并配置它,使其使用与示例中的接收通道相同的接口。确保在开始运行示例之前启动CAN Explorer,以便在所有消息出现时看到它们。
本示例描述了CAN网络的工作流程,但演示的概念也适用于CAN FD网络。
创建CAN通道用于信息的传输和接收。
txCh = canChannel (“MathWorks”,“虚拟1”,1);rxch = canchannel(“MathWorks”,“虚拟1”2);
打开包含消息和信号定义的DBC文件,并将其附加到两个CAN通道。
db = canDatabase (“candatabaseevent.dbc”);txCh。数据base = db; rxCh.Database = db;
创建可以信息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文件的封闭访问。
清除rxChtxCh清除db