この記事で扱っていること
- Viスクリプト小プログラム
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
VIスクリプトの機能を使用することで、既存のプログラムに対して「手動でやるのは面倒くさい」作業を手軽に行えることは前回の記事で紹介しました。
実際VIスクリプトでやれることは他にもあり、今回の記事もそんな例を紹介していきます。
どんな結果になるか
一つ目の例では、フロントパネルに配置した制御器を円形に並べるプログラムになります。
これは円形を例にしていますが、ようはただの直線的な並べ方でなくても幾何的な並べ方にしたいときに手動で位置調整をするのではなく、手早くキレイに行うようにする方法になります。

もう一つは、データタイプごとの特殊な設定を複数の制御器にまとめて行う方法になります。
例えば数値なら「表示形式」、ブールなら「機械的動作」、文字列なら「表示スタイル」を、複数の制御器に対して一度に変更するということです。
一度フロントパネルを作ってから実は変えなくちゃいけなかったと後から気づいたときに対象の制御器が複数あるとちまちま面倒なので、その手間を省きます。

プログラムの構造
制御器を円形に並べる例のプログラムがこちらです。
位置の指定は三角関数のcos、sinを使用してX、Y座標をそれぞれ決めています。
もちろん他のより凝った位置に複数の制御器を配置したい場合であっても、座標系の指定さえプログラム的に表現できてしまえば実現可能です(その指定のさせ方を考えるのが面倒かもしれませんが)。

なお、上記のプログラムだと実はブロックダイアグラム上の端子は位置が変わりません。
ブロックダイアグラム上の端子の位置も変える場合には、VIスクリプトの機能をLabVIEWのオプションメニューから有効にした状態で以下のようなプログラムを組んでやります。
ブロックダイアグラムの場合、オブジェクトのリファレンス取得の順番がフロントパネルと逆になっているようなので、1D配列反転の関数を使用しています。

当然このプログラムは数値制御器だけでなく他のデータタイプでも使えます。
例えばブールデータタイプの場合の例が以下のようです。
フロントパネル上のブール制御器の位置を変えるプログラムはブール用に変更する必要がありますが、ブロックダイアグラム上の端子の位置を変える処理は数値データ用のプログラムと同じでできます。

もう一つのプログラムでは、どれも形としてはほぼ同じで、「特定のクラスに変換」を使用することで数値やブール、文字列データタイプのリファレンスに変換後、それぞれのデータタイプ固有の設定をプロパティノードで行っていくことになります。
表記法の場合には、定数を作成することで列挙体定数が表示され、どの表記法にするかを列挙体の項目として選べます。

しかし、他のデータタイプの場合には列挙体になりません。
例えばブールの機械的動作を一括で変更する場合のプログラムは以下のように書きますが、列挙体ではなく単に数値で指定します。
0が「押されたらスイッチ」、5が「放されるまでラッチ」として考えられるので、好みの機械的動作の番号を指定します。

文字列に対する表示スタイルも同様に列挙体では表れないので、0が「標準」、3が「16進数」で以下の図に示した上から順の数値になっているのでこれを前提に変更したい表示スタイルの数値をプロパティノードに入力します。

クラス名の確認
上で紹介していたプログラムでは、クラス名が一致するかを判定する処理を入れていましたが、そもそも各データタイプのクラス名は何なのかを知らないとこのような処理は書けません。
私は以下のようなプログラムを使用して、クラス名を調べたい制御器を一つ配置したテスト用のVIを用意し、そのVIを以下のプログラムのVIパスで指定して実行、フロントパネルおよびブロックダイアグラム上の端子としてのその制御器のクラス名を調べていました。

本記事ではviスクリプトの機能を使ってちょっとした手間をプログラムで一括解決する方法を紹介しました。
せっかくプログラミングをして色々なことを自動化するので、「プログラムを書く」という作業の一部についても面倒な部分はプログラムで解決できるようにしていきましょう。
ここまで読んでいただきありがとうございました。


コメント