主要内容

开始在MATLAB中进行CAN通信

此示例演示如何使用CAN通道发送和接收CAN消息。它使用环回配置中连接的MathWorks虚拟CAN通道。

创建接收通道

使用创建CAN通道canChannel通过指定供应商名称、设备名称和设备通道索引来接收消息。

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

检查通道

使用得到命令以获取有关所有通道特性及其当前值的更详细信息。

get (rxCh)
ArbitrationBusSpeed: [] DataBusSpeed: [] ReceiveErrorCount: 0 TransmitErrorCount: 0 InitializationAccess: 1 InitialTimestamp: [0 x0 datetime] SilentMode: 0 TransceiverState:“N / A”BusSpeed: 500000 NumOfSamples: [] SJW: [] TSEG1: [] TSEG2: [] BusStatus:“N / A”TransceiverName:“N / A”数据库:[]MessageReceivedFcn: [] MessageReceivedFcnCount:1 UserData: [] FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All' MessagesReceived: 0 messagesstranscommitted: 0 Running: 0 Device: 'Virtual 1' DeviceChannelIndex: 2 DeviceSerialNumber: 0 DeviceVendor: 'MathWorks' ProtocolMode: 'CAN' MessagesAvailable: 0 .使用实例

开播

使用开始命令,设置通道在线。

开始(rxCh);

传送信息

示例函数发电机使用以下命令创建CAN消息canMessage并使用传输以不同的周期率。它在CAN总线上生成通信量,用于演示。

类型发电机
函数generateMsgs()%generateMsgs为演示目的创建和传输CAN消息。%%generateMsgs以不同的%周期速率定期传输多条CAN消息,消息数据不断变化。%%版权所有2008-2016 MathWorks,Inc.使用canMessage功能创建要发送的消息。为每条消息提供%标识符、标准或扩展类型的指示以及数据%长度。msgTx100=canMessage(100,false,0);msgTx200=canMessage(200,false,2);msgTx400=canMessage(400,false,4);msgTx600=canMessage(600,false,6);msgTx800=canMessage(800,false,8);%创建要在其上传输的CAN通道。txCh=canChannel('MathWorks','Virtual 1',1);%以指定的周期速率在通道上注册每条消息。传输周期(txCh,msgTx100,'On',0.500);传输周期(txCh,msgTx200,'On',0.250);传输周期(txCh,msgTx400,'On',0.125);传输周期(txCh,msgTx600,'On',0.050);传输周期(txCh,msgTx800,'On',0.025);%启动CAN通道。启动(txCh);%运行几秒钟,定期递增消息数据。对于ii=1:50%,增加消息数据字节。msgTx200.Data=msgTx200.Data+1;msgTx400.Data=msgTx400.Data+1;数据=MSX600.GTX61;msgTx800.Data=msgTx800.Data+1;%等待一段时间。暂停(0.100);结束%停止CAN通道。停止(txCh);终止

运行发电机函数来传输示例的消息。

generateMsgs();

接收消息

一旦发电机完成后,使用接收作用

rxMsg = receive(rxCh, Inf,“输出格式”,“时间表”);

使用提取接收到的消息的前几行以供预览。

头(rxMsg)
ans=8×8的时间表(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU0 char}{1x0 uint8}0{0x0 struct}false false 0.30321秒200 false{0x0 char}{[0]}2{0x0 struct}false false 0.30322秒400 false{0x0 char}{[0 0 0]}4{0x0 struct}false false 0.30322秒600 false{0x0 char}{[0 0 0 0 0 0 0]}6{0x0结构}false 0.30322秒800 false{0x0 char}{[0 0 0 0 0 0 0 0 0 0 0 0]}8{0x0结构}false 0.3282秒800 false{0x0 char}{[1 1 1 1 1 1 1 1]}8{0x0结构}false 0.35436秒600 false}{0x0 char}{[1]}8{0x0 struct}false false

停止通道

使用停止命令,使通道脱机。

停止(rxCh);

分析收到的消息

MATLAB为CAN消息的分析提供了强大的环境情节命令可以创建带有消息时间戳和标识符的散点图,以提供特定消息在网络上发生的概述。

情节(rxMsg。时间,rxMsg。ID,“x”) ylim([0 2047])“时间戳”) ylabel (“标识符”)

图中包含一个axes对象。axes对象包含一个line类型的对象。