Power Automate Desktopで計器制御する方法

Power Automate DesktopはWindows11に標準インストールされた業務自動化ソフトです。繰り返し作業の自動化に向いているため、シリアル通信を使った自動計測に応用できるか調べましたので紹介することにしました。

Power Automateとは?

 Power Automateは、人間が定期的に行っているWEBページ上の作業やExcel上の作業などを、自動化することを目的にしたMicrosoft製のWindowsアプリです。

Power Automate DesktopはPower Automateの無料版で少し機能制限されています。これには次のようなメリットとデメリットがあります。

メリット

  • ライセンスが無料
  • Windows11に最初からインストールされている
  • コードを書けなくてもアクションの組み合わせでプログラミングができる
  • MS OfficeやWEBサービスとの連携が強力

デメリット

  • 作成したプログラムはMicrosoftのクライドのみに保存できる(ネット環境が必要)
  • プログラミング言語に比べて柔軟性が低い

デメリットを特に痛感したのは、Pythonスクリプトの柔軟性でした。プログラム中でPythonスクリプトを使えるのですが、Outputがテキストのみに固定されているために算術演算の答えをテキストでやり取りしなければなりませんでした。これは正確さと容易さのトレードオフなのでデメリットとも言い切れないですが・・・。

Power Automate Desktopの使い方

Power Automate DesktopはWindws11にはプリインストールされています。Windws10にはMicrosoft Storeから無料でインストールできます。

スタートメニューからPower Automateを起動するとMicrosoftアカウントへログインを要求されるのでログインします。ログインするとホーム画面が表示されるので“自分のフロー”を選択します。

初めてのログイン時はまだフロー(プログラム)が無いので新しいフローを作ります。フロー作成画面は下のように表示されます。

アクション
OSやアプリケーションの動作
フロー
実行後に上から順番に処理される
変数
フローの中で使われる数値

この記事ではシリアル通信を使って機器を制御する方法を紹介します。シリアル通信を使用する場合はRS232Cケーブルを使ってもよいし、USBケーブルを接続し仮想COMポートを作る方法でも動作が可能です。試していないですが、GPIB-USBケーブルでも制御できると思います。

シリアル通信のアクションを作る

ここではAmazonで1000円以下で購入できるUSB-RS3232C変換ケーブルを使用しました。Windowsの標準ドライバで動作するためドライバのインストールは不要です。

計測器をリモート操作するためにはアクションの “PowerShellスクリプトの実行”をMainフローにドラッグドロップしコードの欄に次のコードを書きます。

$com = New-Object System.IO.Ports.SerialPort "COM4",115200
$com.DataBits = 8
$com.Parity = [System.IO.Ports.Parity]::None
$com.StopBits = [System.IO.Ports.StopBits]::One
$com.Open()
$com.WriteLine("%cmnd%")
Start-Sleep -m 1000
$com.ReadExisting()
$com.Close()
$com.Dispose()

上のコードを保存すると変数“cmnd”がまだないとエラーが出るので、変数欄に入出力変数を新規作成し、cmndと名前をつける。cmndの初期値に計測器のリモートコマンドを保存する。(例 KEITHLEYのDMMの場合 ” :MEAS? ”)

正常に実行されると変数PowershellOutputに測定値が保存されます。

例1 一定時間ごとに計器の測定データを記録する

一定時間ごとに計測器からデータを得るためにはLoopアクションとWaitアクションを使って定期的にPowerShellアクションを実行させます。 ここではKEYTHLAYの2000デジタルマルチメータで電圧値を読み取り、得られたデータをCSVファイルに保存するフローを紹介します。

アクションの一覧から“Loop“、”テキストをファイルに書き込む”、”Wait”を選びフローにドラッグ&ドロップする。テキストファイル名と、Loopの回数、Waitの秒数を設定する。

このフローを実行すると、3秒ごとにDMMが電圧を測定し、test.csvにデータが保存されます。

例2 一定時間ごとに機器の設定を変更する

計器の設定を定期的に変更するには入出力変数のリストを作ってループ毎に異なる命令を変数cmndに設定します。例として電源装置の電圧を変更するフローを紹介します。

変数の設定
変数cmndの値をPowerShellスクリプト
実行の前に設定する。設定値は
%NewInput[LoopIndex]%
(配列NewInputのLoopIndex番目の
数値が設定される)
入出力変数の作成
データの種類を“リスト”に設定する
設定値に命令を順番に書く
(例)1V~5Vまで1Vずつ設定

例1と例2を組み合わせると自動校正のようなプログラムも作れる。しかし、難しい数値計算などは不得意なため、簡単な計測用途に向いているような気がします。