Armadilloフォーラム

Armadillo-IoTゲートウェイA6EでCAN通信を行う方法について

y_m_j3w

2024年8月7日 11時35分

お世話になっております。
水野です。

現在Armadillo-IoTゲートウェイA6EでCAN通信を行うことを考えております。
https://armadillo.atmark-techno.com/howto/aiotg4-canの様に
A6Eでの手順などをご教示いただきたく思います。
CAN通信はpythonを用いて制御したいと思っております。
また、CANトランシーバは作成済みです。

以上、よろしくお願いいたします。

コメント

at_makoto.sato

2024年8月8日 17時12分

佐藤です。

> 現在Armadillo-IoTゲートウェイA6EでCAN通信を行うことを考えております。
> https://armadillo.atmark-techno.com/howto/aiotg4-canの様に
> A6Eでの手順などをご教示いただきたく思います。
以下のマニュアルを参照して、at-dtweb で CAN の設定をしてみてもらえますでしょうか。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

y_m_j3w

2024年8月20日 12時18分

佐藤様
お世話になっております。
at-dtweb で CAN の設定を行いました。添付画像の様に「ip a」を行い確認も取れました。
参考までに対象デバイスの確認も行いました。
armadillo:~# ls -l /sys/class/net/can0/device
lrwxrwxrwx 1 root root 0 Aug 20 11:52 /sys/class/net/can0/device -> ../../../2090000.flexcan

armadillo:~# ls -l /sys/class/net/can1/device
lrwxrwxrwx 1 root root 0 Aug 20 11:52 /sys/class/net/can1/device -> ../../../2094000.flexcan

通常ubuntu系のLinuxでは下記のサイトの様にコマンドで操作できるものだと認識していますが、A6Eでも可能なのでしょうか?
可能でない場合は、手順をご教示いただきたいです。

https://lipoyang.hatenablog.com/entry/2024/06/04/114339

以上、よろしくお願いいたします。

> 佐藤です。
>
> > 現在Armadillo-IoTゲートウェイA6EでCAN通信を行うことを考えております。
> > https://armadillo.atmark-techno.com/howto/aiotg4-canの様に
> > A6Eでの手順などをご教示いただきたく思います。
> 以下のマニュアルを参照して、at-dtweb で CAN の設定をしてみてもらえますでしょうか。
> https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

ファイル ファイルの説明
スクリーンショット 2024-08-20 121709.png

at_shinya.koga

2024年8月22日 6時17分

アットマークテクノの古賀です。

水野さん:
>通常ubuntu系のLinuxでは下記のサイトの様にコマンドで操作できるものだと認識していますが、A6Eでも可能なのでしょうか?
>可能でない場合は、手順をご教示いただきたいです。
>
>https://lipoyang.hatenablog.com/entry/2024/06/04/114339

上のブログでは、SocketCAN 用のユーティリティである can-utils をインストールして使用していますね。
can-utils は、Armadillo Base OS (ABOS) がベースにしている Alpine Linux でもパッケージが提供されていますので、そちらをインストールして試してみてください。
 https://pkgs.alpinelinux.org/package/v3.20/community/armhf/can-utils

# apk add can-utils

なお、ABOS に apk add でインストールした場合、インストールした内容は再起動すると消えてしまいます。ですので、インストールして動作確認できたら、Alpine Linux のコンテナや、あるいは Ubuntu のコンテナを作り、そのコンテナで CAN 通信を行うアプリケーションを実装してください。

y_m_j3w

2024年8月28日 10時53分

アットマークテクノ古賀様
お世話になっております。

水野です。
コマンド上でのcandump、cansendにおいてcan通信の確認が行えました。
ありがとうございます。

引き続きコンテナ内からpythonアプリケーションにてCANの制御を行いたいのですが、
コンテナでの権限付与の方法や
コンテナ内からの制御するための設定に苦戦しております。
(現状はABOSDEのcreate new project→A6E→pythonの新しいプロジェクトという手順でコンテナを作成しています)
正しい手順をご教示いただきたいです。
よろしくお願いいたします。

> アットマークテクノの古賀です。
>
> 水野さん:
> >通常ubuntu系のLinuxでは下記のサイトの様にコマンドで操作できるものだと認識していますが、A6Eでも可能なのでしょうか?
> >可能でない場合は、手順をご教示いただきたいです。
> >
> >https://lipoyang.hatenablog.com/entry/2024/06/04/114339
>
> 上のブログでは、SocketCAN 用のユーティリティである can-utils をインストールして使用していますね。
> can-utils は、Armadillo Base OS (ABOS) がベースにしている Alpine Linux でもパッケージが提供されていますので、そちらをインストールして試してみてください。
>  https://pkgs.alpinelinux.org/package/v3.20/community/armhf/can-utils
>

> # apk add can-utils
> 

>
> なお、ABOS に apk add でインストールした場合、インストールした内容は再起動すると消えてしまいます。ですので、インストールして動作確認できたら、Alpine Linux のコンテナや、あるいは Ubuntu のコンテナを作り、そのコンテナで CAN 通信を行うアプリケーションを実装してください。

at_shinya.koga

2024年8月28日 11時05分

アットマークテクノの古賀です。

水野さん:
>コマンド上でのcandump、cansendにおいてcan通信の確認が行えました。
>ありがとうございます。

ひとまず、良かったです。

