プログラミングコース03 ー電源・デジタルマルチメータを使った回路計測ー
プログラム課題
背景
あなたはプログラマです。一緒にプロジェクトに参加している先輩エンジニアから、以下に示す「電圧計測システム」のプログラムを製作するよう頼まれました。プログラミングの前段階で用意できているものは、システム構成、要求機能のリスト、プログラム画面の3つです。
システム構成

要求機能
- 直流安定化電源の出力電圧をデジタルマルチメータで計測して、出力電圧値と計測電圧値を表とグラフに表示するプログラムを作成する。
- 開始電圧(小数点2桁)・終了電圧(小数点2桁)・増分電圧(小数点2桁)が設定できること。
- 電圧を出力した後に、電圧の計測を実行するまでの待ち時間がミリ秒単位で設定できること。
- 計測No、出力電圧(小数点2桁)、計測電圧(小数点3桁)を一覧表に表示すること。
- 計測電圧を波形チャートに表示すること。
- 計測の中断ができること。(再開できなくて良い。)
- 一覧表のデータがファイル保存(csvファイル形式:カンマ区切り)できること。
- 保存したファイルを読み込んで、一覧表と波形チャートに表示できること。
- キューメッセージハンドラ(生産者・消費者デザインパターン)を使用する。
プログラム画面

プログラミング解説
プログラムの階層構造

用語
製作の流れ

STEP1:電源のドライバを入手する
計測器メーカーまたはNational Instrumentsの公式ホームページで計測器ドライバを検索する。


STEP2:サンプルVIで電源の動作を確認する
サンプルVIを開き、適切なVISAリソースを選択して動作を確認する。

STEP3:電源ドライバVIを作成する
ドライバVI:フロントパネル

ドライバVI:ブロックダイアグラム




列挙体タイプ定義

サンプルVIを改造して、より高速に動作するドライバVIを製作する。サンプルVIの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。
- initialize:初期化
- output:出力開始
- stop:出力停止
- close:終了
STEP4:デジタルマルチメータのドライバを入手する
計測器メーカーまたはNational Instrumentsの公式ホームページで計測器ドライバを検索する。


STEP5:サンプルVIでデジタルマルチメータの動作を確認する
サンプルVIを開き、適切なVISAリソースを選択して動作を確認する。
サンプルVIのブロックダイアグラム(参考例)

STEP6:デジタルマルチメータドライバVIを作成する
ドライバVI:フロントパネル

ドライバVI:ブロックダイアグラム



列挙体タイプ定義

サンプルVIを改造して、より高速に動作するドライバVIを製作する。サンプルVIの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できる容認しておく。
- initialize:初期化
- measurement:収録
- close:終了
STEP7:CSVファイル保存VIを作成する
フロントパネル

ブロックダイアグラム

ファイルパスと計測結果(表形式)を入力パラメータとして、yyymmdd_hhmmss.csv の名称でファイル保存を行うVIを作成する。
STEP8:CSVファイル読込VIを作成する
フロントパネル

ブロックダイアグラム

ファイルパスを入力パラメータとして、計測結果とグラフ表示データを読み込むVIを作成する。
STEP9:生産者/消費者デザインパターンでメインVIを作成する
ブロックダイアグラム ※完成形

LabVIEWのテンプレートから「生産者/消費者デザインパターン(イベント)」を呼び出し、メインVIを作成する。
STEP10:キューで送信するデータを列挙体で作成する

消費者ループの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにしておく。
- initialize1:初期化処理①
- initialize2:初期化処理②
- wait:idle loop
- csv_save:計測データ保存処理
- csv_read:計測データ読込処理
- dmm_visa:DMM VISA I/F 変更処理
- power_visa:電源VISA I/F 変更処理
- measurement:収録処理
- measurement_stop:計測停止処理
- exit:プログラム終了処理
STEP11:生産者ループのイベント処理を作成する

生産者ループに以下のイベントケースを作成し、それぞれのケースでキューに【STEP10】で作成した項目を要素として追加する。
- CSV保存ボタン:値変更
- CSV読込ボタン:値変更
- 計測開始ボタン:値変更
- 停止ボタン:値変更
- Exitボタン:値変更
- DMM VISA:値変更
- Power VISA:値変更
STEP12:消費者ループ:initialize1を作成する

