SlideShare a Scribd company logo
LabVIEW NXG Training Course
Session4 - LabVIEW NXG のプログラムフロー
Yusuke Tochigi
NXG 5.0 Version
LabVIEW NXG Training Course 2
LabVIEW NXG のプログラムフロー
プログラムにおいては
●
同じ処理を繰り返し行う
●
ボタンが押されている場合は処理の内容を変更する
●
キーボードを押したら次へ進む
など、プログラムの処理順序を定義する場合がよくあります。 LabVIEW NXG ではそれ
らを総称して「プログラムフロー」と呼びます。
このセッションでは、繰り返し処理の While ループや場合分けのケースストラクチャ、イベ
ントループ等を紹介します。
LabVIEW NXG Training Course 3
繰り返し処理
同じ処理を繰り返したい場合、
●
For ループ
●
While ループ
どちらかを使用します。繰り返す回数がわかっていれば For ループ、回数が不定な場合
は While ループを使用します。
LabVIEW NXG Training Course 4
繰り返される範囲
For/While ループで繰り返し処理を行う場合、繰り返しの対象となる範囲に注意しま
す。ループの内側のコードは繰り返し実行されますが、外側のコードは繰り返しの対象と
なりません。
下記の例では、引き算は一度だけ実行され、足し算はループの中で繰り返し実行され
ます。実行後、入力 0 は一度しか実行されないため、実行中にパネル上で値を変更し
ても、値の変更は読み取られません。一方入力 1 はループの中に置かれるため、演算
にはパネルで設定した最新値が使用されます。
1 度だけ実行されます
繰り返し実行されます
LabVIEW NXG Training Course 5
While ループ
While ループは、繰り返す回数が不定な場合に使用します。右下の停止端子に停止
条件を入力することが必須です。ループ反復端子からは、繰り返し回数が返されます。
停止端子は 2 種類あります。
●
True の場合停止 ( 左 )
●
True の場合継続 ( 右 )
ループ反復端子
停止端子
LabVIEW NXG Training Course 6
For ループ
For ループは、繰り返す回数が決まっている場合に使用します。ループカウントに入力さ
れた回数、繰り返されます。構成ペーンの設定で、停止端子を使用することもできます。
ループの実行中にエラーが発生したらループを停止、のような処理が実装可能です。
ループカウントは I32 の数値データタイプです。それ以外のデータタイプを入力すると、強
制変換されます。
ループ反復端子
LabVIEW NXG Training Course 7
ループレートの設定
繰り返しと繰り返しの間に待機時間を持たせることができます。
ループの中に待機のための関数が存在しない場合、 LabVIEW NXG は実行できる限
りの最速で、繰り返し処理を行います。これは Windows に対し過負荷となります。
次の倍数まで待機 ( ミリ秒 ) 関数をループの中に配置することで、ループを指定したタ
イミングで実行することができます。
LabVIEW NXG Training Course 8
次の倍数まで待機関数と待機関数
次の倍数まで待機 ( ミリ秒 ) と待機では挙動と目的が異なります。次の倍数まで待
機 ( ミリ秒 ) 関数は、ループレートを設定する場合に使用します。待機の関数は、コー
ド間の実行に遅延を持たせるような場合に使用します。
LabVIEW NXG Training Course 9
次の倍数まで待機関数と待機関数
これらの関数は制御の動作が異なります。次の倍数まで待機 ( ミリ秒 ) 関数は、システ
ムのミリ秒クロックが指定値の倍数になるまで実行を待機します。待機関数は指定され
た時間、実行を待機します。
この動作のため、次の倍数まで待機 ( ミリ秒 ) 関数では、最初の実行時は待機時間
が短くなる場合があります。
500 100 150 200 250 300
システムのミリ秒クロック
VI 実行
LabVIEW NXG Training Course 10
トンネル
ループをはじめとするプログラムフローオブジェクトでは、オブジェクトへのデータ入出力時に
必ずトンネルが作成されます。トンネルは構成ペーンでの設定によって、どのように入力ま
たは出力データを取り扱うか変更することができます。
LabVIEW NXG Training Course 11
トンネルの作成方法
ワイヤの作成中に、プログラミングフローオブジェクトのふちをクリックすると、トンネルが作成
できます。配線先がある場合は、直接オブジェクトに配線をすると、トンネルは自動で作
成されます。
LabVIEW NXG Training Course 12
出力トンネル
出力トンネルでは、全部で 3 つの追加モードが存在します。
●
値を自動指標付け
ループ毎に出力されるデータを配列に格納します。この例では 10 回ループが実行され
れて、 0 から 9 までの計 10 要素を持つ 1 次元配列が作成されます。
LabVIEW NXG Training Course 13
出力トンネル
●
最後の値を保持
最後に実行された結果を返します。
LabVIEW NXG Training Course 14
出力トンネル
●
値を連結
配列を順番に連結します。この例では 1 次元配列を順番に積み重ねています。
LabVIEW NXG Training Course 15
出力トンネル
条件出力を有効にすることで、ある条件を満たした値のみをトンネルから出力することが
できます。この例では、偶数のみをトンネルから出力しています。
LabVIEW NXG Training Course 16
入力トンネル
入力トンネルでは、配列の入力トンネルに対して値を自動指標付けモードの設定が可
能です。自動指標付けを有効にすると、ループの実行毎に配列から 1 要素ずつ順番に
値が取り出され、処理されます。
For ループでは、ループの実行回数はループカウントと、入力された自動指標付けが有
効な配列の中で、最も値の小さい回数になります。下記の例では、 For ループの実行
回数は 3 回です。
LabVIEW NXG Training Course 17
自動指標付け入力の例
この例では、 For ループは 5 回実行されます。 100 ミリ秒ごとに出力数値表示器に、
10, 20, 30, 40, 50 の順で値が表示されます。
LabVIEW NXG Training Course 18
自動指標付けの例
2 次元配列における自動指標付けについて紹介します。自動指標付けを有効にした
状態で For ループに入力した場合、 1 行ずつデータが処理されます。
For ループを 2 重に作成した場合、トンネルの設定が値を自動指標付けになっている
場合、 2 次元配列を作成することができます。
LabVIEW NXG Training Course 19
自動指標付けの注意点
出力トンネルに値を自動指標付けまたは値を連結を使用する場合、継続的に配列に
新規要素を追加するため、常に配列サイズが増えます。よって長時間の実行では、メモ
リオーバーフローとなる可能性があります。
そのため While ループの出力トンネルはデータをフォルトで最後の値を保持に、 For ル
ープは値を自動指標付けになっています。
入力トンネルでも、 For ループは配列トンネルを作成した場合、値を自動指標付けが
デフォルトになります。
LabVIEW NXG Training Course 20
前回の値を使用する
移動平均など、前回までの処理結果を使用して演算を行う場合、繰り返し処理の N
回前のデータを使用します。 LabVIEW NXG ではシフトレジスタを使用して、前回のデ
ータを使用することができます。
LabVIEW NXG Training Course 21
シフトレジスタの作成
シフトレジスタを作成するには、ループのふちの上で右クリックし、シフトレジスタを作成ま
たは、構成ペーンのシフトレジスタを作成を選択します。
シフトレジスタを初めて作成したとき、シフトレジスタの色は黒色です。 LabVIEW NXG
で黒色は、データタイプが定義されておらずエラーとなることを示します。
LabVIEW NXG Training Course 22
シフトレジスタの構造
シフトレジスタは左右のノードがセットで存在します。右ノードに次に渡すデータを入力
し、左ノードから一回前に入力されたデータを出力します。
シフトレジスタの左ノードは下に引き延ばし、表示数を増やせます。これにより、 N 回前
のデータまで取得することが可能です。
LabVIEW NXG Training Course 23
シフトレジスタの初期化
初期化によって、シフトレジスタを初期化できます。以下の例では 1 回目の実行後、出
力表示器の結果は「 10 」です。 2 回目では「 20 」です。初期化されていないため、実
行回数によって結果が変わります。
左ノードへ初期値を入力することで初期化できます。この場合実行回数にかかわらず、
出力表示器の結果は「 10 」です。
LabVIEW NXG Training Course 24
シフトレジスタの注意点
シフトレジスタは便利ですが、パソコン内部のメモリを使用していることに注意します。例
えば以下の例では、ループが実行されるたびに配列に要素を追加します。配列サイズは
無限ではないため、いずれメモリオーバーフローが発生します。
こういった場合には事前に必要なだけの配列を確保し、ループ毎に配列要素を置き換
えていくようなコーディングが必要です。
LabVIEW NXG Training Course 25
フィードバックノード
フィードバックノードはシフトレジスタと同じで、前回のデータを返します。構成ペーンで逆
方向 / 順方向を設定できますが、これらは見た目の違いのみです。逆方向では上から
初期値、右側へ次のループへのデータを入力し、左側から 1 回前の入力値が返されま
す。順方向では左右逆転します。
有効端子を使用すると、フィードバックノードに値を保持する / しないを選択できます。
LabVIEW NXG Training Course 26
フィードバックノード
有効端子の例を紹介します。ここでは反復端子の値が偶数の場合、有効端子に
True が入力されます。フィードバックノードは有効端子が True の時は値を内部に保持
します。よってこの例では、奇数はフィードバックノードに保持されず、出力されません。
LabVIEW NXG Training Course 27
条件に基づき実行する
例えば
●
ボタンが押されている場合にファイル保存を行う
●
結果がしきい値より大きい場合に処理を行う
ように、条件に基づいて行う処理を変更する場合、ケースストラクチャを使用します。
LabVIEW NXG Training Course 28
ケースストラクチャの構造
ケースストラクチャはセレクタ端子に入力されたデータに基づいて、どのケースを実行する
か決定します。ケースストラクチャは複数のケースを持ち、それぞれのケースで異なる処理
を行えます。
入力データにはブール、文字列、整数、列挙体、エラークラスタ等が使用でき、データタ
イプによってケースセレクタラベルに入力できるケースが決まります。
セレクタ端子
ケースセレクタラベル
LabVIEW NXG Training Course 29
ケースセレクタラベル
セレクタ端子へ入力されるデータタイプによって、ケースセレクタラベルで使用可能な入力
が異なります。
●
ブール
True と False の 2 通りです
●
数値
数値が入力できます。「 1,2,3 」のようにカンマで区切れば、複数数値を指定できます。
「 10..20 」で範囲指定、「 ..100 」で上下限の範囲指定が可能です。
●
文字列
文字列が入力できます。カンマを使用して複数文字列を指定できます。「 a..c 」や
「 "a".."c" 」のように範囲指定が可能です。詳細はマニュアルを参照してください。
数値や文字列の場合は、デフォルトケースの指定が必須です。未定義の値がセレクタ端
子へ入力された場合、デフォルトケースが実行されます。
LabVIEW NXG Training Course 30
ケースの追加
ケースストラクチャへの新規ケースの追加、削除、デフォルトケースの設定は構成ペーンか
ら行うことができます。ケース名左側にあるアイコンでは、デフォルトケースがハイライトされ
ています。
使用できない値がケースセレクタラベルに含まれると、エラーとなります。
LabVIEW NXG Training Course 31
ケースストラクチャのトンネル
ケースストラクチャでも For/While ループと同様にデータの入出力時、トンネルが作成さ
れます。ケースストラクチャでは出力トンネルについて注意が必要です。以下の例では
「 3.. 」ケースの場合は 10 が出力されますが、他のケースでの出力が定義がされていな
いためエラーとなります。
この場合、すべてのケースで出力トンネルにデータを配線するか、右クリックメニューまたは
構成ペーンから、配線されていない場合、デフォルトを使用を選択します。デフォルト値
はデータタイプによって定義されています。
LabVIEW NXG Training Course 32
列挙体を用いたケースストラクチャ
列挙体を使用することで、ケースストラクチャでの開発をよりスムーズに行うことができま
す。ケースストラクチャへ列挙体を入力すると、セレクタラベルが項目名に変化します。
列挙体の項目が多い場合、すべての項目ケースが表示される訳ではありません。ケース
ストラクチャを右クリックし、ケース 》 すべての値にケースを追加を選択することで、すべて
の項目ケースが作成されます。
列挙体を使用すると、データの意味がより明確になるため、開発 / 運用どちらにも大き
なメリットがあります。
LabVIEW NXG Training Course 33
イベント駆動
パネル上でのマウスクリックやキーボード操作など、オペレーターの UI 操作を検知して、
特定の処理を行うことが可能です。処理実行前にイベントの発生を待機する方式をイ
ベント駆動型プログラミングと呼びます。
イベント駆動ではなく、常に値変化を監視する「ポーリング」という手法もあります。ポーリ
ングはパソコンに負荷がかかったり、値の変化を見逃す可能性があるのであまり使用せ
ず、できるだけイベント駆動で開発を行います。
パネル上のユーザー操作 操作に基づいた処理実行
LabVIEW NXG Training Course 34
イベントストラクチャ
LabVIEW NXG でイベント駆動プログラミングを行う場合、イベントストラクチャを使用
します。多くの場合、イベントストラクチャは While ループと一緒に使用されます。イベン
トストラクチャはイベントが発生するまで待機するため、ループも待機状態になります。
イベントフィルタ
イベントデータ
イベントタイムアウト
イベントセレクタラベル
LabVIEW NXG Training Course 35
イベントストラクチャの構成要素
●
イベントタイムアウト
最小 1 つのイベントケースにおいてタイムアウトイベントが選択されている場合に表示さ
れます。設定された時間内に他のイベントが発生しなければ、タイムアウトイベントケース
が実行されます。
●
イベントセレクタラベル
現在表示されているケースを実行するイベントの種類を示します。ドロップダウン矢印をク
リックすると、使用可能なイベントケースが表示されます。
●
イベントデータ
イベント発生時にイベントストラクチャが返すデータです。値変更イベントであれば旧値と
新規値、マウスダウンイベントであればマウスダウン位置など、イベントに応じて返されるデ
ータは異なります。
●
イベントフィルタ
通知イベントで表示されるノードです。通知イベントは、イベント名の末尾に疑問符がつ
いています。通知イベントではイベントフィルタを使用することで、ユーザインタフェースがデ
ータを処理する前に、特定のデータを変更することが可能です。
LabVIEW NXG Training Course 36
イベントケースの追加と編集
イベントケースを新規に追加する場合、イベントストラクチャの右クリックメニューからケース
》 イベントケースを追加または構成ペーンで + を選択します。
イベントを編集する場合は、イベントセレクタラベルのイベントの種類を左クリックして、イ
ベントソース → イベントタイプの順でイベントを設定します。 1 つのイベントケースに複
数のイベントソースを使用できます。
LabVIEW NXG Training Course 37
イベントの種類
イベントストラクチャが取り扱うことのできる代表的なイベントを紹介します。
●
値変更
制御器の値が変更された
●
キー
特定の制御器がフォーカスされた状態でキーボードが押される
●
マウス
特定のオブジェクトをクリックしたり、マウスオーバーする
●
タイムアウト
指定時間、イベントストラクチャで定義されたイベントが発生しない
●
ウィンドウ
ウィンドウが閉じられる
LabVIEW NXG Training Course 38
イベントストラクチャの使用例
以下の例では、 Stop 制御器が押されて値が変更されると、イベントストラクチャが実行
され While ループが停止されます。
この例では、制御器をイベントストラクチャの中に入れることは重要です。 Stop 制御器
はラッチ動作です。ラッチ動作の制御器を未配置の項目やループ外に置くと、値が読ま
れずラッチ動作は発生しません。
LabVIEW NXG Training Course 39
イベントストラクチャの注意点
イベントストラクチャは内部にバッファを持ち、発生したイベントを順番に処理します。例え
ばボタンを高速で連打した場合、連打の回数分イベントは発生し、処理が行われます。
これによりイベントの処理待ちが発生し、 UI の応答性が悪くなります。
よってイベントストラクチャの中では、時間のかかる処理の実装を避けます。完了までパ
ネルのイベント処理を一時停止を有効にすると、処理の完了までパネルがロックされま
す。処理に時間がかかると、アプリケーションがハングしたように見えるので、注意が必要
です。
イベントストラクチャは 1 つの VI につき 1 つとします。複数のイベントストラクチャではお
互いが競合し、予期せぬ動作をすることがあります。
LabVIEW NXG Training Course 40
シーケンスストラクチャ
映画フィルムのコマのようなもので、フレームを左から順番に処理します。実行の順番を
明示的に定義できる便利なものですが、 Windows での開発では本来の目的では使
用しません。
以下の例は、ファイルを開く関数でエラーが発生しても、サブ関数は実行されてしまいま
す。シーケンスストラクチャは途中で停止ができないので、すぐに処理を停止したい場合
でも、すべてのフレームが実行される必要があります。これはシーケンスストラクチャではな
く、エラーワイヤなどの配線を用いることで実行順序を定義するようにします。
LabVIEW NXG Training Course 41
シーケンスストラクチャの使用例
関数間の実行に遅延を持たせたいような場合、シーケンスストラクチャを活用することが
できます。以下のようにシーケンスストラクチャは 1 つのフレームのみで使用ケースが多くあ
ります。
一方 FPGA で開発を行う場合には、シーケンスストラクチャは非常に有用です。 FPGA
ではエラー配線がないので、実行の順序を定義することが難しいためです。詳細は
FPGA のトレーニングで紹介します。
LabVIEW NXG Training Course 42
その他のプログラミングフロー
●
In Place 要素ストラクチャ
データ値リファレンス (DVR) や大規模な配列、クラスタを処理する場合にメモリ使用量
を減らし、プログラム効率を向上します
●
タイミングループ
指定された周期で繰り返し処理を行います。タイミングループは正確なタイミングを必要
とするアプリケーションで使用されますが、 Windows OS で使用することはあまりなく、
Real-Time OS で使用します
●
無効ストラクチャ
特定の処理を無効化する場合に使用します。デバッグ用途で使用されたり、無効化に
条件を付与することができるので、特定の OS でのみ実行されるコードを実装することも
できます

