だんだんと春になってきましたね。
梅の季節から桜の季節へ、お散歩しているとあたたかな空気と花のよい香りで穏やかな気持ちになります。

花粉症には辛い季節ですが、花粉の飛散が本格化する前に注射やお薬で対策をしておくことでだいぶ違うみたいですね。
来年こそは。。。(べにふうきや甜茶など、花粉症に効果のあるお茶を飲むのもいいようです)

流れ出るのは鼻だけでなく、毎年この時期に自動車保険の更新もあるのでお金もとめどなく流れていきます。
(車検が重なるとさらに。。。)
ガソリンも高いし、もういっそ自転車生活に、と思っても足利 (栃木) での生活には自動車はほぼ不可欠だし、
やっぱり便利だし、なんやかんや手放せずにいます。

AUTOmeal も組込み業界の皆様にとってなんやかんや便利で手放せないツールになったらいいな。
そして流すのはテストだけにしたいものです。

今回は CAN通信のテストについてです!

 

はじめに。前回の振り返り

AUTOmeal は、組込み機器のテストにおける「制御」「計測」「判定」を、人に代わって自動で実行してくれる、
夢のようなソリューションです。

連載第1回、第2回、第3回ではそれぞれ「制御」と「計測」、そして「判定」をやってみました。
また、第4回では「シリアル通信」のテストにチャレンジしました。

第1回:制御編の振り返り

制御編では、Pythonスクリプトを使ってデモボードを自動制御してみました! ボタンをポチポチしたり、距離センサの前で手を近づけたり離したりするところを AUTOmealが代わりにやってくれたわけです。
【記事へのリンク】💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:制御編~」

第2回:計測編の振り返り

計測編では、使用するI/Fボードの設定を追加して、計測をできるようにしました! ロジックやアナログ、PWMの波形をリアルタイムで計測してAUTOmealアプリ上に表示させるところをご覧いただきました。 波形の表示だけでなく、スクリプトを使って取得した値をログに出力させることもできました。
波形のChart表示だけでなく、スクリプトを使って取得した値をログに出力させることもできました。
【記事へのリンク】 💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:計測編~」

第3回:判定編の振り返り

判定編では、制御、計測した結果を判定してみました!
LEDの点灯/消灯やフィンの動作状況などをどのようにPythonスクリプトで判定しているのかもご覧いただきました。
判定まで実施できれば回帰テストも使いまわしで行けるのでテストが圧倒的に楽になります。
【記事へのリンク】 💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:判定編~」

第4回:シリアル通信編の振り返り

シリアル通信編では、ターゲットの通信相手にAUTOmealでなり替わってみました!
ターゲットに対するパケットの自動送信や、ターゲットから受信したパケットの確認などを行いました。
【記事へのリンク】 💡 「【連載】ラズパイとPythonでテスト自動化やってみた~AUTOmeal:判定編~」

さて、今回は車載系システム開発にはほぼ不可欠な CAN通信についてです!
CAN は車載機器以外にも産業機器や医療機器などにも広く利用されています。
AUTOmeal で CAN通信のテストをどのように実現しているのかなどをお届けします。

 

CAN通信の概要とテスト自動化のユースケース

CAN通信とは

バス規格の一種で、ホストコンピュータなしでマイコンやデバイスが相互に通信できるシリアル通信プロトコルです。

バスに空きがあればどのノードからでも通信を開始できる、マルチマスタ方式であることや、
外部からのノイズに強いこと、すべてのノードがエラー検知や通知機能を有すること、などが特徴なため、
上記でも記載したように、自動車だけでなく、鉄道、船舶、航空宇宙、産業機器や医療機器などの幅広い分野で用いられています。

AUTOmeal でできること

AUTOmeal では、CAN通信のモニタリングとなり替わりができます (前回のシリアル通信編と同じですね)。
概要や使いどころはそれぞれ下記のようになっています。

モニタリング

AUTOmeal が ECU間などの CAN通信をモニタリングします。
メッセージのやり取りやデータ内容等を確認できます。 また、メッセージのシーケンス確認にも使用できます。
例えば、通信の内容を Print文やモニタリングツールを使用し確認していたテスト等を AUTOmeal で代替したり自動化することができます。

なり替わり

AUTOmeal がターゲットの通信相手となる ECU になり替わります。
そうすることで、対象のECUに対する送信、ECU からの受信が可能です。
例えば、通信対象が開発途中等で使用できない場合や、設計値外のメッセージを送信する場合など、
代替治具や模擬通信ツールを使用して確認していたテストを AUTOmeal で代替したり自動化することができます。

対象とする自動テストの例

上記、モニタリングとなり替わりを実際にどのようなテストケースに対して適用するのか?
というところを例を用いて説明します!
まず、ECU A と ECU B の2つの ECU を開発しており、2つの ECU間では CAN通信を行っているという状況と仮定します。

