このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
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 receivingFcnfunction 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);