Этот пример показывает вам, как использовать каналы CAN FD, чтобы передать и получить сообщения CAN FD. Это использует MathWorks Virtual CAN channels, соединенный в петлевой настройке.
Используйте canFDChannelList видеть, что все доступные каналы устройства поддерживают CAN FD.
canFDChannelList
ans =
2x6 table
Vendor Device Channel DeviceModel ProtocolMode SerialNumber
___________ ___________ _______ ___________ _____________ ____________
"MathWorks" "Virtual 1" 1 "Virtual" "CAN, CAN FD" "0"
"MathWorks" "Virtual 1" 2 "Virtual" "CAN, CAN FD" "0"
Создайте каналы CAN FD, чтобы отправить и получить сообщения путем определения деталей устройства.
txCh = canFDChannel('MathWorks', 'Virtual 1', 1) rxCh = canFDChannel('MathWorks', 'Virtual 1', 2);
txCh =
Channel with properties:
Device Information
DeviceVendor: 'MathWorks'
Device: 'Virtual 1'
DeviceChannelIndex: 1
DeviceSerialNumber: 0
ProtocolMode: 'CAN FD'
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'
Bit Timing Information
BusStatus: 'N/A'
SilentMode: 0
TransceiverName: 'N/A'
TransceiverState: 'N/A'
ReceiveErrorCount: 0
TransmitErrorCount: 0
ArbitrationBusSpeed: []
DataBusSpeed: []
Other Information
Database: []
UserData: []
Каналы CAN FD требуют установки скорости шины прежде, чем идти онлайн. И арбитраж и скорости фазы данных сконфигурированы.
configBusSpeed(txCh, 500000, 1000000); configBusSpeed(rxCh, 500000, 1000000);
Файлы базы данных CAN задают сообщение CAN FD.
db = canDatabase('CANFDExample.dbc')
rxCh.Database = db;
db =
Database with properties:
Name: 'CANFDExample'
Path: '/tmp/BR2021ad_1584584_202060/publish_examples0/tp21235eaf/ex36915890/CANFDExample.dbc'
Nodes: {}
NodeInfo: [0x0 struct]
Messages: {'CANFDMessage'}
MessageInfo: [1x1 struct]
Attributes: {2x1 cell}
AttributeInfo: [2x1 struct]
UserData: []
Используйте start команда, чтобы установить каналы онлайн.
start(txCh); start(rxCh);
Сообщения CAN FD создаются также с помощью canFDMessage.
msg1 = canFDMessage(500, false, 12) msg2 = canFDMessage(1000, false, 24); msg3 = canFDMessage(1500, false, 64); % To engage the bit rate switch capability of CAN FD, set the |BRS| property of the messages. msg1.BRS = true; msg2.BRS = true; msg3.BRS = true; % CAN FD messages can also be created using a database file. The database defines if a message is CAN or CAN FD. BRS status is also taken from the database. msg4 = canFDMessage(db, 'CANFDMessage')
msg1 =
Message with properties:
Message Identification
ProtocolMode: 'CAN FD'
ID: 500
Extended: 0
Name: ''
Data Details
Timestamp: 0
Data: [0 0 0 0 0 0 0 0 0 0 0 0]
Signals: []
Length: 12
DLC: 9
Protocol Flags
BRS: 0
ESI: 0
Error: 0
Other Information
Database: []
UserData: []
msg4 =
Message with properties:
Message Identification
ProtocolMode: 'CAN FD'
ID: 1
Extended: 0
Name: 'CANFDMessage'
Data Details
Timestamp: 0
Data: [1x48 uint8]
Signals: []
Length: 48
DLC: 14
Protocol Flags
BRS: 1
ESI: 0
Error: 0
Other Information
Database: [1x1 can.Database]
UserData: []
Используйте канал передачи, чтобы отправить сообщения.
transmit(txCh, [msg1 msg2 msg3 msg4])
Получите сообщения от канала. Обратите внимание на то, что тип возврата для каналов CAN FD является расписанием, содержа информацию, характерную для CAN FD.
rxMsg = receive(rxCh, Inf)
rxMsg =
4x12 timetable
Time ID Extended Name ProtocolMode Data Length DLC Signals Error Remote BRS ESI
___________ ____ ________ ________________ ____________ ___________________________________________________ ______ ___ ____________ _____ ______ _____ _____
0.12818 sec 500 false {0x0 char } {'CAN FD'} {[ 0 0 0 0 0 0 0 0 0 0 0 0]} 12 9 {0x0 struct} false false true false
0.12818 sec 1000 false {0x0 char } {'CAN FD'} {[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]} 24 12 {0x0 struct} false false true false
0.12819 sec 1500 false {0x0 char } {'CAN FD'} {1x64 uint8 } 64 15 {0x0 struct} false false true false
0.12819 sec 1 false {'CANFDMessage'} {'CAN FD'} {1x48 uint8 } 48 14 {1x1 struct} false false true false
Используйте stop команда, чтобы установить каналы оффлайн.
stop(txCh); stop(rxCh);