1.       LabView

1.1      概要

1.1.1.   動作環境

LabVIEW用スケルトンコード生成ツール(以下、LabVIEWBuilder)の動作に必要な環境は以下のとおりです。

No.

環境

備考

Java Development Kit 6

注意:Java1.5(5.0)では動作しません。

Eclipse 3.4.以上

Eclipse本体

Enterprise Architect 9.3 以上

コード生成に使用するモデルを作成するツール

MDG Technology for SysML

コード生成に使用するモデルを作成するツール

LabVIEW2012

 

SDSI-Cubicプラグイン

SDSI-Cubicと同時に使用する場合に必要です。


1.2      LabVIEWBuilderのインストール

ここでは、LabVIEWBuilderのインストールおよび起動方法について説明します。

1.2.1.   LabVIEWBuilderのインストール

LabVIEWBuilderEclipseプラグインであるため、Eclipse本体および依存している他のEclipseプラグインをまずインストールする必要があります。動作を参照の上、これらをダウンロードします。

Eclipseのインストールは解凍するだけです。また、Eclipseのプラグインは解凍後、Eclipseフォルダ内に上書きするだけです。

LabVIEWBuilderのインストールは以下のプラグインをeclipse/pluginsフォルダに配置するだけで完了です。

LabVIEWBuilderプラグイン(jp.ac.osaka_u.casi.LabViewBuilder_X.X.X.jar

 

1.2.2.   ライブラリの設定

PFCoreBuilderではベースとなるSysMLモデルの情報を取得するために、モデリングツールEnterprise Architectが提供しているライブラリを使用しています。

Enterprise Architectのインストールディレクトリ配下の”Java API”ディレクトリ内に存在する「SSJavaCOM.dll」ファイルをWindowsのパスが通っている位置にコピーしてください。

更にEnterprise Architectのインストールディレクトリ配下の”Java API”ディレクトリ内に存在する「eaapi.jar」ファイルをJavaCLASSPATHが設定されている位置にコピーしてください。

※上記ファイルを取得するためには、Enterprise Architectのインストールおよび有効なEnterprise Architectのライセンスが必要となります。


1.3      LabVIEWBuilder使用方法

LabVIEWBuilderは、「SDSI-Cubicプラグインの一部として使用」「単独使用」の2種類の方法で使用することが可能です。

1.3.1.   SDSI-Cubicプラグインの一部として使用する場合

SDSI-Cubicプラグインを起動します。

SDSI-Cubicプラグインのインストール方法および起動方法につきましては、SDSI-Cubicプラグインのマニュアルを参照してください。

3‑1 SDSI-Cubicプラグインの起動画面

iniファイル出力先」欄には,LabVIEW自動生成用スクリプトが配置されているディレクトリを指定してください.

「新規プロジェクト出力先」欄には,新規作成するLabVIEWプロジェクトの出力ディレクトリを指定してください。

「新規プロジェクト名」欄には,新規作成するLabVIEWプロジェクトの名称を指定してください。

LabVIEWコード生成」ボタンをクリックすると、LabVIEW用新規プロジェクト、LabVIEW用ステートマシンを作成するのに必要なファイルの作成を行います。

「新規プロジェクト生成」ボタンをクリックすると、指定されたLabVIEWプロジェクトを新規作成します。

「ステートマシン生成」ボタンをクリックすると、指定されたモデル情報に基づいたステートマシンを作成します。

SDSI-Cubicプラグイン起動画面で「LabVIEW」パネルが活性化されていない場合は、LabVIEWBuilderが正常にインストールされていません。再度、インストール方法をご確認ください。

 


1.3.2.   単独で使用する場合

上部メニューから「ウインドウ」-「パースペクティブのカスタマイズ」を選択します。

表示された【パースペクティブのカスタマイズ】画面の中で「コマンド」タブを選択し、画面左側の「使用可能なコマンド・グループ」の中から「LabVIEWBuilder Actions」のチェックボックスを選択し、「OK」ボタンをクリックします。

※「使用可能なコマンド・グループ」内に「LabVIEWBuilder Actions」の項目が存在しない場合は、LabVIEWBuilderが正常にインストールされていません。再度、インストール方法をご確認ください。

   

3‑4 単独で使用する場合の設定

Eclipse本体に戻ると、ツールバー上に「Convert SysML to LAbVIEW」というボタンが追加されますので、このボタンをクリックします。

3‑5単独で使用する場合の起動方法

以下のLAbVIEWビルダメイン画面が表示されます。

3‑6 LabVIEWビルダ メイン画面

No.

説明

@   

コード生成に使用するEnterpriseArchitectのモデルファイルを指定。

A   

コード生成に使用する中間コードの出力先ディレクトリを指定。

B   

自動生成用スクリプトが配置されているディレクトリを指定。

C   

新規作成するLabVIEWプロジェクトの出力先ディレクトリを指定

D   

新規作成するLabVIEWプロジェクトのプロジェクト名を指定

E   

コード生成用中間ファイルの作成

F   

新規LabVIEWプロジェクトの作成

G   

新規LAbVIEWステートマシンの作成

LabVIEWビルダを使用するためには、以下のLabVIEWコード生成用スクリプト,ライブラリが必要です。

MakeNewVIProject.vi : 新規LabVIEWプロジェクト生成スクリプト

StateMachineGenerator.vi : 新規LabVIEWステートマシン生成スクリプト

StateMachineGenerator.llb : 新規LabVIEWステートマシン生成ライブラリ

 上記のファイル群を任意の場所に配置してください.


1.4      対象モデルの作成

LabVIEWBuilderにて使用するモデルの記述方法について説明します。

LabVIEWBuilderでは、SysMLのステートマシン定義図(Statemachine Diagram)を使用します。

※コード生成基モデルに、ステートマシン図以外のダイアグラムが含まれていても問題はありませんが、コード生成時にはそれらのダイアグラムの情報は使用しません。

1.4.1.   生成対象ステートマシンの追加

コード生成を行うステートマシン図を対象となるブロックの配下に作成します。

4‑1 生成対象ステートマシン図の作成

【プロジェクトブラウザ】内で、ステートマシン図を作成するブロックを選択し、右クリック時に表示されるコンテキストメニュー内から「追加」→「状態マシン」を選択します。

4‑2 生成対象ステートマシン図の追加

選択したブロックの配下にステートマシン図が追加されます。

LabVIEWビルダで使用するブロック名は、アルファベット+数字のみ使用可能です。LabVIEWビルダでは、ブロックに「別名」が設定されている場合、名称よりも別名を優先します。必要に応じて、適切な別名を設定してください。


1.4.2.   ステートマシンの作成

追加したステートマシン図内に、必要な状態遷移モデルを作成します。

4‑3 ステートマシン図の作成

LabVIEWビルダでコード生成可能なステートマシン図には、以下の制約がございます。

01.使用可能な要素は、「開始状態」「終了状態」「状態」「遷移」のみ

  →その他の「履歴状態指示子」「選択」「連結点」などの要素は使用不可

02.ステートの階層化は対象外

  →「コンポジット状態」は使用しないとする。

03.トランジションのガードおよびエフェクトは対象外

  →トランジションには「トリガ」のみ記述可能とする。

04.開始状態は、ステートマシン図毎に1つのみ配置可能

05.終了状態は、ステートマシン図内に複数個配置可能

06.使用する要素(ステート,トリガ,アクションなど)名には,アルファベット+数字のみ使用可

 


2.       VIスクリプト ステートマシン自動生成ツール

2.1      概要

以下ではUML(SysML)よりステートマシン図に記述された情報から、National Instruments社製システム開発ソフトウェアLabVIEWのスケルトンプログラムを自動生成する処理を

1.UMLステートマシン図とLabVIEWコードのブロック図との対応

2.LabVIEW自体に用意されているVIスクリプトにてプログラムにて自動生成可能なコード内容の確認

を元に考察し、その結論を元に作成したステートマシンスケルトンコード自走生成プログラムの操作方法及びその解説を行う。

2.2      考察

2.2.1.   UML図との対比

LabVIEWでは状態遷移のテンプレートとしてステートマシンによるブロック図を推奨している。

ステートマシンブロック図では各状態(1シーケンス)をケースストラクチャの1フレームとして、フレーム間の遷移をケースセレクタへの入力と各ケースフレームからの出力で行う。

遷移先示す値をループ(WHILEループ)のレジスタに保持し、値を更新することで各フレーム間を移動していく。

上記レジスタ値をケースセレクタに入力することで指定した状態(ケースフレーム)に進む。

1つの状態処理終了時に次の遷移先を示す値をレジスタに出力することで、望む状態に進めるようにする。

これにより各状態(フレーム)での処理が終了する都度、遷移先状態(フレーム)に進むことになる。

WHILEループによりこの状態遷移は終了端子にTRUE値が入力されるまで繰り返される。(終了に対応するケースフレームでTRUE値を出力する)

上図はステートマシンの1例。「状態2」を1つのシーケンスと考え、次のシーケンス(遷移先=例では「状態2」または「状態3)を判断条件をトリガとして決定し、その遷移先情報をレジスタに設定することで本「状態2」の処理終了後に再びケースセレクタにて状態判断が行われて、指定した状態に進む。

UMLのステートマシン図と比較すると、構成としてステートマシン図の1つの状態にあたるものがケースストラクチャの1つのケース内フレームとなり、ステートマシン図のその状態からの遷移先がケースフレーム内で設定し、レジスタに出力している遷移先値になる。

 

上記に準じた形でUMLのステートマシン図からLabVIEWのステートマシンブロック図へ変換することでUML図からのコード生成を実現する。

 


2.2.2.   アクション処理

UMLでは各状態に対してentry/do/exitアクションを持ち、それらの関係も1つの状態遷移とみなすことができる。

 

実際にはentry/do/exitではこれら全体を含む「状態」から次の「状態」への遷移先もトリガーの内容によって判断されるのであるが、上図では状態遷移のみに絞って表現している。この状態遷移を元の1つの状態の中で行うのもLabVIEWのブロック図での1つの表現形式となるが、今回のスケルトンコードではステートマシンブロック図自体は1つにして各遷移がわかりやすい表現となるよう、下図のように「状態」+「アクション」を1つの状態として持つように状態遷移を展開し、それをブロック図(ステートマシンブロック図)に変換する。なお、この「状態」+「アクション」への展開は、本スケルトンコード生成プログラム上で行う。

 

 

状態14entry/do/exitを組み込んだステートマシン図とブロック図()

 

 

2.2.3.   トリガー値処理

前項では、各状態間の遷移を主にしているが、実際には遷移先を判断するトリガー値の処理を合わせて考える必要がある。

トリガーによって分岐する遷移先は1つ以上で2つとは限らないので、これまでの図のようなIf-elseでの判断は実際のブロック図ではふさわしくない。遷移先判断の分岐処理には下図のようにケースストラクチャを使用する。

上図の場合トリガーの内容がB,C,D及びそれ以外(A含む)でそれぞれ異なる遷移先に進むような出力を行う。

もし遷移先が1つに決まっているような場合は、下図のようにケースが1つしかなく、トリガーの内容がいずれであっても「遷移先1」に進む出力を行う、という形をとる。

各状態内のアクションではdoにてトリガーを受け、遷移先を決定している。これに対しLabVIEWのスケルトンコードではdoにてトリガーを受けるが、実際に遷移先を上図のケースストラクチャにて指定するのはexitで行う必要がある。その為、doで受けたトリガー内容をexitに渡す仕組みが必要となる。トリガー値の引き渡しにはレジスタを使用する。

これを先のケースストラクチャによる遷移先分岐と組み合わせると、UMLステートマシン図とブロック図の対比は下図のようになる。


レジスタに遷移先と判断処理する為のトリガー値を保持する

『トリガーBにて「遷移先2」に戻る、トリガーCにて「遷移先3」に進む、それ以外の間は「遷移先2」のdoアクションを繰り返す』という処理に対し、遷移先2doアクションでトリガー値をチェックし、トリガーB、トリガーC、その他という状態に分けて遷移先を切り替える。

doアクション内でのトリガー値チェックでは、どのような値であっても遷移先は確定される。exitアクション内ではexitアクションに来る条件がdoアクションで定められたトリガー値を検出した時、となるので上記例でいうとトリガーB、トリガーC以外の値となることはなく、exitアクションを1回実行した後、速やかに次の状態のentryアクションに進む。

上記ケースストラクチャによる遷移先分岐と、トリガー値の保持によりどのような状態遷移設定でも同じ形式のブロック図で表現可能となる。

2.2.4.   終了処理

終了の状態は先の例では下図のように状態4から終了端子に接続する、という形式をとっていたが、

実際には状態4から終了する以外に別の状態に遷移する場合もある、などといった状態遷移も考えられるし、また終了に進む状態が1つだけではなく、複数の状態からそれぞれ条件によって終了に進むような形式も考えられる。従って終了する=終了端子に接続する処理は、それのみを行う「終了」のケースフレームを1つ独立して用意し、各状態のexitアクションでは終了端子に接続するのではなく、この「終了」のケースフレームに遷移先を指定して終了に進むようにする。

<Final>という状態(ケースセレクタ値)を用意し、何もせずに本処理を終了する動作に設定する。

     

終了に進む状態遷移に対してはexitアクションの遷移先判断で<Final>に遷移先を指定する。上図の例だとトリガーCの場合は遷移先3に遷移するが、トリガーDだと<Final>に進んで終了する動作となる。

2.2.5.   まとめ

前述までの考えによってUMLステートマシン図で表現された状態遷移に対応したLabVIEWのスケルトンコード(ブロック図)が一つのパターンで表現できると判断できる。

上図が前述までの考察を組み合わせて考えられるブロック図パターンのサンプル。なお、トリガー値については実際に作成するプログラムによってどのようなデータでもありうるので、トリガー名称そのものを使用して文字列で表現することとした。

このパターンのブロック図をUMLステートマシン図を元にした入力パラメータから自動生成するプログラムを作成する。

 

2.3      VIスクリプト(プログラム作成)

2.3.1.   機能

LabVIEWに用意されているVIスクリプト機能では、LabVIEWプログラムによって別のLabVIEWプログラム内容を参照したり、編集したりできる機能である。

編集対象は大別すると

1.    ロジェクト構成に対するもの

2.    各コードファイル(VI,CTL)内容に対するもの

に分けられる。LabVIEW開発環境では作業している内容はメモリ上に展開されており、これにより作業しているプロジェクトの各ファイル、ファイル内容を階層構造から追跡してアクセスすることができる。

2.3.2.   実行形式

VIスクリプトの機能中には下図のようにRun-Time Engineで使用できないものがある。Run-Time Engineとはプログラムをexe形式にビルドした時に使用されるLabVIEW側で用意された機能をまとめたものである。Run-Time Engineで利用できない機能はexe形式では実行できずLabVIEW.exeを利用したVI実行形式でのみ実行可能ということになるので、VIスクリプト=コード自動生成はVI実行形式で行う必要がある。

 

2.3.3.   制限事項

VIスクリプトでのコード編集にてイベントストラクチャに対する操作では、イベントの編集は行えない、これは各イベントストラクチャにおいて設定できるイベントがその時のVIコード内容(主にフロントパネルに設置された制御器の内容)に依存し、関連が複雑な為指定方法が困難な為と推測される。従って本自動生成では作成されるスケルトンコード上にはイベントストラクチャを持たない構成で設計する。

2.4      プログラム実行

2.4.1.   システム要件

Windows OS(32bit Xp Sp364bit 7 Sp1で確認)

LabVIEW 2011

Windows上で実行する[i]LabVIEWのプログラム実行には拡張子が”.VI”のソースコードが記述されたVIファイルをそのまま実行するVI実行と呼ばれる方法と、開発環境であるプロジェクトエクスプローラ上でビルドされたEXE形式の実行ファイルを実行する方法の2通りがある。

VI実行は実行する環境に開発環境であるLabVIEWがインストールされている必要がある。EXE実行の場合は前述の開発環境は不要であるが別途ランタイムをインストールしておく必要がある。ランタイムはライセンス不要でプロジェクトエクスプローラにてEXEと同様に作成可能なインストーラに含めてプログラム本体と一緒にインストールすることが可能である。

前章に記載したように本プログラムでソースコードの生成に使用するVIスクリプト機能はランタイム上では実行できない機能の為、本プログラムはVI実行形式をとる。

この為、開発環境LabVIEWがインストールされていないPC上では実行できない。しかし本プログラムで作成されるステートマシンのスケルトンコードはその後実行処理などの編集を行う元となるものであり、編集にはLabVIEW開発環境を使用するので、実際の運用においては致命的な制限事項とはならない、と考える。

2.4.2.   機能

2.4.2.1.新規プロジェクト作成

指定されたパス(フォルダ)にプロジェクトを新たに作成し、プロジェクトエクスプローラでオープンする。

フォルダが存在しなければ作成する。

既にプロジェクトが存在していればそのプロジェクトをオープンする。

2.4.2.2.ステートマシンスケルトンコード生成

プロジェクトのクラスにステートマシンVIを追加し保存する。

指定されたプロジェクト中のクラスにステートマシンスケルトンコードが記述されたVIファイルとその遷移状態の列挙子が定義されたCTLファイルを作成して、追加する。

プロジェクトがオープンされていない場合は自動的にオープンする。

指定クラスが存在しない場合は新規にクラスを作成する。

2.4.3.   インストール方法

以下のファイルを任意のフォルダにコピーする。レジストリへの登録等は不要。

MakeNewVIProject.vi

StateMachineGenerator.vi

StateMachineGenerator.llb

※実行時には後述のように同じフォルダに入力パラメータファイルVIAutoProject.iniを、内容を編集して準備する必要があります。

 

2.4.4.   操作方法

機能(プロジェクト作成、コード生成)ごとに呼び出し用VIが用意されているので、このファイルをバッチファイルやコマンドライン、エクスプローラなどから呼び出して実行します。


2.4.4.1.実行時ファイル構成

実行時にはインストールしたプログラムファイルに加えて

1.入力パラメータファイル                VIAutoProject.ini

2.作成クラスパラメータファイル       *.prm

が必要です。また、ステートマシンスケルトンコードを生成するプロジェクトファイルは新規プロジェクト作成VIで作成されたものでも、別途用意されたプロジェクトでも可能です。

VIAutoProject.iniは実行するVIファイルと同じフォルダに格納します。

*.prmファイルは1つのフォルダに全て格納し、このフォルダパスを後述するようにVIAutoProject.iniに設定します。

2.4.4.2.新規プロジェクト作成実行

 1.MakeNewViProject.vi」「StateMachineGenerator.llb」「VIAutoProject.ini」が同じフォルダに格納された状態にします。

2.VIAutoProject.ini」を編集し、作成・編集するLabVIEWプロジェクトの存在するフォルダパス及びプロジェクト名を設定します。

3.MakeNewVIProject.vi」をバッチファイルやコマンドラインなどから呼び出します。このVIファイルは指定されると自動的に処理を開始するように設定されているので、そのまま指定したLabVIEWプロジェクトファイルが無ければ作成し、プロジェクトエクスプローラにて開かれた状態にします。既にプロジェクトファイルが存在している場合はプロジェクトエクスプローラで開く処理のみを行います。


4.プログラム実行はウインド表示なしで行われます。処理が成功した場合は該当するLabVIEWプロジェクトが前述のようにプロジェクトエクスプローラで開かれます。

 

2.4.4.3.ステートマシンスケルトンコード生成実行

1.StateMachineGenerator.vi 」「StateMachineGenerator.llb」「VIAutoProject.ini」が同じフォルダに格納された状態にします。

2.作成するステートマシン図内容が記載されたクラス毎のprmファイルを準備(作成)します。


3.VIAutoProject.ini」を編集し、編集するLabVIEWプロジェクトの存在するフォルダパス及び前の2.で作成されたパラメータファイルが格納されたフォルダパスを設定します。

4.StateMachineGenerator.vi」をバッチファイルやコマンドラインなどから呼び出します。このVIファイルは指定されると自動的に処理を開始するように設定されているので、そのまま指定したLabVIEWプロジェクトを開き(既に開かれている場合はそのまま)、その中に指定されたフォルダ直下にあるパラメータファイルを全て読み出していって順番にパラメータファイルに記載されたクラスにステートマシン処理のVIファイルとそのVI中で使用する状態遷移ステータスを示したCTLファイルを作成します。指定されたクラスが存在しない場合は作成します。指定されたクラス内に既に同名のVI及びCTLファイルが存在する場合はそれらを上書き更新します。

5.プログラム実行中はステータスバーが画面上に表示され進捗を表示します。また作成していくステートマシン処理VIファイルも表示され、自動的にブロック図が組み立てられていくのを確認できます。

2.4.5.   制限事項

クラスを新規に作成する機能ですが、作成されるクラスはステートマシン図及びそれを元に作成される入力パラメータファイル(prmファイル)の仕様より、継承関係を持たない独立したクラスとして各々作成されます。

UML図ではクラス間の関係はクラス図で表され、ステートマシン図では1つのクラス内の状態遷移が表現されています。現在のLabVIEWスケルトンコード自動生成ではクラスの自動生成は外部ツール(GDSGOOP Development Suite)等の使用を想定しています。


2.5      VIスクリプト解説

プロジェクトの構成や各プログラムファイルの詳細については「コード自動生成VI設計書.pdf」を参照してください。以下ではコード生成を実行しているVIスクリプトの概要を説明します。

なお、VIスクリプトを作成するにはLabVIEWのメニューから「ツール」→「オプション」で表示されるオプション画面で「VIサーバ」の項目から「VIスクリプトの関数、プロパティ、およびメソッドを表示」にチェックを入れる必要があります。

 

2.5.1.   VI編集

VIスクリプトではフロントパネル及びブロック図(本プログラムではブロック図がメイン)上に特定のLabVIEWオブジェクトをタイプを指定して配置(作成)し、それに対して詳細なプロパティを設定していくことで任意のコードを作成できます。

この内後者のプロパティ設定は、通常のコード編集作業で行っているのと同じプロパティを使用します。

上記VIスクリプトを例に解説します。

A

 

B

 

@  どのようなオブジェクトを作成するのかを指定します。

A  ブロック図上のどのダイアグラム(ケースやWHILE等の中)に作成するのかを指定します。

B  ダイアグラム上のどの位置に作成するのかを指定します。

C  (本例の場合はブール定数なのでTRUEFALSE)を指定します。値は作成したオブジェクトによって使用できるものが決まりますが、設定するときはVARIANTに変換して入力します。

C

 
上記例で最初にブール定数を作成するダイアグラムを指定しているライン(diagram入力リファレンス)ですが、これは先にこのブール値が配置される場所(たとえばケースストラクチャの中)を同じようにオブジェクト作成した後、そのオブジェクトのプロパティから読み出したものになります。

同じようにしてブールに値を設定している時にTerminal出力リファレンスを読み出しています。これは作成したブール定数から出力されている端子のリファレンスになり、こちらを使用してこの端子を任意のオブジェクトの端子に接続することができます。

下は上図で作成したTerminal出力端子を他の端子に接続している部分です。

黄色いアイコンから出力されているのがブール定数の出力端子になります。左から入ってきているのは同じようにして取得した別のオブジェクトの入力端子のリファレンスです。

この入力端子の”Connect Wire”(接続)メソッドにブール定数の端子を入力することで2つの端子の間にラインが接続されます。

VIスクリプトによるコード生成・編集はこの上記の

1.オブジェクトを作成する。

2.オブジェクトの内容を編集する。

3.オブジェクト間の入出力を接続する。

によって実現されます。

2.5.2.   プロジェクト編集

プロジェクトの編集もVI編集と同じになります。というよりVI編集の呼び出し上位がプロジェクトになります。

VIファイルは単独でも存在しますが通常はプロジェクトの一部です。

VIファイル自体はオブジェクトと同じようにVIスクリプトで作成されます

VIファイルではオブジェクトと異なり、どこに作成するかの指定はありません。

作成した後で、どのプロジェクトに組み込むかとファイルの実体をどのフォルダに格納するか(保存)を指定します。

先に上図中央の処理で作成したVIをファイルとして保存します。

その後、そのファイルパスを対象のプロジェクトにアイテム(要素)として追加します。

ProjectItem入力というのはプロジェクト配下のリファレンスです。LabVIEWでは開かれたプロジェクト内容はメモリに展開されているので、LabVIEW内の他のプログラムからそのリファレンスを参照できます。プロジェクトのリファレンスはプロジェクトエクスプローラ上のツリー階層内容をそのまま展開しているので、これを順番に検索していくとプロジェクトに既にあるクラスやファイルの名称やファイルパスを参照することができますし、その情報から同じフォルダやツリー位置に新規VIを追加することができます。

2.5.3.   VIファイル実行

自動生成処理の本体はStateMachineGenerator.llbファイルにパッケージ化して不用意に削除、変更されないようにしています。、外部から新規プロジェクト作成、ステートマシンスケルトンコード生成を実行するときは呼び出し用にそれぞれの機能実行用コマンドとして、MakeNewVIProject.viStateMachineGenerator.vi2つのVIファイルが用意されています。

実行呼び出し用の上記2つのファイルはVIプロパティの「実行」を「開いたら実行」と設定しておくことで、コマンドライン、エクスプローラ等からの呼び出しに応じてユーザー側でなんら操作や設定を行うことなく、自動的に処理を開始するようにしています。

また、この時の画面への表示はMakeNewVIProject.viの方は非表示。

StateMachineGenerator.viの方もメニューやフレームの表示はなく進捗のプログレスバーのみを表示します。

 

2.6      補足資料

2.6.1.   iniファイルフォーマット

本自動生成プログラムでは引数などによるパラメータの引き渡しができない為、iniファイルに必要な情報を記載し、プログラム側でこれを読み出して処理内容を確定する。

プログラム側で読み出すファイルを自動的に特定する為、ファイル名はVIAutoProject.ini固定、格納場所は実行するVIファイルと同じフォルダとする。

設定される情報は対象とするプロジェクトのパスと名称、作成するクラス/ステートマシン内容が記載されたパラメータファイルの格納先となる。

セクション

キー名

必要

内容

project

path

必須

プロジェクトを出力するフォルダへのフルパスを記載します。パスはスペースを含んだものでも""で括る必要はありません。

name

必須

作成するプロジェクト名称を指定します。

prmfile

path

必須

クラス毎にステートマシン定義が記述されたprmが格納されているフォルダへのパスを記載します。スペースを含んだものでも""で括る必要はありません。

message

任意

true/falseを定義します。(大文字小文字はどちらでも可です)出力プロジェクトに存在しないクラスへの出力がprmファイルで指定されたときに新しくクラスを作成しますが、作成時にメッセージダイアログを表示するかしないかを指定します。falseであればメッセージを表示せずに処理を続けます。

本パラメータはオプションです。message=xxxの行自体が存在しない場合はtrueの時と同じ動作(メッセージを表示)となります。

 

2.6.2.   prmファイルフォーマット

prmファイルはクラス(ブロック)毎のステートマシン図からLabVIEWのコードを自動生成する為のVIスクリプトプログラムにその内容を引き渡すための中間ファイルです。

セクション

キー名

内容

General

Block

対象のステートマシン図が所属するブロック名。この名称をクラス名として使用する

States

ステートマシン図内に存在する状態名をカンマ区切りで全て記述する。

Transition

ステートマシン図内に存在する遷移数を記述する。この個数分DetailセクションにTransition[n]キーが存在する。

Activity

ステートマシン図内に存在するアクション数を記述する。この個数分DetailセクションにActivity[n]キーが存在する。

Detail

Start

Statesに記述された状態の中から、開始状態となるものを記述する。

Transition[n]

[n]0からの連番で記述される。

各遷移の情報を、

「遷移元状態名」:「トリガ名」:「遷移先状態名」の形式で記述する。

終了状態に関連する遷移については、終了状態を<Final>として記述する。

Activity[n]

[n]0からの連番で記述される。

各状態内のアクションを、

「状態名」:「ラベル」:「アクション名」の形式で記述する。

「ラベル」名として使用できる文字は、「entry」「do」「exit」のみ。