LabVIEWで作成したDLLをTestStandで並列実行する方法

更新しました Jul 5, 2022

環境

ソフトウェア

  • LabVIEW
  • TestStand

ここではLabVIEWで作成したプログラムからC/C++ DLLを作成し、並列で実行を行う方法を確認します。DLLの実行はTestStandで行います。この手順を確認するには下記のソフトウェアが必要となります。
  • LabVIEW Professional Edition 2019以降
  • TestStand (64bit) 2019以降

DLLの並列実行を行うには下記の2点が必要です。

1) DLLが並列実行可能な形で作成されている
2) DLL実行時に並列実行されているDLLがそれぞれ固有のスレッドで実行されている


 

並列実行可能なDLLをLabVIEWで作成

LabVIEWで下記のプログラムを作成します。このプログラムはこの記事のAttachmentsから入手できます。このプログラムはキュー、トンネル、シフトレジスタ、ローカル変数等のデータ格納領域が並列実行されたそれぞれのスレッドにおいて独立した値を保持する事の確認を目的としています。このプログラムは1秒おきにタイムスタンプを取得し、キュー及びローカル変数によるデータの受け渡しを行い、別のループにてシフトレジスタもしくはトンネルにデータを格納し、タイムスタンプの確認を4回終えた後にシフトレジスタに格納されたデータを文字列として出力します。このプログラムのVIプロパティのExecutionの設定画面においてプログラムの再入実行を行う設定にする事でこのプログラムをDLL化した際に並列実行可能とします。
 
01main.png

DLLは下記のような入力値の設定をしています。
 
2dll.png


 

TestStandでDLLの並列実行を行う

TestStandにおいてある処理を複数のスレッドで並列実行する場合、メインのシーケンスファイルからサブシーケンスを呼び出す必要があります。ここではMainSequenceにおいてSequence Callを使用してSequenceを4回並列で呼び出し、実行します。Sequence Callの設定ではExecution OptionsをUse New Threadに設定します。この設定を使用するとMain Sequenceにおいて各Sequence CallのSettingsの部分がNew Threadになる事を確認できます。
 
03main.png

MainSequenceで呼び出されるSequenceにはLabVIEWで作成したDLLを呼び出すActionを設定します。ここではDLLのパスと入力値を手動で設定します。またシーケンス実行後に出力する結果をPropertiesのAdditional Resultsの部分で設定できます。
 
04actionseq.png

上記の設定でTestStandのシーケンスファイルを実行すると、下記の通り、4つのSequence Callが一斉に開始されます。その後、DLL内の処理が完了するとWaitの部分で各Sequence Callの実行終了を確認できます。
 
5exe.png

上記のシーケンスの実行後、結果を確認すると下記の通り4つのSequence CallにおいてそれぞれDLLが実行されており、ほぼ同じタイミングで4秒間のタイムスタンプ確認・データ格納・データ出力が独立して行われている事を確認できます。
 
6results.png

赤枠の部分はDLLの実行開始時間、青枠の部分は停止時間となっており、各Sequence CallによりDLLがほぼ同時に開始・停止している事が確認できます。また、タイムスタンプの確認やデータの受け渡しは独立して行われている事が確認できます。