打开数据库文件
打开数据库文件以访问定义。
db = canDatabase('VehicleInfo.dbc')
db =
Database with properties:
Name: 'VehicleInfo'
Path: '/tmp/Bdoc20b_1465442_10047/tpa1ee4007/ex13648766/VehicleInfo.dbc'
Nodes: {}
NodeInfo: [0x0 struct]
Messages: {'WheelSpeeds'}
MessageInfo: [1x1 struct]
Attributes: {'BusType'}
AttributeInfo: [1x1 struct]
UserData: []
创建 CAN 通道
创建可用于发送和接收信息的 CAN 通道。
txCh = canChannel('MathWorks','Virtual 1',1)
rxCh = canChannel('MathWorks','Virtual 1',2)
rxCh.Database = db;
txCh =
Channel with properties:
Device Information
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 1
DeviceSerialNumber: 0
ProtocolMode: 'CAN'
Status Information
Running: 0
MessagesAvailable: 0
MessagesReceived: 0
MessagesTransmitted: 0
InitializationAccess: 1
InitialTimestamp: [0x0 datetime]
FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'
Channel Information
BusStatus: 'N/A'
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
ReceiveErrorCount: 0
TransmitErrorCount: 0
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information
Database: []
UserData: []
rxCh =
Channel with properties:
Device Information
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 2
DeviceSerialNumber: 0
ProtocolMode: 'CAN'
Status Information
Running: 0
MessagesAvailable: 0
MessagesReceived: 0
MessagesTransmitted: 0
InitializationAccess: 1
InitialTimestamp: [0x0 datetime]
FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All'
Channel Information
BusStatus: 'N/A'
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
ReceiveErrorCount: 0
TransmitErrorCount: 0
BusSpeed: 500000
SJW: []
TSEG1: []
TSEG2: []
NumOfSamples: []
Other Information
Database: []
UserData: []
创建 CAN 报文
您可以创建要在网络上发送的 CAN 报文。
msg = canMessage(db,'WheelSpeeds')
msg =
Message with properties:
Message Identification
ProtocolMode: 'CAN'
Ihttps://www.gofarlic.com 1200
Extended: 0
Name: 'WheelSpeeds'
Data Details
Timestamp: 0
Data: [0 0 0 0 0 0 0 0]
Signals: [1x1 struct]
Length: 8
Protocol Flags
Error: 0
Remote: 0
Other Information
Database: [1x1 can.Database]
UserData: []
启动 CAN 通道
要开始使用通道进行传输和接收操作,请将它们置于在线状态。
start(rxCh)
start(txCh)
发送 CAN 报文
transmit 函数将报文发送到网络上。使用 pause 延迟传输。更新每次传输的信号数据。
msg.Signals.LF_WSpeed = 10;
transmit(txCh,msg)
pause(1);
msg.Signals.LF_WSpeed = 20;
transmit(txCh,msg)
pause(2);
msg.Signals.LF_WSpeed = 30;
transmit(txCh,msg)
pause(3);
msg.Signals.LF_WSpeed = 40;
transmit(txCh,msg)
pause(1);
msg.Signals.LF_WSpeed = 50;
transmit(txCh,msg)
接收 CAN 报文
receive 函数从网络上进行报文传输的通道中检索信息。
stop(rxCh)
stop(txCh)
msgRx = receive(rxCh,Inf,'OutputFormat','timetable')
msgRx =
5x8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________ ____ ________ _______________ ___________ ______ ____________ _____ ______
0.017411 sec 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
1.0272 sec 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
3.0324 sec 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
6.0464 sec 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
7.0482 sec 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
检查信号数据
查看收到的报文的详细信息,包括时间戳值和信号值。请注意,时间戳值是相对于 CAN 通道启动时间的值。
signalTimetable = canSignalTimetable(msgRx)
plot(signalTimetable.Time,signalTimetable.LF_WSpeed,'x')
title('Signal Data with Relative Time','FontWeight','bold')
xlabel('Relative Timestamp')
ylabel('Signal Value')
ylim([0 60])
signalTimetable =
5x4 timetable
Time LR_WSpeed RR_WSpeed RF_WSpeed LF_WSpeed
____________ _________ _________ _________ _________
0.017411 sec -100 -100 -100 10
1.0272 sec -100 -100 -100 20
3.0324 sec -100 -100 -100 30
6.0464 sec -100 -100 -100 40
7.0482 sec -100 -100 -100 50

检查 InitialTimestamp 属性
查看 CAN 接收通道的 InitialTimestamp 属性。它是日期时间值,是通道启动时的绝对时间。
rxCh.InitialTimestamp
ans =
datetime
24-Aug-2020 19:45:06
使用绝对时间戳分析数据
结合使用每个报文的相对时间戳和 InitialTimestamp 属性,将绝对时间值应用于每个报文或其中包含的信号。
msgRx.Time = msgRx.Time + rxCh.InitialTimestamp
signalTimetable = canSignalTimetable(msgRx)
figure
plot(signalTimetable.Time,signalTimetable.LF_WSpeed,'x')
title('Signal Data with Absolute Time','FontWeight','bold')
xlabel('Absolute Timestamp')
ylabel('Signal Value')
ylim([0 60])
msgRx =
5x8 timetable
Time ID Extended Name Data Length Signals Error Remote
____________________ ____ ________ _______________ ___________ ______ ____________ _____ ______
24-Aug-2020 19:45:06 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
24-Aug-2020 19:45:07 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
24-Aug-2020 19:45:09 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
24-Aug-2020 19:45:12 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
24-Aug-2020 19:45:13 1200 false {'WheelSpeeds'} {1x8 uint8} 8 {1x1 struct} false false
signalTimetable =
5x4 timetable
Time LR_WSpeed RR_WSpeed RF_WSpeed LF_WSpeed
____________________ _________ _________ _________ _________
24-Aug-2020 19:45:06 -100 -100 -100 10
24-Aug-2020 19:45:07 -100 -100 -100 20
24-Aug-2020 19:45:09 -100 -100 -100 30
24-Aug-2020 19:45:12 -100 -100 -100 40
24-Aug-2020 19:45:13 -100 -100 -100 50

相关资源:Simulink:Timer-Counter:Simulink实现一个简单的计时器/计数器...
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删