主要内容

在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×0 datetime] SilentMode: 0 TransceiverState:“N / A”BusSpeed: 500000 NumOfSamples: [] SJW: [] TSEG1: [] TSEG2: [] BusStatus:“N / A”TransceiverName:“N / A”数据库:[]MessageReceivedFcn: [] MessageReceivedFcnCount: 1用户数据:[]FilterHistory:“标准ID过滤器:允许所有|扩展ID过滤器:允许所有的MessagesReceived: 0 MessagesTransmitted: 0运行:0设备:'Virtual 1' DeviceChannelIndex: 2 DeviceSerialNumber: 0 DeviceVendor: 'MathWorks' ProtocolMode: 'CAN' MessagesAvailable: 0

启动通道

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

开始(rxCh);

传递信息

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

类型generateMsgs
generateMsgs() % generateMsgs创建和传输CAN消息用于演示。% % generateMsgs周期性地以不同的%周期速率传输多条CAN消息,并改变消息数据。版权所有The 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); % 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 = receive(rxCh, Inf,“OutputFormat”“时间表”);

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

头(rxMsg)
时间ID扩展名称数据远程信号长度错误  ___________ ___ ________ __________ ___________________ ______ ____________ _____ ______ 0.31722秒100假{0×0字符}{1×0 uint8} 0{0×0 struct}假假0.31723秒200假{0×0字符}{[0 0]}{0×0 struct} 2假假0.31723秒400假{0×0字符}{[0 0 0 0]}4{0×0 struct}假假0.31723秒600假{0×0字符}{[0 0 0 0 0 0]}6{0×0 struct}假假0.31723秒800假{0×0字符}{[0 0 0 0 0 0 0 0]}{0×8 0Struct} false false 0.34689 SEC 800 false {0×0 char} {[1 1 1 1 1 1 1 1 1 1]} 8 {0×0 Struct} false false 0.37728 SEC 600 false {0×0 char} {[1 1 1 1 1 1 1 1 1]} 6 {0×0 Struct} false false 0.37729 SEC 800 false {0×0 char} {[1 1 1 1 1 1 1 1 1 1]} 8 {0×0 Struct} false false

停止通道

使用停止命令将通道设置为离线状态。

停止(rxCh);

分析收到的消息

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

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

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