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

要求機能
- パルス発生器の出力波形をオシロスコープで計測して、計測波形をグラフに表示するプログラムを製作する。
- パルス発生器に、波形パターン(正弦波・三角波・短形波)・周波数・振幅が設定できること。
- オシロスコープに、タイムベース・電圧レンジ・トリガレベルが設定できること。
- オシロスコープの計測波形を波形グラフに表示すること。
- オシロスコープの計測波形データを一覧表(Time:小数点4桁とWaveform:小数点4桁)に表示すること。
- 波形グラフに表示した波形の周波数(Hz)と振幅(Vp-p)を算出すること。
- 一覧表のデータがCSV形式(カンマ区切り)ファイル保存できること。
- 保存したファイルを読み込んで、一覧表と波形グラフに表示できること。
- キューメッセージハンドラ(生産者・消費者デザインパターン)を使用すること。
プログラム画面

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

用語
製作の流れ

STEP1:パルス発生器のドライバを入手する
計測器メーカーまたはNational Instrumrntsの公式ホームページで計測器ドライバを検索する。

STEP2:サンプルVIでパルス発生器の動作を確認する
サンプルVIのブロックダイアグラム(参考例)
サンプルVIを開き、適切なVISAリソースを選択して動作を確認する。

STEP3:パルス発生器ドライバVIを作成する
ドライバVI:フロントパネル

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



列挙体タイプ定義

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

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

STEP6:オシロスコープドライバVIを作成する
ドライバVI:フロントパネル

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




列挙体タイプ定義

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

ブロックダイアグラム

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

ブロックダイアグラム

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

LabVIEWのテンプレートから「生産者/消費者デザインパターン(イベント)」を呼び出し、メインVIを作成する。
STEP10:キューで送信するデータを列挙体で作成する
消費者ループの処理を以下のケースに分割し、タイプ定義に指定した列挙体でケースを選択できるようにし ておく。

- initialize1:初期化処理①
- initialize2:初期化処理②
- wait:idle loop
- csv_save:計測データ保存処理
- csv_read:計測データ読込処理
- setting:VISA resource 再設定
- output:波形発生処理
- input:収録処理
- stop:計測停止処理
- exit:プログラム終了処理
STEP11:生産者ループのイベント処理を作成する
生産者ループに以下のイベントケースを作成し、それぞれのケースでキューに【STEP10】で作成した項目を要素として追加する。

- CSV保存ボタン:値変更
- CSV読込ボタン:値変更
- 計測開始ボタン:値変更
- 停止ボタン:値変更
- Exitボタン:値変更
- setting:値変更
STEP12:消費者ループ:initialize1を作成する

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

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

計測結果一覧表、表示位置、波形グラフ、計測開始ランプを初期化する。
STEP14:消費者ループ:csv_saveを作成する

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

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

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

パルス発生器の波形出力を開始する。出力を安定させてから収録を行うため、待ち時間を挿入しておく。
STEP17:消費者ループ:inputを作成する

オシロスコープによる波形収録を行う。計測した波形の振幅と周波数を算出する。
STEP18:消費者ループ:outstopを作成する

パルス発生器の波形出力を停止する。計測ランプと計測開始ボタンをOFFにし、exitボタンの表示を初期化する。
STEP19:消費者ループ:exitを作成する

パルス発生器ドライバCloseとオシロスコープドライバCloseを配置する。消費者ループを終了(While loopの条件にTrueを接続)する。
STEP20:消費者ループ:settingを作成する

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