More Related Content

Similar to Session4 - LabVIEW NXG Training Cours

知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
 
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章
Haruki Eguchi
 
Das 2015
Das 2015Das 2015
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classification
Nasuka Sumino
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
Tomohiro Namba
 
Java研修
Java研修Java研修
Java研修
iPride Co., Ltd.
 
Rails A/B testing by split gem
Rails A/B testing by split gemRails A/B testing by split gem
Rails A/B testing by split gem
Ryuma Tsukano
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
Shiqiao Du
 
MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
NTT Software Innovation Center
 
Test Plugins
Test PluginsTest Plugins
Test Pluginsykhr
 
Using Deep Learning for Recommendation
Using Deep Learning for RecommendationUsing Deep Learning for Recommendation
Using Deep Learning for Recommendation
Eduardo Gonzalez
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
Hiro Yoshioka
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
Hiro Yoshioka
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
Satoshi imai
 
Guiding neural machine translation with retrieved translation pieces
Guiding neural machine translation with retrieved translation piecesGuiding neural machine translation with retrieved translation pieces
Guiding neural machine translation with retrieved translation pieces
Satoru Katsumata
 
Deep Learning Demonstration using Tensorflow (7th lecture)
Deep Learning Demonstration using Tensorflow (7th lecture)Deep Learning Demonstration using Tensorflow (7th lecture)
Deep Learning Demonstration using Tensorflow (7th lecture)
Parth Nandedkar
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
Takuto Wada
 

