主要内容

发送和接收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);

传递信息

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

类型generateMsgs
function 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 = receive(rxCh, Inf,“OutputFormat”“时间表”);rxMsg (1:25,:)
ans = 25×8时间表时间ID扩展名称数据远程信号长度错误  ___________ ___ ________ __________ ___________________ ______ ____________ _____ ______ 0.13217秒100假{0 x0 char} 0 x0 uint8 {1} {0 x0 struct}假假0.13218秒200假{0 x0 char} {[0 0]} {0 x0 struct} 2假假0.13221秒400假{0 x0 char} {[0 0 04 0]} {0 x0 struct}假假0.13222秒600假{0 x0 char} {[0 0 0 0 0 0]} 6 {0 x0 struct}假假0.13222秒800假{0 x0 char} {[0 0 0 0 0 0 0 0]} {0 x0 struct} 8假假0.15715秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.18216秒600假{0 x0 char} {[1 1 1 1 1 1]} {0 x0 struct}假假0.18216秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.20715秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.23214秒600假{0 x0 char} {[1 1 1 1 1 1]} 6 {0 x0 struct}假假0.23215秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.25715秒400假{0 x0 char}{[1 1 1 1]} 4 {0 x0 struct}假假0.25716秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.28216秒600假{0 x0 char} {[1 1 1 1 1 1]} 6 {0 x0 struct}假假0.28216秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假假0.30716秒800假{0 x0 char} {[1 1 1 1 1 1 1 1]} {0 x0 struct} 8假false 0.33224 sec 600 false {0x0 char} {[ 2 2 2 2 2 2]} 6 {0x0 struct} false false 0.33225 sec 800 false {0x0 char} {[2 2 2 2 2 2 2 2]} 8 {0x0 struct} false false 0.35716 sec 800 false {0x0 char} {[2 2 2 2 2 2 2 2]} 8 {0x0 struct} false false 0.38216 sec 200 false {0x0 char} {[ 2 2]} 2 {0x0 struct} false false 0.38217 sec 400 false {0x0 char} {[ 2 2 2 2]} 4 {0x0 struct} false false 0.38217 sec 600 false {0x0 char} {[ 2 2 2 2 2 2]} 6 {0x0 struct} false false 0.38217 sec 800 false {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 (“可以标识符”