このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
CAN 通信におけるメッセージ受信コールバック関数の使用
この例では、コールバック関数を使用して CAN チャネルから受信したメッセージを処理する方法を示します。ループバック構成で接続されている MathWorks® バーチャル CAN チャネルを使用します。この例では、CAN ネットワークのワークフローについて説明していますが、ここで説明する概念は CAN FD ネットワークにも適用されます。
受信チャネルを作成する
ベンダー名、デバイス名、デバイス チャネル インデックスを指定して、canChannel
を使用して CAN チャネルを作成し、メッセージを受信します。
rxCh = canChannel("MathWorks", "Virtual 1", 2)
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: [0×0 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.MessageReceivedFcn = @receivingFcn;
メッセージ受信数を設定する
コールバック関数がトリガーされる前にチャネルで必要なメッセージの数を指定します。
rxCh.MessageReceivedFcnCount = 30;
コールバック関数を実装する
サンプルのコールバック関数は、チャネルから利用可能なすべてのメッセージを受信し、実行ごとに CAN 識別子をタイムスタンプに対してプロットします。
type receivingFcn
function receivingFcn(rxCh) % RECEIVINGFCN A CAN channel message receive callback function. % % This is a callback function used to receive CAN message. It receives % messages from the channel RXCH and plots the result. % % Copyright 2009-2016 The MathWorks, Inc. % Receive all available messages. rxMsg = receive(rxCh, Inf, 'OutputFormat', 'timetable'); % Plot the signal values against their message timestamps. plot(rxMsg.Time, rxMsg.ID, 'x'); ylim([0 2047]) xlabel('Timestamp'); ylabel('CAN Identifier'); hold all; end
チャネルの開始
チャネルをオンラインに設定するには、start
コマンドを使用します。
start(rxCh);
コールバック関数を実行する
関数 generateMsgs
は CAN メッセージを作成し、さまざまな周期で送信して CAN バス上にトラフィックを作成します。メッセージが送信されると、プロパティ MessageReceivedFcnCount
で指定されたしきい値が満たされるたびにコールバック関数が実行されます。
generateMsgs();
残りのメッセージを調べる
残りのメッセージの数を確認するには、チャネルの MessagesAvailable
プロパティを表示します。利用可能なメッセージ数が指定されたしきい値を下回っているため、もう一度コールバックをトリガーするには、さらにメッセージが必要です。
rxCh.MessagesAvailable
ans = 11
チャネルの停止
チャネルをオフラインに設定するには、stop
コマンドを使用します。
stop(rxCh);