主要内容

发送和接收CAN信息

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

创建接收通道

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

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 messagestransited: 0 Running: 0 Device: 'Virtual 1' DeviceChannelIndex: 2 DeviceSerialNumber: 0 DeviceVendor: 'MathWorks' ProtocolMode: 'CAN' MessagesAvailable: 0 . DeviceChannelIndex: 2 DeviceSerialNumber: 0 DeviceVendor: 'MathWorks' ProtocolMode: 'CAN' MessagesAvailable: 0

启动频道

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

开始(rxCh);

传递信息

函数的例子生成症创建CAN信息并以不同的周期速率传输它们。例如,它在CAN总线上创建流量,而不是车辆网络工具箱™的一部分。

类型生成症
功能生成消息()%generatemsgs创建并传输可以用于演示目的的消息。%% 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); % 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 ();

接收消息

一次生成症完成后,从通道接收所有可用的消息。

rxMsg = receive(rxCh, Inf,'输出格式'“时间表”);rxmsg(1:25,:)
ans = 25x8时间表时间ID扩展名称数据长度信号错误remote ______________ _______________________________________________013217 sec 100 false {0x0 char} {0x0 struct} false {0x0 struct} false {0x0 char} {0x0 char} {[0 0]} 2 {0x0结构}假假0.13221 sec 400 false {0x0 char} 4 {0x0 struct} false false 0.13222 sec 600 false {0x0 char} {[0 0 0 0 00]} 6 {0x0结构}假假0.13222秒800 false {0x0 char} {[0 0 0 0 0 0 0]} 8 {0x0 struct}假假0.15715秒800 false {0x0 char} {[1 1 11 1 1 1 1]} 8 {0x0结构}假假0.18216 sec 600 false {0x0 char} {[11 1 11 11]} 6 {0x0结构}假假0.18216秒800 false {0x0 char} {[11 11 1 11 11 1]} 8 {0x0结构}假假0.20715秒800 false {0x0 char} {[11 1 11 11 11 1]} 8 {0x0结构}假假0.23214秒600 false {0x0 char{[11 11 11 1 1]} 6 {0x0结构}假假0.23215 Sec 800 fears {0x0 char} {[111 11 11 11 1]} 8 {0x0结构} fALSE假0.25715秒400假{0x0 char} {[11 1 1]} 4 {0x0结构}假假0.25716秒800 false {0x0 char} {[111 1 11 11 1]} 8 {0x0 struct}假假0.28216 sec 600 false {0x0 char} {[11 1 11 1]} 6 {0x0结构}假假0.28216秒800 false {0x0 char} {[11 1 1 11 1 11 1]} 8 {0x0struct}假假0.30716 sec 800 false {0x0 char} {[11 1 11 11 11 1]} 8 {0x0结构}假假0.33224 sec 600 false {0x0 char} {[2 2 2 2 2 2]} 6{0x0结构}假假0.33225秒800 false {0x0 char} {[2 2 2 2 2 2 2]} 8 {0x0 struct}假假0.35716 sec 800 false {0x0 char} {[2 2 2 2 2 2 22]} 8 {0x0结构}假假0.38216秒200 false {0x0 char} {[2]} 2 {0x0 struct} false false 0.38217 sec 400 false {0x0 char} {[2 2 2 2]} 4 {0x0struct}假假0.38217 sec 600假{0x0 char} {[2 2 2 2 2]} 6 {0x0结构}假假0.38217秒800 fears {0x0 char} {[2 2 2 2 2 2 2 2]} 8 {0x0 struct} false false 0.40717 sec 800 false {0x0 char} {[2 2 2 2 2 2 2 2]} 8 {0x0 struct} false false 0.4322 sec 600 false {0x0 char} {[ 2 2 2 2 2 2]} 6 {0x0 struct} false false

停止通道

使用停止命令用来设置通道离线。

停止(rxCh);

分析收到的消息

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

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