Similar to Session4 - LabVIEW NXG Training Cours (20)

知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
 
[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章[第2版]Python機械学習プログラミング 第13章
[第2版]Python機械学習プログラミング 第13章
 
Das 2015
Das 2015Das 2015
Das 2015
 
Toxic comment classification
Toxic comment classificationToxic comment classification
Toxic comment classification
 
研究生のためのC++ no.7
研究生のためのC++ no.7研究生のためのC++ no.7
研究生のためのC++ no.7
 
Java研修
Java研修Java研修
Java研修
 
Rails A/B testing by split gem
Rails A/B testing by split gemRails A/B testing by split gem
Rails A/B testing by split gem
 
C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
 
Test Plugins
Test PluginsTest Plugins
Test Plugins
 
Using Deep Learning for Recommendation
Using Deep Learning for RecommendationUsing Deep Learning for Recommendation
Using Deep Learning for Recommendation
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
Guiding neural machine translation with retrieved translation pieces
Guiding neural machine translation with retrieved translation piecesGuiding neural machine translation with retrieved translation pieces
Guiding neural machine translation with retrieved translation pieces
 
Deep Learning Demonstration using Tensorflow (7th lecture)
Deep Learning Demonstration using Tensorflow (7th lecture)Deep Learning Demonstration using Tensorflow (7th lecture)
Deep Learning Demonstration using Tensorflow (7th lecture)
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 

More from Yusuke Tochigi

LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
Yusuke Tochigi
 
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
Yusuke Tochigi
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
 
LabVIEW NXG OOP Training
LabVIEW NXG OOP TrainingLabVIEW NXG OOP Training
LabVIEW NXG OOP Training
Yusuke Tochigi
 
Session9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training CourseSession9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training CourseSession8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training CourseSession7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session11 - LabVIEW NXG Training Course
Session11 - LabVIEW NXG Training CourseSession11 - LabVIEW NXG Training Course
Session11 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training CourseSession6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training CourseSession5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session3 - LabVIEW NXG Training Course
Session3 - LabVIEW NXG Training CourseSession3 - LabVIEW NXG Training Course
Session3 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Session1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training CourseSession1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training Course
Yusuke Tochigi
 
Intro - LabVIEW NXG Training Course
Intro - LabVIEW NXG Training CourseIntro - LabVIEW NXG Training Course
Intro - LabVIEW NXG Training Course
Yusuke Tochigi
 
Automotive QMS IATF16949
Automotive QMS IATF16949Automotive QMS IATF16949
Automotive QMS IATF16949
Yusuke Tochigi
 

More from Yusuke Tochigi (14)

LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020LabVIEW NXG Current Status @ 2020
LabVIEW NXG Current Status @ 2020
 
Test Driven Development in LabVIEW
Test Driven Development in LabVIEWTest Driven Development in LabVIEW
Test Driven Development in LabVIEW
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
LabVIEW NXG OOP Training
LabVIEW NXG OOP TrainingLabVIEW NXG OOP Training
LabVIEW NXG OOP Training
 
Session9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training CourseSession9 - LabVIEW NXG Training Course
Session9 - LabVIEW NXG Training Course
 
Session8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training CourseSession8 - LabVIEW NXG Training Course
Session8 - LabVIEW NXG Training Course
 
Session7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training CourseSession7 - LabVIEW NXG Training Course
Session7 - LabVIEW NXG Training Course
 
Session11 - LabVIEW NXG Training Course
Session11 - LabVIEW NXG Training CourseSession11 - LabVIEW NXG Training Course
Session11 - LabVIEW NXG Training Course
 
Session6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training CourseSession6 - LabVIEW NXG Training Course
Session6 - LabVIEW NXG Training Course
 
Session5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training CourseSession5 - LabVIEW NXG Training Course
Session5 - LabVIEW NXG Training Course
 
Session3 - LabVIEW NXG Training Course
Session3 - LabVIEW NXG Training CourseSession3 - LabVIEW NXG Training Course
Session3 - LabVIEW NXG Training Course
 
Session1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training CourseSession1 - LabVIEW NXG Training Course
Session1 - LabVIEW NXG Training Course
 
Intro - LabVIEW NXG Training Course
Intro - LabVIEW NXG Training CourseIntro - LabVIEW NXG Training Course
Intro - LabVIEW NXG Training Course
 
Automotive QMS IATF16949
Automotive QMS IATF16949Automotive QMS IATF16949
Automotive QMS IATF16949
 

Session4 - LabVIEW NXG Training Cours

  • 1. LabVIEW NXG Training Course Session4 - LabVIEW NXG のプログラムフロー Yusuke Tochigi NXG 5.0 Version
  • 2. LabVIEW NXG Training Course 2 LabVIEW NXG のプログラムフロー プログラムにおいては ● 同じ処理を繰り返し行う ● ボタンが押されている場合は処理の内容を変更する ● キーボードを押したら次へ進む など、プログラムの処理順序を定義する場合がよくあります。 LabVIEW NXG ではそれ らを総称して「プログラムフロー」と呼びます。 このセッションでは、繰り返し処理の While ループや場合分けのケースストラクチャ、イベ ントループ等を紹介します。
  • 3. LabVIEW NXG Training Course 3 繰り返し処理 同じ処理を繰り返したい場合、 ● For ループ ● While ループ どちらかを使用します。繰り返す回数がわかっていれば For ループ、回数が不定な場合 は While ループを使用します。
  • 4. LabVIEW NXG Training Course 4 繰り返される範囲 For/While ループで繰り返し処理を行う場合、繰り返しの対象となる範囲に注意しま す。ループの内側のコードは繰り返し実行されますが、外側のコードは繰り返しの対象と なりません。 下記の例では、引き算は一度だけ実行され、足し算はループの中で繰り返し実行され ます。実行後、入力 0 は一度しか実行されないため、実行中にパネル上で値を変更し ても、値の変更は読み取られません。一方入力 1 はループの中に置かれるため、演算 にはパネルで設定した最新値が使用されます。 1 度だけ実行されます 繰り返し実行されます
  • 5. LabVIEW NXG Training Course 5 While ループ While ループは、繰り返す回数が不定な場合に使用します。右下の停止端子に停止 条件を入力することが必須です。ループ反復端子からは、繰り返し回数が返されます。 停止端子は 2 種類あります。 ● True の場合停止 ( 左 ) ● True の場合継続 ( 右 ) ループ反復端子 停止端子
  • 6. LabVIEW NXG Training Course 6 For ループ For ループは、繰り返す回数が決まっている場合に使用します。ループカウントに入力さ れた回数、繰り返されます。構成ペーンの設定で、停止端子を使用することもできます。 ループの実行中にエラーが発生したらループを停止、のような処理が実装可能です。 ループカウントは I32 の数値データタイプです。それ以外のデータタイプを入力すると、強 制変換されます。 ループ反復端子
  • 7. LabVIEW NXG Training Course 7 ループレートの設定 繰り返しと繰り返しの間に待機時間を持たせることができます。 ループの中に待機のための関数が存在しない場合、 LabVIEW NXG は実行できる限 りの最速で、繰り返し処理を行います。これは Windows に対し過負荷となります。 次の倍数まで待機 ( ミリ秒 ) 関数をループの中に配置することで、ループを指定したタ イミングで実行することができます。
  • 8. LabVIEW NXG Training Course 8 次の倍数まで待機関数と待機関数 次の倍数まで待機 ( ミリ秒 ) と待機では挙動と目的が異なります。次の倍数まで待 機 ( ミリ秒 ) 関数は、ループレートを設定する場合に使用します。待機の関数は、コー ド間の実行に遅延を持たせるような場合に使用します。
  • 9. LabVIEW NXG Training Course 9 次の倍数まで待機関数と待機関数 これらの関数は制御の動作が異なります。次の倍数まで待機 ( ミリ秒 ) 関数は、システ ムのミリ秒クロックが指定値の倍数になるまで実行を待機します。待機関数は指定され た時間、実行を待機します。 この動作のため、次の倍数まで待機 ( ミリ秒 ) 関数では、最初の実行時は待機時間 が短くなる場合があります。 500 100 150 200 250 300 システムのミリ秒クロック VI 実行
  • 10. LabVIEW NXG Training Course 10 トンネル ループをはじめとするプログラムフローオブジェクトでは、オブジェクトへのデータ入出力時に 必ずトンネルが作成されます。トンネルは構成ペーンでの設定によって、どのように入力ま たは出力データを取り扱うか変更することができます。
  • 11. LabVIEW NXG Training Course 11 トンネルの作成方法 ワイヤの作成中に、プログラミングフローオブジェクトのふちをクリックすると、トンネルが作成 できます。配線先がある場合は、直接オブジェクトに配線をすると、トンネルは自動で作 成されます。
  • 12. LabVIEW NXG Training Course 12 出力トンネル 出力トンネルでは、全部で 3 つの追加モードが存在します。 ● 値を自動指標付け ループ毎に出力されるデータを配列に格納します。この例では 10 回ループが実行され れて、 0 から 9 までの計 10 要素を持つ 1 次元配列が作成されます。
  • 13. LabVIEW NXG Training Course 13 出力トンネル ● 最後の値を保持 最後に実行された結果を返します。
  • 14. LabVIEW NXG Training Course 14 出力トンネル ● 値を連結 配列を順番に連結します。この例では 1 次元配列を順番に積み重ねています。
  • 15. LabVIEW NXG Training Course 15 出力トンネル 条件出力を有効にすることで、ある条件を満たした値のみをトンネルから出力することが できます。この例では、偶数のみをトンネルから出力しています。
  • 16. LabVIEW NXG Training Course 16 入力トンネル 入力トンネルでは、配列の入力トンネルに対して値を自動指標付けモードの設定が可 能です。自動指標付けを有効にすると、ループの実行毎に配列から 1 要素ずつ順番に 値が取り出され、処理されます。 For ループでは、ループの実行回数はループカウントと、入力された自動指標付けが有 効な配列の中で、最も値の小さい回数になります。下記の例では、 For ループの実行 回数は 3 回です。
  • 17. LabVIEW NXG Training Course 17 自動指標付け入力の例 この例では、 For ループは 5 回実行されます。 100 ミリ秒ごとに出力数値表示器に、 10, 20, 30, 40, 50 の順で値が表示されます。
  • 18. LabVIEW NXG Training Course 18 自動指標付けの例 2 次元配列における自動指標付けについて紹介します。自動指標付けを有効にした 状態で For ループに入力した場合、 1 行ずつデータが処理されます。 For ループを 2 重に作成した場合、トンネルの設定が値を自動指標付けになっている 場合、 2 次元配列を作成することができます。
  • 19. LabVIEW NXG Training Course 19 自動指標付けの注意点 出力トンネルに値を自動指標付けまたは値を連結を使用する場合、継続的に配列に 新規要素を追加するため、常に配列サイズが増えます。よって長時間の実行では、メモ リオーバーフローとなる可能性があります。 そのため While ループの出力トンネルはデータをフォルトで最後の値を保持に、 For ル ープは値を自動指標付けになっています。 入力トンネルでも、 For ループは配列トンネルを作成した場合、値を自動指標付けが デフォルトになります。
  • 20. LabVIEW NXG Training Course 20 前回の値を使用する 移動平均など、前回までの処理結果を使用して演算を行う場合、繰り返し処理の N 回前のデータを使用します。 LabVIEW NXG ではシフトレジスタを使用して、前回のデ ータを使用することができます。
  • 21. LabVIEW NXG Training Course 21 シフトレジスタの作成 シフトレジスタを作成するには、ループのふちの上で右クリックし、シフトレジスタを作成ま たは、構成ペーンのシフトレジスタを作成を選択します。 シフトレジスタを初めて作成したとき、シフトレジスタの色は黒色です。 LabVIEW NXG で黒色は、データタイプが定義されておらずエラーとなることを示します。
  • 22. LabVIEW NXG Training Course 22 シフトレジスタの構造 シフトレジスタは左右のノードがセットで存在します。右ノードに次に渡すデータを入力 し、左ノードから一回前に入力されたデータを出力します。 シフトレジスタの左ノードは下に引き延ばし、表示数を増やせます。これにより、 N 回前 のデータまで取得することが可能です。
  • 23. LabVIEW NXG Training Course 23 シフトレジスタの初期化 初期化によって、シフトレジスタを初期化できます。以下の例では 1 回目の実行後、出 力表示器の結果は「 10 」です。 2 回目では「 20 」です。初期化されていないため、実 行回数によって結果が変わります。 左ノードへ初期値を入力することで初期化できます。この場合実行回数にかかわらず、 出力表示器の結果は「 10 」です。
  • 24. LabVIEW NXG Training Course 24 シフトレジスタの注意点 シフトレジスタは便利ですが、パソコン内部のメモリを使用していることに注意します。例 えば以下の例では、ループが実行されるたびに配列に要素を追加します。配列サイズは 無限ではないため、いずれメモリオーバーフローが発生します。 こういった場合には事前に必要なだけの配列を確保し、ループ毎に配列要素を置き換 えていくようなコーディングが必要です。
  • 25. LabVIEW NXG Training Course 25 フィードバックノード フィードバックノードはシフトレジスタと同じで、前回のデータを返します。構成ペーンで逆 方向 / 順方向を設定できますが、これらは見た目の違いのみです。逆方向では上から 初期値、右側へ次のループへのデータを入力し、左側から 1 回前の入力値が返されま す。順方向では左右逆転します。 有効端子を使用すると、フィードバックノードに値を保持する / しないを選択できます。
  • 26. LabVIEW NXG Training Course 26 フィードバックノード 有効端子の例を紹介します。ここでは反復端子の値が偶数の場合、有効端子に True が入力されます。フィードバックノードは有効端子が True の時は値を内部に保持 します。よってこの例では、奇数はフィードバックノードに保持されず、出力されません。
  • 27. LabVIEW NXG Training Course 27 条件に基づき実行する 例えば ● ボタンが押されている場合にファイル保存を行う ● 結果がしきい値より大きい場合に処理を行う ように、条件に基づいて行う処理を変更する場合、ケースストラクチャを使用します。
  • 28. LabVIEW NXG Training Course 28 ケースストラクチャの構造 ケースストラクチャはセレクタ端子に入力されたデータに基づいて、どのケースを実行する か決定します。ケースストラクチャは複数のケースを持ち、それぞれのケースで異なる処理 を行えます。 入力データにはブール、文字列、整数、列挙体、エラークラスタ等が使用でき、データタ イプによってケースセレクタラベルに入力できるケースが決まります。 セレクタ端子 ケースセレクタラベル
  • 29. LabVIEW NXG Training Course 29 ケースセレクタラベル セレクタ端子へ入力されるデータタイプによって、ケースセレクタラベルで使用可能な入力 が異なります。 ● ブール True と False の 2 通りです ● 数値 数値が入力できます。「 1,2,3 」のようにカンマで区切れば、複数数値を指定できます。 「 10..20 」で範囲指定、「 ..100 」で上下限の範囲指定が可能です。 ● 文字列 文字列が入力できます。カンマを使用して複数文字列を指定できます。「 a..c 」や 「 "a".."c" 」のように範囲指定が可能です。詳細はマニュアルを参照してください。 数値や文字列の場合は、デフォルトケースの指定が必須です。未定義の値がセレクタ端 子へ入力された場合、デフォルトケースが実行されます。
  • 30. LabVIEW NXG Training Course 30 ケースの追加 ケースストラクチャへの新規ケースの追加、削除、デフォルトケースの設定は構成ペーンか ら行うことができます。ケース名左側にあるアイコンでは、デフォルトケースがハイライトされ ています。 使用できない値がケースセレクタラベルに含まれると、エラーとなります。
  • 31. LabVIEW NXG Training Course 31 ケースストラクチャのトンネル ケースストラクチャでも For/While ループと同様にデータの入出力時、トンネルが作成さ れます。ケースストラクチャでは出力トンネルについて注意が必要です。以下の例では 「 3.. 」ケースの場合は 10 が出力されますが、他のケースでの出力が定義がされていな いためエラーとなります。 この場合、すべてのケースで出力トンネルにデータを配線するか、右クリックメニューまたは 構成ペーンから、配線されていない場合、デフォルトを使用を選択します。デフォルト値 はデータタイプによって定義されています。
  • 32. LabVIEW NXG Training Course 32 列挙体を用いたケースストラクチャ 列挙体を使用することで、ケースストラクチャでの開発をよりスムーズに行うことができま す。ケースストラクチャへ列挙体を入力すると、セレクタラベルが項目名に変化します。 列挙体の項目が多い場合、すべての項目ケースが表示される訳ではありません。ケース ストラクチャを右クリックし、ケース 》 すべての値にケースを追加を選択することで、すべて の項目ケースが作成されます。 列挙体を使用すると、データの意味がより明確になるため、開発 / 運用どちらにも大き なメリットがあります。
  • 33. LabVIEW NXG Training Course 33 イベント駆動 パネル上でのマウスクリックやキーボード操作など、オペレーターの UI 操作を検知して、 特定の処理を行うことが可能です。処理実行前にイベントの発生を待機する方式をイ ベント駆動型プログラミングと呼びます。 イベント駆動ではなく、常に値変化を監視する「ポーリング」という手法もあります。ポーリ ングはパソコンに負荷がかかったり、値の変化を見逃す可能性があるのであまり使用せ ず、できるだけイベント駆動で開発を行います。 パネル上のユーザー操作 操作に基づいた処理実行
  • 34. LabVIEW NXG Training Course 34 イベントストラクチャ LabVIEW NXG でイベント駆動プログラミングを行う場合、イベントストラクチャを使用 します。多くの場合、イベントストラクチャは While ループと一緒に使用されます。イベン トストラクチャはイベントが発生するまで待機するため、ループも待機状態になります。 イベントフィルタ イベントデータ イベントタイムアウト イベントセレクタラベル
  • 35. LabVIEW NXG Training Course 35 イベントストラクチャの構成要素 ● イベントタイムアウト 最小 1 つのイベントケースにおいてタイムアウトイベントが選択されている場合に表示さ れます。設定された時間内に他のイベントが発生しなければ、タイムアウトイベントケース が実行されます。 ● イベントセレクタラベル 現在表示されているケースを実行するイベントの種類を示します。ドロップダウン矢印をク リックすると、使用可能なイベントケースが表示されます。 ● イベントデータ イベント発生時にイベントストラクチャが返すデータです。値変更イベントであれば旧値と 新規値、マウスダウンイベントであればマウスダウン位置など、イベントに応じて返されるデ ータは異なります。 ● イベントフィルタ 通知イベントで表示されるノードです。通知イベントは、イベント名の末尾に疑問符がつ いています。通知イベントではイベントフィルタを使用することで、ユーザインタフェースがデ ータを処理する前に、特定のデータを変更することが可能です。
  • 36. LabVIEW NXG Training Course 36 イベントケースの追加と編集 イベントケースを新規に追加する場合、イベントストラクチャの右クリックメニューからケース 》 イベントケースを追加または構成ペーンで + を選択します。 イベントを編集する場合は、イベントセレクタラベルのイベントの種類を左クリックして、イ ベントソース → イベントタイプの順でイベントを設定します。 1 つのイベントケースに複 数のイベントソースを使用できます。
  • 37. LabVIEW NXG Training Course 37 イベントの種類 イベントストラクチャが取り扱うことのできる代表的なイベントを紹介します。 ● 値変更 制御器の値が変更された ● キー 特定の制御器がフォーカスされた状態でキーボードが押される ● マウス 特定のオブジェクトをクリックしたり、マウスオーバーする ● タイムアウト 指定時間、イベントストラクチャで定義されたイベントが発生しない ● ウィンドウ ウィンドウが閉じられる
  • 38. LabVIEW NXG Training Course 38 イベントストラクチャの使用例 以下の例では、 Stop 制御器が押されて値が変更されると、イベントストラクチャが実行 され While ループが停止されます。 この例では、制御器をイベントストラクチャの中に入れることは重要です。 Stop 制御器 はラッチ動作です。ラッチ動作の制御器を未配置の項目やループ外に置くと、値が読ま れずラッチ動作は発生しません。
  • 39. LabVIEW NXG Training Course 39 イベントストラクチャの注意点 イベントストラクチャは内部にバッファを持ち、発生したイベントを順番に処理します。例え ばボタンを高速で連打した場合、連打の回数分イベントは発生し、処理が行われます。 これによりイベントの処理待ちが発生し、 UI の応答性が悪くなります。 よってイベントストラクチャの中では、時間のかかる処理の実装を避けます。完了までパ ネルのイベント処理を一時停止を有効にすると、処理の完了までパネルがロックされま す。処理に時間がかかると、アプリケーションがハングしたように見えるので、注意が必要 です。 イベントストラクチャは 1 つの VI につき 1 つとします。複数のイベントストラクチャではお 互いが競合し、予期せぬ動作をすることがあります。
  • 40. LabVIEW NXG Training Course 40 シーケンスストラクチャ 映画フィルムのコマのようなもので、フレームを左から順番に処理します。実行の順番を 明示的に定義できる便利なものですが、 Windows での開発では本来の目的では使 用しません。 以下の例は、ファイルを開く関数でエラーが発生しても、サブ関数は実行されてしまいま す。シーケンスストラクチャは途中で停止ができないので、すぐに処理を停止したい場合 でも、すべてのフレームが実行される必要があります。これはシーケンスストラクチャではな く、エラーワイヤなどの配線を用いることで実行順序を定義するようにします。
  • 41. LabVIEW NXG Training Course 41 シーケンスストラクチャの使用例 関数間の実行に遅延を持たせたいような場合、シーケンスストラクチャを活用することが できます。以下のようにシーケンスストラクチャは 1 つのフレームのみで使用ケースが多くあ ります。 一方 FPGA で開発を行う場合には、シーケンスストラクチャは非常に有用です。 FPGA ではエラー配線がないので、実行の順序を定義することが難しいためです。詳細は FPGA のトレーニングで紹介します。
  • 42. LabVIEW NXG Training Course 42 その他のプログラミングフロー ● In Place 要素ストラクチャ データ値リファレンス (DVR) や大規模な配列、クラスタを処理する場合にメモリ使用量 を減らし、プログラム効率を向上します ● タイミングループ 指定された周期で繰り返し処理を行います。タイミングループは正確なタイミングを必要 とするアプリケーションで使用されますが、 Windows OS で使用することはあまりなく、 Real-Time OS で使用します ● 無効ストラクチャ 特定の処理を無効化する場合に使用します。デバッグ用途で使用されたり、無効化に 条件を付与することができるので、特定の OS でのみ実行されるコードを実装することも できます