このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
MATLAB での CAN FD 通信入門
この例では、CAN FD チャネルを使用して CAN FD メッセージを送受信する方法を説明します。ループバック構成で接続されている MathWorks® バーチャル CAN FD チャネルを使用します。
利用可能なCAN FDチャネルを表示
CAN FD をサポートする利用可能なすべてのデバイス チャネルを表示するには、canFDChannelList
を使用します。
canFDChannelList
ans=2×6 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"
送信チャネルと受信チャネルを作成する
デバイスの詳細を指定した canFDChannel
を使用して、メッセージを送受信するための CAN FD チャネルを作成します。
txCh = canFDChannel("MathWorks","Virtual 1",1)
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: [0×0 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: 500000 DataBusSpeed: 2000000 Other Information Database: [] UserData: []
rxCh = canFDChannel("MathWorks","Virtual 1", 2);
バス速度の設定
CAN FD チャネルでは、オンラインになる前にバス速度を設定する必要があります。アービトレーション フェーズ速度とデータ フェーズ速度は両方とも configBusSpeed
を使用して構成されます。
configBusSpeed(txCh, 500000, 1000000); configBusSpeed(rxCh, 500000, 1000000);
DBCファイルを開く
canDatabase
を使用して、CAN FD メッセージと信号の定義が含まれるデータベース ファイルを開きます。
db = canDatabase("CANFDExample.dbc")
db = Database with properties: Name: 'CANFDExample' Path: '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex36915890/CANFDExample.dbc' UTF8_File: '/tmp/Bdoc25a_2864802_1974203/tp6f7be44e/vnt-ex36915890/CANFDExample.dbc' Nodes: {} NodeInfo: [0×0 struct] Messages: {'CANFDMessage'} MessageInfo: [1×1 struct] Attributes: {2×1 cell} AttributeInfo: [2×1 struct] UserData: []
データベースを受信チャネルに直接接続します。DBC ファイルの定義は、受信メッセージと信号の復号化に自動的に適用されます。
rxCh.Database = db;
チャネルを開始する
チャネルをオンラインに設定するには、start
コマンドを使用します。
start(txCh); start(rxCh);
CAN FDメッセージを作成する
canFDMessage
関数を使用して CAN FD メッセージを作成します。
msg1 = canFDMessage(500, false, 12)
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: []
msg2 = canFDMessage(1000, false, 24); msg3 = canFDMessage(1500, false, 64);
CAN FD のビット レート切り換え機能を有効にするには、メッセージの BRS
プロパティを設定します。
msg1.BRS = true; msg2.BRS = true; msg3.BRS = true;
CAN FD メッセージは、データベースを使用して作成することもできます。データベースは、メッセージが CAN か CAN FD か、および BRS ステータスを定義します。
msg4 = canFDMessage(db,"CANFDMessage")
msg4 = Message with properties: Message Identification ProtocolMode: 'CAN FD' ID: 1 Extended: 0 Name: 'CANFDMessage' Data Details Timestamp: 0 Data: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] Signals: [] Length: 48 DLC: 14 Protocol Flags BRS: 1 ESI: 0 Error: 0 Other Information Database: [1×1 can.Database] UserData: []
メッセージを送信する
作成したメッセージを送信チャネルから送信するには、transmit
を使用します。
transmit(txCh, [msg1 msg2 msg3 msg4])
メッセージの受信
receive
関数を使用して受信チャネルからメッセージを受信します。CAN FD チャネルのデフォルトの戻りタイプは、受信した CAN FD メッセージに固有の情報を含む timetable です。
rxMsg = receive(rxCh, Inf)
rxMsg=4×12 timetable
Time ID Extended Name ProtocolMode Data Length DLC Signals Error Remote BRS ESI
____________ ____ ________ ________________ ____________ ___________________________________________________________________________________________________________________________________ ______ ___ ____________ _____ ______ _____ _____
0.099466 sec 500 false {0×0 char } {'CAN FD'} {[ 0 0 0 0 0 0 0 0 0 0 0 0]} 12 9 {0×0 struct} false false true false
0.099467 sec 1000 false {0×0 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 {0×0 struct} false false true false
0.099468 sec 1500 false {0×0 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]} 64 15 {0×0 struct} false false true false
0.099468 sec 1 false {'CANFDMessage'} {'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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]} 48 14 {1×1 struct} false false true false
チャネルを停止する
チャネルをオフラインに設定するには、stop
コマンドを使用します。
stop(txCh); stop(rxCh);
DBCファイルを閉じる
ワークスペースから変数をクリアして、DBC ファイルへのアクセスを閉じます。
clear db