发送和接收CAN消息

这个例子说明了如何使用CAN通道来发送和接收CAN消息。它使用连接在一个环回配置MathWorks的虚拟CAN通道。

创建接收频道

创建一个CAN信道通过指定供应商名称,设备名称和设备信道索引来接收消息。

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

检查通道

使用得到命令获得所有信道的属性和它们的当前值的更详细的信息。

得到(rxCh)
ArbitrationBusSpeed:[] DataBusSpeed:[] ReceiveErrorCount:0 TransmitErrorCount:0 InitializationAccess:1 InitialTimestamp:为0x0 DATETIME] SILENTMODE:0 TransceiverState: 'N / A' BusSpeed:500000个NumOfSamples:[] SJW:[] TSEG1:[] TSEG2:[] BUS状态软键: 'N / A' TransceiverName: 'N / A' 数据库:[] MessageReceivedFcn:[] MessageReceivedFcnCount:1的UserData:[] FilterHistory:“标准ID过滤:允许所有|扩展ID过滤器:允许所有” MessagesReceived:0 MessagesTransmitted:0运行:0设备: '虚拟1' DeviceChannelIndex:2 DeviceSerialNumber:0 DeviceVendor:“MathWorks公司的ProtocolMode: 'CAN' MessagesAvailable:0

启动频道

使用开始命令网上设置的通道。

开始(rxCh);

发送消息

这个例子功能generateMsgs创建CAN消息,并在不同的周期率将它们发送出去。它创建CAN总线用于示例交通,而不是车辆网络工具箱™的一部分。

类型generateMsgs
功能generateMsgs()%generateMsgs创建并发送CAN用于演示目的消息。%%generateMsgs周期性地不断变化的消息的数据的各种周期性%速率发送多个CAN消息。%%版权所有2008至2016年MathWorks公司创建%的邮件使用canMessage函数来发送。的%标识符,标准或扩展类型的指示,并且数据长度%给出了每个消息。msgTx100 = canMessage(100,假,0);msgTx200 = canMessage(200,假,2);msgTx400 = canMessage(400,假,4);msgTx600 = canMessage(600,假,6);msgTx800 = canMessage(800,假,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,天道酬勤,'输出格式''时间表');rxMsg(1:25,:)
ANS = 25x8时间表时间ID扩展名称数据长度的信号错误远程______________ ___ ________ __________ ___________ ______ ____________ _____ ______ 0.0001511秒100假{为0​​x0炭} {1X0 UINT8 {0为0x0结构}虚假0.00015527秒200假{为0​​x0炭} {1×2 UINT8} 2 {为0x0结构}虚假0.00016178秒400假{为0​​x0炭} {1×4 UINT8} 4 {为0x0结构}虚假0.00016861秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假0.00016993秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.025144秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.050114秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假0.050116秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.075146秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.10014秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假0.10014秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.12514秒400假{为0​​x0茶R} {1×4 UINT8} 4 {为0x0结构}虚假0.12514秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.15013秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}假假0.15013秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.17514秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.2001秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假0.20011秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.22514秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.25011秒200假{为0x0炭} {1×2 UINT8} 2 {为0x0结构}虚假0.25011秒400假{为0​​x0炭} {1×4 UINT8} 4 {为0x0结构}虚假0.25011秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假0.25011秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.27515秒800假{为0​​x0炭} {1×8 UINT8} 8 {为0x0结构}虚假0.30014秒600假{为0​​x0炭} {1X6 UINT8} 6 {为0x0结构}虚假

停止频道

使用命令将信道设置为脱机。

止动件(rxCh);

分析收到的邮件

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

图(rxMsg.Time,rxMsg.ID,'X')ylim([0 2047])xlabel(“时间戳”)ylabel(“CAN标识符”