①スタックシーケンス0:プログラム終了時、ファイルに保存した画面設定データを読み込んで再現する処理を作成する。

②スタックシーケンス1:電源ドライバとDMMドライバの初期化処理を作成する。正常に初期化できない場合はエラーメッセージを表示する。
STEP13:消費者ループ:initialize2を作成する

計測結果一覧表、表示位置、波形チャート、計測開始ランプ、開始電圧(シフトレジスタ)、計測回数(シフトレジスタ)を初期化する。
STEP14:消費者ループ:csv_saveを作成する

CSVファイル保存VIをサブVIとして配置する。
STEP15:消費者ループ:csv_readを作成する

①CSVファイル読込VIをサブVIとして配置する。スタックシーケンス0:計測結果の表示位置、波形チャートを初期化する。

②読み込んだデータを表示する
STEP16:消費者ループ:measurementを作成する

①電圧出力を配置する。一覧表スクロールの処理、増分電圧の計算と終了の判断、計測回数のインクリメントの処理を行う。

②安定した出力値を測定するため、待ち時間を挿入する。

③電圧計測を配置する。

④グラフ表示を配置する。

⑤計測結果表示を配置する。
STEP17:消費者ループ:measurement_stopを作成する

電圧出力停止を配置する。Exitボタン有効、計測ランプと計測開始ボタンの初期化も行う。
STEP18:消費者ループ:exitを作成する

電源ドライバCloseとDMMドライバCloseを配置する。消費者ループを終了(While loopの条件にTrueを接続)する。
STEP19:消費者ループ:dmm_visaを作成する

DMMドライバCloseを実行後、initializeを配置してVISAリソースのシフトレジスタを初期化する。
STEP20:消費者ループ:power_visaを作成する

電源ドライバCloseを実施後、initializeを配置して、VISAリソースのシフトレジスタを初期化する。
STEP21:計測データ配列を生成するサブVIを作成する

測定回数、出力電圧、測定電圧を入力パラメータとして一覧表に表示する一行分の計測データ配列(文字列配列)を生成するサブVI。
STEP22:グラフ表示するサブVIを作成する

出力電圧、測定電圧を入力パラメータとして配列データを生成し、グラフに表示するサブVI。
STEP23:一覧表をスクロールさせるサブVIを作成する

現在行、設定行、制御器refnumを入力パラメータとして、現在行が設定行を超えた場合に、一覧表を垂直方向にスクロールさせるサブVI。
STEP24:出力電圧を算出し、計測終了を判定するサブVIを作成する

出力電圧、増分電圧、終了電圧を入力パラメータとして、次の出力電圧の算出と計測終了の判定を行うサブVI。
ポイントのまとめ
- GPIB接続の計測器については、NI MAXで計測器スキャンを実行することで、GPIBアドレスと機種名が確認できる
- ダウンロードした計測器ドライバは、LabVIEWのInstr.libに保存することで、関数パレットに表示できる
- ドライバVIは、Initialize→OutputまたはMeasure→Closeにケースを分割すれば、NIおよび他社の計測器も同様に作成することができる
- キューメッセージハンドラ(生産者/消費者デザインパターン)を使用し、キューで送信するメッセージはタイプ定義された列挙定数を使用する
- CSVファイルは、文字列の2次元配列に変換することで簡単にWrite/Readできる
- 画面の再現には、デフォルトデータディレクトリを利用する
LabVIEW講座データの販売について
本講座で使用した動画・テキスト・プログラム一式は、プログラムデータとしての販売やDVDメディアでの販売を行っております。
自習や復習、社内研修などにご活用いただけます。
LabVIEWに関する開発支援・技術サポートのご案内
ペリテックでは、LabVIEWに関する有償技術サポートおよび受託開発サービスを提供しております。本講座で得た知識を実務に活かしたい方や、実際の業務に即した開発支援をお求めの方は、ぜひお気軽にご相談ください。
専門のエンジニアが、お客様の課題解決をサポートいたします。