スクリプトを使用して MG400 のプロジェクトを実行する
Note
ここでは、Python スクリプトを用いて MG400 を使用した自動テストを行う方法を説明します。
サンプルを使ってスクリプトを理解する
AUTOmeal では Python 形式のスクリプトファイルに自動化したい制御・計測・判定の命令を記述し、そのスクリプトを読み込むことでテストを自動化させることができます。
使用するAPI
MG400 を制御する主な API は以下です。
import automeal as am
# MG400プロジェクトを開始
am.start_mg400_project("MG400_1", "PushButton")
# プロジェクトの状態を取得
state = am.get_mg400_state("MG400_1")
# プロジェクトを停止
am.stop_mg400_project("MG400_1")
start_mg400_project は非同期で実行されるため、必要に応じてスレッドの join や状態監視を行ってください。
MG400 1 台で同時に実行できるプロジェクトは 1 つです。必ず MG400 が停止していることを確認してから、次のプロジェクトを開始してください。
詳細はスクリプトリファレンスを参照してください。
スクリプトの大まかな構成例を理解する
MG400 のプロジェクトをスクリプトで実行する際の大まかな構成例は以下のようになります。
MG400 のプロジェクトを実施し完了まで待機する例
最大20秒以内に完了しない場合は join がタイムアウトの例外を発生させます。
import automeal as am
mg400_name = "MG400_1"
project_name = "PushButton"
# プロジェクト開始
thread = am.start_mg400_project(mg400_name, project_name)
try:
# 最大20秒待機 (20000ミリ秒)
thread.join(20000)
except TimeoutError:
am.stop_mg400_project(mg400_name)
print("タイムアウト: プロジェクトを停止しました。", flush=True)
# 状態確認
state = am.get_mg400_state(mg400_name)
print(f"MG400 state: {state}", flush=True)
# 必要に応じて停止
am.stop_mg400_project(mg400_name)
状況に応じて実行するMG400プロジェクトを切り替える例
電圧値が閾値を超えているかどうかで、実行するプロジェクトを切り替える例です。
join でプロジェクトの完了を無限待機しています。
import automeal as am
mg400_name = "MG400_1"
project_name_1 = "PickProject"
project_name_2 = "PlaceProject"
# 電圧の閾値
threshold = 350
# CPI-AI-1208LI 計測 ch1 の電圧値を計測
result_analog = am.read_analog_cpiai1208li("Board1", 1)
thread = None
if result_analog > threshold:
# 電圧値が閾値を超えている場合は PickProject を実行
thread = am.start_mg400_project(mg400_name, project_name_1)
else:
# 電圧値が閾値以下の場合は PlaceProject を実行
thread = am.start_mg400_project(mg400_name, project_name_2)
# プロジェクトの完了を待機
thread.join()
MG400 のプロジェクトを実行させながら、他の制御も実行する例
start_mg400_project は非同期で動作するため、MG400 のプロジェクトを実行させながら、並行して他の制御も実行することができます。
import automeal as am
mg400_name = "MG400_1"
project_name = "PlaceProject"
# 電圧の閾値
threshold = 350
thread = am.start_mg400_project(mg400_name, project_name)
#CPI-AI-1208LI 計測 ch1 の電圧値を監視
while am.read_analog_cpiai1208li("Board1", 1) < threshold:
am.sleep(0.1)
# 電圧値が閾値を超えたらロジック信号をONにする
am.write_logic_rpigp10("Board2", 1, True)
# プロジェクトの完了を待機
thread.join()
MG400 のプロジェクトを任意のタイミングで停止する例
import automeal as am
mg400_name = "MG400_1"
project_name = "PushProject"
# 電圧の閾値
threshold = 350
thread = am.start_mg400_project(mg400_name, project_name)
#CPI-AI-1208LI 計測 ch1 の電圧値を監視
while am.read_analog_cpiai1208li("Board1", 1) < threshold:
am.sleep(0.1)
# 電圧値が閾値を超えたらプロジェクトを停止する
am.stop_mg400_project(mg400_name)
# プロジェクトの完了を待機
thread.join()
MG400 のプロジェクトエラー発生時に再実行する例
import automeal as am
mg400_name = "MG400_1"
project_name = "PushProject"
# リトライ回数
retry_count = 3
for i in range(retry_count):
if retry_count == 0:
print("リトライ回数を超えました。プロジェクトの実行に失敗しました。", flush=True)
break
try:
thread = am.start_mg400_project(mg400_name, project_name)
thread.join()
except Exception as e:
# プロジェクトの開始に失敗した場合や、join で例外が発生した場合にリトライする
retry_count -= 1
print(f"リトライ {i+1} 回目 失敗: {e}", flush=True)
複数のMG400 を同時に制御する例
import threading
import automeal as am
mg400_names = ["MG400_1", "MG400_2"]
project_name = "PickAndPlaceProject"
threads = []
def start_project(mg400_name):
am.start_mg400_project(mg400_name, project_name)
# 各 MG400 のプロジェクトを別々のスレッドで用意
for mg400_name in mg400_names:
thread = threading.Thread(target=start_project, args=(mg400_name,))
threads.append(thread)
# スレッドを同時に開始
for thread in threads:
thread.start()
# スレッドの完了を待機
for thread in threads:
thread.join()
スクリプトを適切な場所に置く
スクリプトは <プロジェクトルート> の中のフォルダに置くことを推奨しています。
スクリプトを配置するフォルダとしては 2 種類あり、その違いは以下です。
自動テストの実行対象とするかどうかで、どちらに配置するか判断してください。
- <Scripts>
- 自動テストで実行の対象としたいスクリプトファイル。
- <Macros>
- 自動テストで実行の対象としたくないスクリプトファイル。
- モジュールやライブラリ、特定動作をマクロ化したスクリプトなど、他のスクリプトから呼び出して利用することを想定したスクリプトファイルなどはこちらに配置してください。
スクリプトを TestRunner アプリ GUI 上から実行する
1. テスト実行中の状態で、メニューバーの [テスト] > [スクリプトの実行] をクリックします。
2. Macros または Scripts に配置したスクリプトを選択します。
3. コマンドプロンプトが立ち上がり、スクリプトが実行されるため終了を待ちます。
4. [テストログ] ペインに開始、完了の情報及び、スクリプトに記述したログが出力されます。
スクリプトをコマンドラインから実行する
スクリプトファイルの配置
作成したスクリプトファイルは <プロジェクトルート>\Scripts 以下に配置してください。
フォルダ内にさらにフォルダを作成することもできます。
例
📂Scripts
📄FullTest.py
📂FuncA
📄FuncATest1.py
📄FuncATest2.py
…
📂FuncB
📄FuncBTest1.py
📄FuncBTest2.py
…
テストを実行する
プロジェクトルートでコマンドプロンプトを起動し、コマンドを実行します。
パターンの指定は <プロジェクトルート>\Scripts からの相対パスで指定します。
例 :
-
全てのスクリプトを実行する
TestRunnerCLI -
特定のスクリプトのみ実行する
TestRunnerCLI FuncA\FuncATest1.py -
特定のフォルダ以下すべてを実行する
TestRunnerCLI FuncB\*.py -
特定のファイル名を含むスクリプトを実行する
TestRunnerCLI **\Func*Test*.py
Note
一度の実行で実行されるスクリプトは順不同になります。 実行順を担保したい場合はコマンドを複数回に分けて実行してください。
実行中
実行中はコマンドプロンプトに実行ログと進捗の表示が行われます。
実行完了すると、次のコマンドが実行できるようになります。
結果を確認する
TestRunner アプリ上でのログの確認
アプリケーション下部の [出力] ペインには、動作ログやエラー詳細情報などが表示されます。 [テストログ] ペインにはテストログやテスト実行中のエラー情報などが表示されます。 テストスクリプトに print 文で記述した内容は [テストログ] ペインに表示されます。
| 種別 | 文字色 | 内容 |
|---|---|---|
| Error | 赤系 | 期待する動作の完了・継続に支障が出た場合の通知です。 |
| Warn | 黄系 | 何らかの不都合が生じたものの、処理の完了・継続に支障がない場合の通知です。 |
| Info | 黒系 | 動作開始・完了などユーザがアプリの状態を把握するための情報です。スクリプトで print を行った場合 Info レベルで出力されます。 |
全体サマリーの確認
Note
全体サマリーは TestRunnerCLI (コマンドライン) から自動テストを実行した場合のみ生成されます。
<プロジェクトルート>\Reports にあるテストランフォルダを確認します。
確認したい実行日時のテストランフォルダを開いてください。
テキストエディタや Excel 等でテストランフォルダ内にある Result.csv を開きます。
Result.csv には実行結果、実行日時、実行したスクリプト名が記載されています。
CSV 形式のため、必要に応じてツール等で結果を集計できます。