2つの ECU の結合テストを行いたいとなったときに、見たい観点とそのテストケースの一例として以下が挙げられます。

① ECU A と ECU B の通信のやり取りを確認
  - テストケース:定常状態で、ECU A から ECU B に ID:xx Data:xx (設計値のデータ) を送信し、ECU B から ECU A に返送されるメッセージの内容を確認する

② ECU B が「IDは設計値だが、 データは設計外のメッセージ」を ECU A から受信した場合の動作
  - テストケース:ECU A から ID:xx Data:zz (設計外のデータ) を送信し、ECU B はその内容を確認の上 ID:yy Data:yy を返送する。ことを確認する

③ ECU B が「ID もデータも設計外のメッセージ」を ECU A から受信した場合の動作
  - テストケース:ECU A から ID:zz Data:zz (設計外のIDとデータ) を送信し、ECU B はその内容を確認の上 何も返送しない。ことを確認する

このとき、➀は AUTOmeal でのモニタリング、②と③はなり替わりで実現できます。

① ECU A と ECU B の通信のやり取りを確認
定常状態で、ECU A から ECU B に ID:xx Data:xx (設計値のデータ) を送信したメッセージと、ECU B から ECU A に返送されたメッセージを AUTOmeal でモニタリングします。CANバスに AUTOmeal もぶら下がることで、バス上に流れる双方がやり取りするメッセージを監視するイメージです。
AUTOmeal での手動テストではリアルタイムで画面上に表示されるメッセージを確認することができます。自動テストは、メッセージを受信 (双方のやり取りをキャッチ) するスクリプトを記述することで実現可能です。

② ECU B が「IDは設計値だが、 データは設計外のメッセージ」を ECU A から受信した場合の動作
ECU A になり替わり、AUTOmeal が ID:xx Data:zz (設計外のデータ) を ECU B に送信します。その返送として、ECU B から AUTOmeal が受信したメッセージを確認します。下図を見ると分かるように、言葉のとおり AUTOmeal が ECU B の通信相手になり替わっています。本来はバスを通じて ECU A と ECU B が通信を行いますが、AUTOmeal がメッセージを送信し、その応答として ECU B が送り返してきた内容を受信します。
下の例では、通信の中でわざと設計外のデータを送信し、それに対するメッセージを受信、確認しています。例外なデータに対して用意しておいたレスポンスがきちんと送られてくるのかを確認しているわけですね。
AUTOmeal での手動テストではリアルタイムでメッセージを送信、受信することができ、また、その送受信内容も画面上で確認することができます。自動テストは、メッセージを送受信し、その内容が期待値になっているかを判定するスクリプトを記述することで実現可能です。

③ ECU B が「ID もデータも設計外のメッセージ」を ECU A から受信した場合の動作
ECU A になり替わり、AUTOmeal が ID:xx Data:zz (設計外のIDとデータ) を ECU B に送信します。AUTOmeal には ECU B からの返送がないことを確認します。こちらも②と同様に、 AUTOmeal が ECU B の通信相手になり替わっています。
下の例では、通信の中でわざと設計外のIDとデータを送信し、それに対するメッセージが送られてこないことを確認しています。これは、設計外のIDとデータに対しては反応がないことが期待動作のため、受信状態で待って、受信メッセージなしとなることを確認したいわけですね。
②と同様に、メッセージを送受信し、受信時間内に何も送られてこないことを確認するスクリプトを記述することで、テスト自動化することができます。

 

他のツールとの比較

ツール検討の際には、他の類似製品との違いも知りたいですよね。

A社製品と機能比較した際のリストはこちらです。
CAN のテスト単体で見ると、機能・性能面ではA社製品の方ができることが多いです。

ただ、AUTOmeal はそこに対抗したいわけではありません。
AUTOmeal としては、価格自動化をかんたんに実現できる点
他の I/O と同期して確認できる点をメリットとしています。
メインの目的と使いどころが異なるので、何を実現したいかを考えてのツール選定が必要になります。

大項目小項目AUTOmeal
(GUI)
AUTOmeal
(スクリプト)
A社製品
送信単発送信
定期送信
シーケンス送信×
データ解析送受信データのリスト表示
診断機能×
外部連携Jenkins
MATLAB/Simulink
データベースサポートDBC (CAN)

 

CANのなり替わりをやってみた

今回は下記の環境で実施します。

  • CAN のみを有効にしたプロジェクトを使用
  • 手動で操作を行う

送信内容の設定

まずは、AUTOmeal 上で送信内容を設定してみます。
画面左上の「手動送信」と表示されている部分では、手動で「送信」を押すたびに送信される内容を編集することができ、「任意の名称」「ID」「データ」を設定します。

