このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
SocketCAN デバイス入門
この例では、Linux® ターミナルで SocketCAN デバイスを識別、セットアップ、構成し、Vehicle Network Toolbox ™ を使用して MATLAB ® からそれらにアクセスする方法を示します。
SocketCAN デバイスを構成するには、システム (sudo) 権限が必要です。この例では、ループバック モードで接続された 2 つの SocketCAN 対応 CAN/CAN FD デバイス (can0
と can1
) を使用します。
Linuxシステム上のSocketCANデバイスを識別する
CAN/CAN FD に関連付けられた SocketCAN ネイティブ インターフェイスの場合、ハードウェア デバイスはそれらを Linux ネットワーク層で can0
、can1
、can2 などとして登録します。SocketCAN デバイスを Linux システムに接続すると、Linux カーネルは対応するデバイス ドライバーをロードし、Linux ネットワーク層はデバイスに対応する CAN ネットワーク インターフェイスを作成します (例: can0
)。
システムで使用可能な SocketCAN/CAN FD 対応ハードウェア デバイスのリストを表示するには、Linux ターミナルで次のコマンドを実行します。
ip -details link show type can
システムでサポートされているすべてのハードウェア CAN/CAN FD デバイスが一覧表示されます。
% ip -details link show type can 7: can0: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 10 link/can promiscuity 0 minmtu 0 maxmtu 0 can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0 bitrate 500000 sample-point 0.875 tq 12 prop-seg 69 phase-seg1 70 phase-seg2 20 sjw 1 pcan_usb_pro_fd: tseg1 1..256 tseg2 1..128 sjw 1..128 brp 1..1024 brp-inc 1 pcan_usb_pro_fd: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..1024 dbrp-inc 1 clock 80000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 8: can1: <NOARP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 10 link/can promiscuity 0 minmtu 0 maxmtu 0 can state STOPPED (berr-counter tx 0 rx 0) restart-ms 0 bitrate 500000 sample-point 0.875 tq 12 prop-seg 69 phase-seg1 70 phase-seg2 20 sjw 1 pcan_usb_pro_fd: tseg1 1..256 tseg2 1..128 sjw 1..128 brp 1..1024 brp-inc 1 pcan_usb_pro_fd: dtseg1 1..32 dtseg2 1..16 dsjw 1..16 dbrp 1..1024 dbrp-inc 1 clock 80000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
接続されているネットワークデバイスの数と CAN デバイスの種類によって、出力が異なる場合があります。
接続されたデバイスが表示されない場合は、デバイスが Linux ネットワーク層で検出されていない可能性があり、ベンダーのデバイス固有の CAN モジュールをロードする必要があります。modprobe
コマンドを使用して、ベンダー固有の CAN モジュールをロードできます。たとえば、Kvaser CAN モジュールをロードするには、% sudo modprobe kvaser_usb
を実行します。それでも接続されている CAN デバイスを一覧表示できない場合は、デバイス ベンダーに問い合わせてください。
SocketCAN デバイスの設定
SocketCAN で使用する CAN デバイスを特定したら、要件に基づいてそれらのデバイスを構成できます。標準の CAN および CAN FD デバイスのセットアップをここに示します。
CAN 通信用に can0
デバイスを設定するには:
sudo ip link set can0 type can bitrate 500000
CAN FD通信用にcan1
デバイスを設定するには:
sudo ip link set can1 type can bitrate 500000 sample-point 0.75 dbitrate 4000000 dsample-point 0.8 fd on
デバイスの構成中に、SocketCAN - Controller Area Network ページに表示される他のパラメータを変更することもできます。
仮想SocketCANデバイスを作成する(オプション)
SocketCAN を使用して仮想チャネルを作成することもできます。仮想 SocketCAN チャネル vcan0
を作成します。
sudo ip link add dev vcan0 type vcan
CAN/CAN FD サポートに使用可能な SocketCAN 仮想インターフェースを可視化するには、次のコマンドを実行します。
ip -details link show type vcan
構成されたデバイスをオンラインにする
MATLAB および Simulink ® は、適切に構成されオンラインになっている SocketCAN デバイスのみをリストできます。構成されたハードウェア デバイスをオンラインにします。
sudo ip link set up can0 sudo ip link set up can1
構成された仮想デバイスをオンラインにします。
sudo ip link set up vcan0
SocketCANデバイスとの通信
SocketCAN デバイスがセットアップされ、オンラインになると、他の CAN/CAN FD 対応デバイスと同じように、MATLAB および Simulink を使用して CAN 通信を行うことができます。
正しく構成された SocketCAN デバイスを可視化するには、MATLAB で canChannelList
を呼び出します。
canChannelList
ans=5×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"
"SocketCAN" "can0" NaN "" "CAN" "0"
"SocketCAN" "can1" NaN "" "CAN, CAN FD" "0"
"SocketCAN" "vcan0" NaN "Virtual" "CAN, CAN FD" "0"
canFDChannelList
ans=4×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"
"SocketCAN" "can1" NaN "" "CAN, CAN FD" "0"
"SocketCAN" "vcan0" NaN "Virtual" "CAN, CAN FD" "0"
ベンダー名を SocketCAN
、デバイス名を can0
および can1
として指定し、canChannel
を使用して CAN メッセージを送受信する CAN チャネルを作成します。
ch1 = canChannel('SocketCAN','can0')
ch1 = Channel with properties: Device Information DeviceVendor: 'SocketCAN' Device: 'can0' ProtocolMode: 'CAN' Status Information Running: 0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitialTimestamp: [0×0 datetime] FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All' Channel Information BusStatus: 'ERROR-ACTIVE' ReceiveErrorCount: 0 TransmitErrorCount: 0 BusSpeed: 500000 Other Information Database: [] UserData: []
ch2 = canChannel('SocketCAN','can1')
ch2 = Channel with properties: Device Information DeviceVendor: 'SocketCAN' Device: 'can1' ProtocolMode: 'CAN' Status Information Running: 0 MessagesAvailable: 0 MessagesReceived: 0 MessagesTransmitted: 0 InitialTimestamp: [0×0 datetime] FilterHistory: 'Standard ID Filter: Allow All | Extended ID Filter: Allow All' Channel Information BusStatus: 'ERROR-ACTIVE' ReceiveErrorCount: 0 TransmitErrorCount: 0 BusSpeed: 500000 Other Information Database: [] UserData: []
canMessage
を使用して CAN メッセージを作成し、送信します。
message = canMessage(250, false, 8); message.Data = ([45 213 53 1 3 213 123 43]);
チャネルをオンラインに設定するには、start
コマンドを使用します。
start(ch1); start(ch2);
この場合、can0
および can1
ハードウェア デバイスはループバック モードで接続され、transmit
関数を使用して ch1
で送信します。
transmit(ch1,message);
receive
関数を使用して、チャネルから利用可能なメッセージを受信します。
rxMsg = receive(ch2,Inf,"OutputFormat","timetable"); head(rxMsg)
Time ID Extended Name Data Length Signals Error Remote __________ ___ ________ __________ ____________________________ ______ ____________ _____ ______ 2.2614 sec 250 false {0×0 char} {[45 213 53 1 3 213 123 43]} 8 {0×0 struct} false false
チャネルをオフラインに設定します。
stop(ch1); stop(ch2);
オンラインデバイスを停止する
SocketCAN デバイスの使用が完了したら、Linux ターミナルでオンライン デバイスを停止します。
sudo ip link set down can0 sudo ip link set down can1 sudo ip link set down vcan0
MATLAB の実行中に、CAN デバイスのパラメータを変更する場合は、デバイスを停止し、パラメータを変更してから、デバイスを再度オンラインにします。これにより、CAN デバイスもリセットされます。