AGV・パワーエレクトロニクス・産業用モータ技術・制御技術を駆使した受託OEM ODM企業

トピックス

TOPICS

ABH3をCANで動かそう!②

2021.08.31

LinuxによるABH3とのCAN通信について

Linux系のOSによるCAN通信では、ハードウェア・メーカが独自に開発しているドライバソフトと、Volkswagen Research社がLinuxカーネルに提供しているオープンソースのCANドライバとネットワークスタックのセットがありますが、本稿では後者のソフトウェアであるSocketCANによるインストール手順について解説します。

SocketCANでは、複数のアプリケーションが1つのCANデバイスに同時にアクセスすることができ、また、1つのアプリケーションが複数のCANネットワークに並行してアクセスすることも可能です。SocketCANのコンセプトは、Linux系OSにあるインターネット・プロトコルへのアクセス用APIであるのバークレー・ソケットAPIを拡張したものになっています。そのため、CANバスとの通信は、ソケットを用い、インターネット・プロトコルのプログラミングと同様に行います。

CANインターフェースが正常に認識されると、ifconfig命令やip命令により以下のようにイーサネットポートと同様に確認を行う事ができます。

 

 

ifconfigの例(can0がCANインターフェース)

❘  can0: flags=193<UP,RUNNING,NOARP>  mtu 16
❘     unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (不明なネット)
❘     RX packets 0  bytes 0 (0.0 B)
❘     RX errors 0  dropped 0  overruns 0  frame 0
❘     TX packets 0  bytes 0 (0.0 B)
❘     TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
❘  eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
❘     inet 192.168.xx.xxx  netmask 255.255.255.0  broadcast 192.168.xx.xxx
❘     inet6 xxxx::xxxx:xxxx:xxxx:xxxx  prefixlen 64  scopeid 0x20<link>
❘     ether xx:xx:xx:xx:xx:xx  txqueuelen 1000  (イーサネット)
❘     RX packets 11397  bytes 13943551 (13.9 MB)
❘     RX errors 0  dropped 5  overruns 0  frame 0
❘     TX packets 6351  bytes 517830 (517.8 KB)
❘     TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
❘     device interrupt 20  memory 0xf7c00000-f7c20000
❘  lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
❘     inet 127.0.0.1  netmask 255.0.0.0
❘     inet6 ::1  prefixlen 128  scopeid 0x10<host>
❘     loop  txqueuelen 1000  (ローカルループバック)
❘     RX packets 410  bytes 39194 (39.1 KB)
❘     RX errors 0  dropped 0  overruns 0  frame 0
❘     TX packets 410  bytes 39194 (39.1 KB)
❘     TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

 

※ SocketCANの対応については、各メーカのCANインターフェース仕様を参照ください。

 

 

SocketCANドライバを使用し、CAN-Bus通信に対し送信・受信等の動作確認を行うための便利なオープンソースのユーティリティ・ソフトウェアとしてcan-utilsがあります。このソフトウェアは以下のGitHubよりダウンロード(あるいはクローン)し、コンパイルすることで使用できます。

https://github.com/linux-can/can-utils

https://github.com/linux-can/can-utils.git

 

弊社では、ABH3とのCAN通信用サンプルソフトを用意していますが、上記SocketCANドライバを使用したものになっており、can-utilsの一部ソースを使用しています。ソフトウェアは弊社ホームページ、あるいは以下のGitHubよりダウンロードできます。

https://github.com/wacogiken/abh3_CAN-Bus_Linux

https://github.com/wacogiken/abh3_CAN-Bus_Linux.git

 

 

 

ダウンロードしたフォルダに、can-utilsから以下の2個のファイルと1個のフォルダをコピーしてコンパイルしてください。

lib.c / lib.h / include(フォルダ以下全て)

 

 

インストール例(太字はコマンド)

❘  $ git clone https://github.com/linux-can/can-utils.git
❘  Cloning into ‘can-utils’…
❘  remote: Enumerating objects: 2768, done.
❘  remote: Counting objects: 100% (121/121), done.
❘  remote: Compressing objects: 100% (79/79), done.
❘  remote: Total 2768 (delta 56), reused 83 (delta 40), pack-reused 2647
❘  Receiving objects: 100% (2768/2768), 864.64 KiB | 5.73 MiB/s, done.
❘  Resolving deltas: 100% (1774/1774), done.
❘  $ cd can-utils/
❘  $ make
❘  cc -O2 -Wall -Wno-parentheses -Iinclude -DAF_CAN=PF_CAN -DPF_CAN=29 -DSO_RXQ_OVFL=40 -DSCM_TIMESTAMPING_OPT_STATS=54 -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE   cangw.c   -o cangw
❘  (中略)
❘  $ sudo make install
❘  [sudo] xxx のパスワード:
❘  mkdir -p /usr/local/bin
❘  cp -f cangw isotpdump isotpperf isotprecv isotpsend isotpserver isotpsniffer isotptun j1939acd j1939cat j1939spy j1939sr testj1939 slcan_attach slcand asc2log bcmserver can-calc-bit-timing canbusload candump canfdtest cangen cansequence canlogserver canplayer cansend cansniffer log2asc log2long mcp251xfd-dump slcanpty /usr/local/bin
❘  $ cd ..
❘  (中略)
❘  $ git clone https://github.com/wacogiken/abh3_CAN-Bus_Linux.git
❘  Cloning into ‘abh3_CAN-Bus_Linux’…
❘  remote: Enumerating objects: 58, done.
❘  remote: Counting objects: 100% (58/58), done.
❘  remote: Compressing objects: 100% (41/41), done.
❘  remote: Total 58 (delta 24), reused 48 (delta 16), pack-reused 0
❘  Unpacking objects: 100% (58/58), 4.85 MiB | 5.66 MiB/s, done.
❘  $ cd abh3_CAN-Bus_Linux/
❘  $ cp ../can-utils/lib.* .
❘  $ cp -R ../can-utils/include .
❘  $ make
❘  cc -Wl,–no-as-needed -Iinclude -Wno-psabi   -c -o canABH3.o canABH3.c
❘  cc -Wl,–no-as-needed -Iinclude -Wno-psabi  -lm  single_canABH3.c canABH3.o lib.o   -o single_canABH3
❘  cc -Wl,–no-as-needed -Iinclude -Wno-psabi  -lm  bcast_canABH3.c canABH3.o lib.o   -o bcast_canABH3
❘  g++    -c -o canABH3++.o canABH3++.cpp
❘  g++   -lm  single_canABH3++.cpp canABH3++.o canABH3.o lib.o   -o single_canABH3++
❘  g++   -lm  bcast_canABH3++.cpp canABH3++.o canABH3.o lib.o   -o bcast_canABH3++

 

 

以上で、can-utilsとサンプルソフトのインストールは終わりです。

サンプルソフトではラズベリーパイ財団のRaspberryPi、および、エヌビディア社のJetson Xavier NXで実行確認していますが、前述したSocketCANドライバおよびcan-utilsがコンパイル可能であれば同様に接続できると考えます。

 

 

 

 

 

今回はここまで

次回、ABH3をCANで動かそう!③

 『PC、ラズパイとWiresharkによるCAN通信のパケット解析』