その下の「定期送信」と表示されている部分では、一定の期間で定期的に送信される内容を編集することができます。
「任意の名称」「ID」「データ」に加え、送信の「周期」と「ch」を設定します。

また、一番左の「送信」欄では、定期送信の ON/OFF を切り替えることができます。
▷マークをクリックすると送信開始され、☐マークをクリックすると送信停止されます。
(つまり▷表示は停止中の状態、☐表示は送信中の状態)

直感的に操作でき、定期送信部分まで GUI上で設定できるのは嬉しいです!

送信するデータは DBCファイルから読み込むことも可能です。
読み込んだ内容が左上の「手動送信」部分に表示されていますが、左下の DBCファイルの内容と同期しているため、
一方に変更を加えると、それに合わせてもう一方も変更されます。
ベースは DBCファイルで、ちょい変したいところも書き換えがかんたんなのは便利です。

なり替わり操作

それでは、実際にテストを開始して、AUTOmeal アプリでなり替わってみます!

テスト開始後、送信したい列を選択してから「送信」ボタンを押すと、AUTOmeal から CAN の信号を送信することができます。今回は、Send が AUTOmeal から送信したメッセージ、Receive は AUTOmeal が受信したメッセージ なので、送受信したことが右側のペインからわかります。

また、定期送信の▷マークをクリックすると該当の内容の定期送信が開始されます。複数メッセージの定期送信も可能です。定期送信を停止したい場合は、☐マークをクリックすると停止します。

結果のフィルタ

テストをするだけでなく、結果確認もかんたんにできるといいですよね。
AUTOmeal では、通信結果のフィルタができます。

例えば、ID では送受信した ID の一覧が表示されますが、フィルタ機能により、選択している ID を持つメッセージのみを表示できます。再度選択しなおすとすべて表示できます。
時間では、開始時刻と終了時刻が指定でき、範囲内のメッセージのみを表示できます。

DBCファイルに関しても CAN ペインのメッセージを選択することで、送信メッセージと同様に、選択したメッセージID に対応する DBCファイルを表示できます。

結果のエクスポート

また、AUTOmeal 上での確認だけでなく、csv でのエクスポートも可能です。
「ファイル」から「レポートのエクスポート」をクリックし、エクスポート先とエクスポートする内容を選択するだけです。
エクスポート結果のファイルの中身には、表示されている送受信のメッセージと同じ情報がエクスポートされています。
これなら共有やデータの加工もやりやすいですね!

 

AUTOmealでCAN通信のテストをやってみた感想

今回の感想としては、

シンプルだけど、やりたいことができそう

です。

機能的にはシンプルですが、自動化を目的としたときには最適の構成でした。
それだけでなく、手動操作でもちょちょっと通信内容を確認したいときなど、
準備がかんたんなので、非常に便利です!

ツール、使いどころによっては「too much かも…」という感覚になることがありますが、
AUTOmeal は「The ちょうどいい」ですね。

ツール自体の構成はシンプルで直感的に使いやすい一方で、
スクリプトが Python なので、やりたいことに合わせて拡張していくことができます。

今回は CAN だけでしたが、他の I/F と組み合わせたときは
一画面でそれぞれの制御/計測結果が分かるので、そこも AUTOmeal ならではの良さがあるなと思います。

また、任意の送信内容を設定できるため、
設計値外のメッセージ (異常値) を送信したときの動作確認にも使えるというのが個人的にはいいなと思いました。
実機でだけでは確認できないものがかんたんにできるのは便利ですね。

地味にありがたい機能として、
定期送信とフィルタ機能は痒いところに手が届くなあと感じました!
技ありですね。

 

最後に

いかがでしたか?

今回は、AUTOmeal での CAN通信部分のテスト自動化をお届けしました。

AUTOmeal なら、お手頃にお手軽に CAN周りのテスト自動化を実現することができます。
シンプルなツールなためちょっと通信内容を見てみたいときにもすぐに確認できます。
ちょいのり感覚でも使えるのがありがたいですね!

トライアルはいつでも受け付けておりますため、
ご興味をお持ちいただいた方は是非ご相談ください!

最後までお読みいただき、ありがとうございました!

テスト自動化ツールまとめ
~どれを使えばいいのか書いてみた~

年々、大規模化するソフトウェア開発。品質に対する要求レベルも上昇しており、テストにかかる工数も増加しています。そこで、自動化へ一歩踏み出す皆さんが導入からつまずかないよう、テスト自動化の始め方と自動化ツールについてまとめてみました。
記事を読む

【 無料で見られる! 】
組込み開発向けテスト自動化プラットフォームAUTOmeal デモ動画

AUTOmealによる環境構築から実際の自動テストの様子まで、基本的な使い方をデモンストレーションいたします。ぜひ実動作をご覧いただき、その効果をご確認ください。

お申し込みはこちら!