>引き続きコンテナ内からpythonアプリケーションにてCANの制御を行いたいのですが、
>コンテナでの権限付与の方法や
>コンテナ内からの制御するための設定に苦戦しております。
>(現状はABOSDEのcreate new project→A6E→pythonの新しいプロジェクトという手順でコンテナを作成しています)
>正しい手順をご教示いただきたいです。
>よろしくお願いいたします。
...
>>なお、ABOS に apk add でインストールした場合、インストールした内容は再起動すると
>>消えてしまいます。ですので、インストールして動作確認できたら、Alpine Linux の
>>コンテナや、あるいは Ubuntu のコンテナを作り、そのコンテナで CAN 通信を行う
>>アプリケーションを実装してください。

Armadillo-X2 のマニュアルになりますが、「入出力デバイスを扱う」の節にある「CAN を扱う」の説明は、参考になるでしょうか?
 https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…

上記マニュアルの説明では不足している場合は、お知らせください。
お手数をかけまして恐縮ですが、どうぞ宜しくお願いします。

y_m_j3w

2024年8月28日 17時24分

アットマークテクノ古賀様
お世話になっております。
水野です。
ご回答ありがとうございました。

ご教示いただいたマニュアルを参考に実施してみたところ、アプリケーションでのCANの送受信ができることを確認しました。

一点質問ですが、
マニュアル上のCANを扱うの節で

コンテナ内に入り、ip コマンドで CAN を有効にすることができます。 以下に、設定例を示します。
 
[armadillo ~]# podman exec -it can_example sh
[container ~]# apk upgrade
[container ~]# apk add iproute2 
[container ~]# ip link set can0 type can bitrate 125000 
[container ~]# ip link set can0 up 
[container ~]# ip -s link show can0 

の箇所ですが、アプリケーションを実行した際に自動的にCANの設定、起動までを行いたいため、
設定用スクリプトをコンテナ内部に作成しDockerfileでそのスクリプトを起動させる方法を考えていますが
他の方法や留意点があればご教示いただきたいです。
よろしくお願いいたします。

> アットマークテクノの古賀です。
>
> 水野さん:
> >コマンド上でのcandump、cansendにおいてcan通信の確認が行えました。
> >ありがとうございます。
>
> ひとまず、良かったです。
>
> >引き続きコンテナ内からpythonアプリケーションにてCANの制御を行いたいのですが、
> >コンテナでの権限付与の方法や
> >コンテナ内からの制御するための設定に苦戦しております。
> >(現状はABOSDEのcreate new project→A6E→pythonの新しいプロジェクトという手順でコンテナを作成しています)
> >正しい手順をご教示いただきたいです。
> >よろしくお願いいたします。
> ...
> >>なお、ABOS に apk add でインストールした場合、インストールした内容は再起動すると
> >>消えてしまいます。ですので、インストールして動作確認できたら、Alpine Linux の
> >>コンテナや、あるいは Ubuntu のコンテナを作り、そのコンテナで CAN 通信を行う
> >>アプリケーションを実装してください。
>
> Armadillo-X2 のマニュアルになりますが、「入出力デバイスを扱う」の節にある「CAN を扱う」の説明は、参考になるでしょうか?
>  https://manual.atmark-techno.com/armadillo-x2/armadillo-x2_product_manu…
>
> 上記マニュアルの説明では不足している場合は、お知らせください。
> お手数をかけまして恐縮ですが、どうぞ宜しくお願いします。

at_shinya.koga

2024年8月29日 6時38分

アットマークテクノの古賀です。

水野さん:
>ご回答ありがとうございました。
>
>ご教示いただいたマニュアルを参考に実施してみたところ、アプリケーションでのCANの送受信ができることを確認しました。

ご確認有り難うございます。良かったです。

>一点質問ですが、
>マニュアル上のCANを扱うの節で

コンテナ内に入り、ip コマンドで CAN を有効にすることができます。 以下に、設定例を示します。
 
[armadillo ~]# podman exec -it can_example sh
[container ~]# apk upgrade
[container ~]# apk add iproute2 
[container ~]# ip link set can0 type can bitrate 125000 
[container ~]# ip link set can0 up 
[container ~]# ip -s link show can0 

>の箇所ですが、アプリケーションを実行した際に自動的にCANの設定、起動までを行いたいため、
>設定用スクリプトをコンテナ内部に作成しDockerfileでそのスクリプトを起動させる方法を考えていますが
>他の方法や留意点があればご教示いただきたいです。

ip link コマンドによる CAN の設定とアプリケーションの起動を、コンテナ起動時に行うようにしたい、ということですね。
Dockerfile に書いてコンテナイメージに設定する以外ですと、ABOS の /etc/atmark/containers/ に配置するコンテナ起動設定ファイルを使う、という方法も可能です:
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
コンテナ起動時に実行するコマンド列を書いたシェルスクリプトをコンテナイメージ内に配置して、そのスクリプトを、コンテナ起動設定ファイル([コンテナ名].conf) の set_command 行で指定する、というやり方です:
 https://armadillo.atmark-techno.com/forum/armadillo/16565

あるいは、set_comamnd 行を

set_command /bin/sh -c "ip link set can0 type can bitrate 125000; ip link set can0 up; [アプリケーションコマンド]"

のように書いてもよいでしょう(シェルに渡すコマンド列を直接書いてしまうやり方)。
Armadillo-IoT G4 用ですが、「Armadillo Base OS 開発ガイド」にある「podmanコンテナとアプリケーションの自動実行」の説明にも、同様な例があります:
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-base-os-dev…

なお、コンテナ起動設定ファイルの set_command 行は、複数あると、最後に出現する行以外は無視されます。
これは間違いやすいところなので、ご注意ください。

以上、参考になりましたら幸いです。