主要内容

在Matlab中开始使用CAN通信

这个示例向您展示了如何使用CAN通道来发送和接收CAN消息。它使用在环回配置中连接的MathWorks虚拟CAN通道。

创建接收频道

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

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

检查通道

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

得到(rxch)
ArbitormationBusspeed:[] DataBustPeed:[] ReceiveRorcount:0 TransiTErrorCount:0初始化[] BusStatus:'n / a'transcorivername:'n / a'数据库:[] messagereceivedfcn:[] messagereceivedfcncount:1 userdata:[] vertichistory:'标准ID过滤器:允许全部|扩展ID筛选器:允许所有'MessagesSreceed:0 MessageStransMited:0运行:0设备:'Virtual 1'DeviceChannelIndex:2 DeviceserialNumber:0 DeviceVendor:'Mathworks的ProtocolMode:'CAN'MessageAvailable:0

启动通道

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

开始(RXCH);

传递信息

函数的例子generateMsgs创建可以使用消息canMessage并使用传输以不同的周期速率。它在CAN总线上生成流量,用于演示。

类型generateMsgs
函数generateMsgs() % generateMsgs为演示目的创建并传输CAN消息。% % generateMsgs周期性地以不同的%周期率发送多个CAN消息,消息数据不断变化。使用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); % Register each message on the channel at a specified periodic rate. transmitPeriodic(txCh, msgTx100, 'On', 0.500); transmitPeriodic(txCh, msgTx200, 'On', 0.250); transmitPeriodic(txCh, msgTx400, 'On', 0.125); transmitPeriodic(txCh, msgTx600, 'On', 0.050); transmitPeriodic(txCh, msgTx800, 'On', 0.025); % Start the CAN channel. start(txCh); % Run for several seconds incrementing the message data regularly. for ii = 1:50 % Increment the message data bytes. msgTx200.Data = msgTx200.Data + 1; msgTx400.Data = msgTx400.Data + 1; msgTx600.Data = msgTx600.Data + 1; msgTx800.Data = msgTx800.Data + 1; % Wait for a time period. pause(0.100); end % Stop the CAN channel. stop(txCh); end

运行generateMsgs函数来传输示例中的消息。

generateMsgs ();

收到消息

一次generateMsgs完成,使用频道接收所有可用消息收到函数。

rxmsg =接收(RXCH,INF,“OutputFormat”“时间表”);

提取用于预览的前几行收到的消息。

头(RXMSG)
ans =8×8时间表时间ID扩展名称数据远程信号长度错误  ___________ ___ ________ __________ ___________________ ______ ____________ _____ ______ 0.30321秒100假{0 x0 char} 0 x0 uint8 {1} {0 x0 struct}假假0.30321秒200假{0 x0 char} {[0 0]} {0 x0 struct} 2假假0.30322秒400假{0 x0 char} {[0 0 0 0]} 4 {0 x0 struct}假假0.30322秒600假{0 x0 char} {[0 0 0 0 0 0]} 6 {0 x0 struct}假假0.30322秒800假{0 x0 char} {[0 0 0 0 0 0 0 0]} {0 x0 struct} 8假假0.3282秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.35436秒600假{0 x0 char} {[1 1 1 1 1 1]} 6 {0 x0 struct} 800假假假0.35436秒{0x0 char} {[1 1 1 1 1 1 1]} 8 {0x0 struct} false false

停止频道

使用停止命令将频道脱机设置。

停止(rxCh);

分析接收到的消息

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

绘图(rxmsg.time,rxmsg.id,“x”)ylim([02047])xlabel(“时间戳”)ylabel(“可以标识符”

图中包含一个轴对象。axis对象包含一个类型为line的对象。