日本LabVIEWユーザーグループ

cancel
Showing results for 
Search instead for 
Did you mean: 

LabVIEWで学ぶプログラミング

 2.1 四則演算を用いた操作説明(パネル/ダイアグラム/関数/ワイヤ/制御器表示器)
  キーワード:

簡単なサンプルを動かしてみるというのも勢いがついて良いかなと思います。

 

LINXの部では自然な流れでLEDも光らせることになるだろうと思いますので、LEDの特性と電流制限抵抗の話も入れたくなると思います。そこで、簡単なVIを作ってみたので操作説明あれこれに使えないだろうかという提案です。

panel1.pngdiag1.pngpanel2.pngdiag2.png

フロントパネルでは数値表示器を何種類か使いっています。ダイアグラムは四則演算、数値やブールでのワイヤーの色、比較、列挙体、InRange and Coerce、Select、数値型変換、サブVI、Expression Node、色の表現など盛り沢山すぎるかもしれません。あるいはもっと重要なのに抜けているものもあるかも知れません。話の流れでダイアグラムを適当に追加削除しても良いと思います。

 

ストラクチャの説明の章でケース構造とホワイルループを追加して使うこともできそうです。

 

VIを添付しようとしましたが、なぜかうまくいきません。

0 Kudos
Message 11 of 295
(209 Views)

おおはしさん、ご提案ありがとうございます。

ちなみにVIですが、私も添付できませんでした。

 

推測ですが、グループはディスカッション形式になっていて、VIの添付が直接できないのではと推測します。

グループ作成の時にサンプルコード形式にしてほしいとお願いしたのですがかないませんでしたので、

申し訳ありませんがzip等にまとめて頂ければ、添付可能かと思います。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 12 of 295
(206 Views)

VIはzipにしたら添付できました。ありがとうございました。

2. LabVIEWの基本 (LabVIEW Communityのみ)
 2.1 四則演算を用いた操作説明(パネル/ダイアグラム/関数/ワイヤ/制御器表示器)
   LEDの特性や電流について例を挙げながら四則演算のプログラムを作成する。
  キーワード:
 2.2 おおはしさんサンプルAを用いた説明(ループやファイルI/Oなど)
  キーワード:
 2.3 サンプルB(Aで説明しなかったところも)
  キーワード:

2.1の部分キーワードと話の流れ(ストーリー)を"LEDと電流制限抵抗"を使った場合で考えてみました。長くなりますがご容赦。

大筋了解していただけるようであればこの調子で、「2.1.4 プログラムの流れを作る」でケース構造とホワイルループを導入しようと思います。

かなりイメージと離れてしまっているようであればストップをかけてください。

 

 

 

<<< NXGと違うかもしれませんが適宜修正できると思います >>>
2.1.1 LabVIEWプログラムを使ってみる
[キーワード] フロントパネル、実行ボタン、連続実行ボタン、停止ボタン、一時停止ボタン、制御器、表示器、
[ストーリー]
(1)”LEDと電流制限抵抗”VIの実行ボタンを押すとLED表示の色が明るくなる。電流(A)と電流(mA)の値が変化する。


(2)抵抗ダイヤルを回して抵抗値を変えて実行ボタンを押して結果を見る。


(3)連続実行ボタンを押して、電源電圧や抵抗値やLEDの特性を変えて、LEDの明るさの変化、電流の変化、LED破損ランプの状態を観察する。


(4)特に電源電圧が一般的な基板の電源電圧である5V、3.3V、1.8Vから選択できる点、Vfが0.1づつ変化することや負の数字にならない点、LEDの最大電流が1ずつ増減することやマイナスにならない点に注意する。電流も負の数値にはならないことに注意する。

 

 

2.1.2 LabVIEWプログラムをのぞいてみる
[キーワード] ブロックダイアグラム、制御器・表示器の端子、端子とワイヤーの色、ハイライト実行ボタン、データフロー(再確認)、関数アイコン、ヘルプ、サブVI、
[ストーリー]
(1)ブロックダイアグラムを開いてプログラムを概観する。端子やワイヤーの色に注意する。端子はパネルの制御器・表示器に対応していることに注意する。


(2)ハイライト実行ボタンをONにして、実行ボタンを押しデータの流れを見る。関数の入力端子にデータがそろってから関数からデータが出力される点に注意する。


(3)関数アイコンからなんとなく機能が想像できる点に注意する。ヘルプを表示して関数の入出力を確認する。


(4)サブVIをダブルクリックしてフロントパネルを開き、ブロックダイアグラムも表示する。サブVIを作成すれば、LabVIEWで用意されている関数のようにプログラムで使うことができる点を確認する。

 

 

2.1.3 簡単なプログラムを作る
[キーワード] 新規VI、Ctrl+T、制御器パレット、関数パレット、ツールパレット、ドラッグドロップ、ワイヤリングツール、プロパティ、数値制御器・表示器、ブール制御器・表示器、

[ストーリー]
(1)ファイルメニューから新規VIを開く。Ctrl+Tでフロントパネルとブロックダイアグラムを並べて表示する。ウィンドウメニューで左右に並べるか上下に並べるか選ぶことができる。(Ctrl+Tのようなキーボードショートカットはコラムにまとめる。)


(2)制御器パレット、関数パレット、ツールパレットを紹介する。制御器パレットには数値でもレバーやダイアルやタンクなど様々な種類が用意されていることを見る。関数パレットも機能ごとに豊富な関数が用意されていることを確認する。ヘルプで機能と入出力を確認できる。


(3)数値制御器3個と数値表示器1個を作成する。数値制御器の名前を”電源電圧(V)”、”順方向電圧(V)”、”抵抗(Ω)”、数値表示器の名前を”電流(A)”とする。ブロックダイアグラムにも端子が作成されていることに注意する。


(4)ブロックダイアグラムで減算関数をドラッグドロップして、ワイヤリングツールで”電源電圧(V)”と”順方向電圧(V)”の差を作り、除算関数で”抵抗(Ω)”で割り、”電流(A)”に出力する。
各制御器に色々な値を入れて”電流(A)”の値を確認する。


(5)数値制御器”順方向電圧(V)”の増減ボタンを操作すると1ずつ増減するので使いにくいことを確認する。プロパティを開いて0.1ずつ増減するように変更する。ついでに負の数が入力できないように変更する。ダイアグラムには現れないがプログラミングの大事な設定であることを注意。


(6)数値制御器を1個追加して”最大電流(mA)”と名付ける。ブール表示器のLEDを1個追加して”LED破損”と名付ける。電流をmA単位にして最大電流(mA)”よりも大きくなった時に”LED破損”をONにする。動作を確認する。


(7)破損したら電流が流れなくなるので、”電流(A)”は0にしたいとか、”順方向電圧(V)”が”電源電圧(V)”よりも大きい時に電流が流れないので”電流(A)”は0にしたいという機能が”LEDと電流制限抵抗”プログラムには追加されているので見直してみるように注意。

 

 

2.1.4 プログラムの流れを作る
[キーワード] ホワイルループ、条件端子、次のミリ秒倍数まで待機関数、ポップアップメニュー、ケース構造、セレクタラベル、列挙体、現在の値をデフォルトにする

 

[ストーリー]
(1)作成したダイアグラムの全体を囲むようにホワイルループを作成する。条件端子を右クリックしポップアップメニューから制御器を作成する。次のミリ秒倍数まで待機関数で100msec間隔でループが実行されるようにする。ここでもアイコンの左側を右クリックして定数を作成できることに注意する。ハイライト実行ボタンをONにしてプログラムが実行される様子を観察する。


(2)”電流(mA)”という名前の数値表示器を追加してmA単位の電流値が表示されるようプログラムする。ケース構造を追加して、LED破損が”True”の場合に”電流(A)”と”電流(mA)”に0が表示され、LED破損が”False”の場合には正しい値が表示されるようにする。”電源電圧”という名前の列挙体を作成する。”項目を編集”で1.8V、3.3V、5Vを項目にする。ケース構造を作成し列挙体の選択状態で1.8、3.3あるいは5の数値が出力されるようにする。ケース構造のセレクタラベルが列挙体の項目になっていることに注意。ハイライト実行ボタンをONにしてプログラムが実行される様子を観察する。


(3)プログラムを保存した後で、プログラムを閉じて、再度プログラムを開く。フロントパネルの制御器の値が初期値に戻っていることを確認する。”電源電圧”、”順方向電圧(V)”、”最大電流(mA)”、”抵抗(Ω)”をそれぞれ適当な初期値、例えば、5V、1.2V、30mA、300Ωと入力し、”現在の値をデフォルトにする”を選択し、保存する。

 




0 Kudos
Message 13 of 295
(199 Views)

なるほど、まずは使ってみるから入る点、良いですね。私は思いつきませんでした。

ご提案頂いた流れで進めることがベストと思います。

 

ある程度方針が決まってきましたので、そろそろ文章に起こしたいですね。

申し訳ないことに私はWordを持っていないので、何か別のエディタソフト (google documentやlibre office)を使うことになります。

google documentならオンラインでだれでも編集可なので、私の方で一つ作って、

それを皆さんと共有する形でまずは試してみましょう。

 

ちなみに前回お伝えしたようにNXG Communityの評価版はないようなので、

本物がリリースされるまではNXGのLINX無しか、LabVIEW Communityで作ることになりそうですね。

NXGのLINX無しということはVISA? 子どもたちには敷居高いかな...?

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 14 of 295
(182 Views)

ある程度方針が決まってきましたので、そろそろ文章に起こしたいですね。

 

文章と図を分離して、文章はテキストファイルで書いたらどうでしょうか?

スクリーンショットなどの図(.PNGファイル)は各章で連番にして、文章中で図番号で参照して書きます。

例えば栃木さんがスクリーンショットと文章を書いて、大橋がレイアウトを担当して分業することもできます。

 

本物がリリースされるまではNXGのLINX無しか、LabVIEW Communityで作ることになりそうですね。

NXG3/4は現状のLINXでArduino UNOを動かせますか? 多分動くのでしょうけれど、NXGではLINXを使ったことがないので確認です。

 

2020用のLINXはvi.libの中に入っているのですが、NXG3/4に持って行ってもバージョンが古いので動かない可能性が高いですね。新しいLINXはアイコンデザインが違うのでスクリーンショットが違うものに見えてしまいます。

 

LabVIEW CommunityだとEnum(列挙体)、Array(配列)のように書かないといけないので面倒ではありますが、英語版のLabVIEWを使おうとする人には便利かもしれません。

私はLabVIEW Community Editionに変更するというのは問題ありませんが、NXGを推進している栃木さんとしてはかなり残念感がありますか?

 

 

0 Kudos
Message 15 of 295
(176 Views)

ありがとうございます。ではご提案頂いたようにまずはテキストで記述して、

 

ここで制御器をWhileループで囲みます。

(whileループの図)

 

みたいな感じにしましょう。

 

LINX自体はNXGにインストールすらできないので、対応できるとすると

  1. LINX関連のVIをNXGにコンバートする(できるのかな...)
  2. VISAでやり取りする

になるかと思います。

 

私自身はLabVIEWでもNXGでも実はどちらでも構わないのですが、
環境が英語になるというところと、今後NIはNXGを推してくるので、
いずれNXGに置き換えるなら、いっそのこと今からと考えているところでした。うーん、悩ましいですね…

 

LINXではなく、以下のようにArduino IDEとNI-VISAでやっちゃうのもありかと思います。

ARDUINO y LabVIEW NXG #3 | Entrada Digital

その場合、もうLINXは使わないという方針に舵を取ることになりますね。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 16 of 295
(173 Views)

私自身はLabVIEWでもNXGでも実はどちらでも構わないのですが、
環境が英語になるというところと、今後NIはNXGを推してくるので、
いずれNXGに置き換えるなら、いっそのこと今からと考えているところでした。

 

英語版のCommunity Editionだからこそ、入門書があれば喜ばれるだろうと思いますので、LabVIEWでやってみませんか?

LabVIEW版があればNXGでスクリーンショットは取り直しにはなりますが構成を考える時間は少なくて済むと思います。

LabVIEW版ならば私も分担して書くこともできるので早く進むのではないでしょうか。

 

0 Kudos
Message 17 of 295
(169 Views)

では初版はLabVIEWとして、NXG communityの評価が終わったら、改めて更新を検討しましょう。

 

個人的に今回は、LabVIEW Communityに合わせてユーザー会がドキュメントを出した、

ということのほうがインパクトが強く、重要視しています。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 18 of 295
(166 Views)

2.2のキーワードとストーリー

(使用するVIを添付しました。)

 

2.2.1 あなたの趣味とLabVIEWプログラミング
[キーワード] スペクトログラム、野鳥の鳴き声、外国語の発声、音楽、
[ストーリー]
(1)LabVIEWが得意とするプログライング領域である周波数解析について紹介する。
(2)周波数解析の中でスペクトログラムは音を可視化する道具であることを紹介する。
(3)スペクトログラムを使うと野鳥の鳴き声や外国語の発声や音楽も見ることができる。

2.2.2 “SoundVIEW”を操作してみる
[キーワード] サウンドコントロールパネル、ステレオミキサー、ステートマシン、状態遷移図
[ストーリー]
(1)“SoundVIEW”はLabVIEWで作ったアプリケーションの一例です。PCのスピーカーから流れている音を同時に録音するかPCに内蔵されているマイクで拾った音を録音することができます。
使用しているPCの設定によってはPC側では入力されない場合がありますので、サウンドコントロールパネルでステレオミキサーを”有効”にしてください。
”Play”ボタンで録音された音のスペクトログラムを表示してスピーカーから音を出します。録音したデータをファイルに記録することができます。ファイルを開いて再生することができます。
ボタン操作によって普通のアプリケーションのように動作するはずです。
マイクで自分の声を録音してスペクトログラムを見ます。WEBブラウザで音楽や野鳥の声や朗読などを流しながら録音してスペクトログラムを見ます。

(2)ブロックダイアグラムを見ると、大きなホワイルループの中にケースストラクチャがあります。ケースストラクチャには8枚のサブダイアグラムがあります。ユーザーの操作に応じてケースセレクタに入力される列挙体の値が変わり、サブダイアグラムが選択的に実行されています。このようなプログラムの書き方をステートマシンと言います。

(3)詳しくはこの章の終わりの方で説明しますが、“SoundVIEW”の状態遷移図を紹介します。複雑そうな動作も小さなまとまりに分けて作ります。


2.2.3 音声の収録と再生
[キーワード] LabVIEWのサンプルVI、Finite Sound Input.vi、”Graphics & Sound”パレット、フラットシーケンスストラクチャ、ミリ秒待機関数、
[ストーリー]
(1)サンプルVIの探し方を説明します。Finite Sound Input.viを自分のフォルダに保存します。実行してマイクからの音がグラフに表示されることを確認します。デバイスIDを1にするとPCのスピーカーに送られる信号を入力にすることができます。
(2)Finite Sound Input.viをparrot.viという名前で保存してください。入力をおうむ返しで出力するプログラムを作ります。parrot.viという名前で保存したVIのブロックダイアグラムを開きます。スパナアイコンとメガネアイコン、消しゴムアイコンが並んで、最後にエラーアイコンが置かれています。関数パレットの”Graphics & Sound”パレットの
“Sound”を選択して、さらに”Output”を選択します。このパレットのスパナアイコンとメガネアイコン、消しゴムアイコンをブロックダイアグラムにドラッグドロップして図のようにアイコンを配置して配線します。数秒の間を作るためにフラットシーケンスストラクチャを作り中にミリ秒待機関数で2秒間待機させます。収録が終わり、数秒後に再生するプログラムができました。

2.2.4 波形データと配列
[キーワード] 波形データタイプ、配列、1D配列反転関数、
[ストーリー]
(1)parrot.viをreverse.viという名前で保存してください。音声を逆送りで再生するプログラムを作ります。
(2)録音した音声データはステレオデータで、2個の波形データを配列にしたもの。各チャンネルに分ける。波形データタイプの要素を説明する。配列データを取り出して”1D配列反転関数”で順番を反転して、波形データを作り再生する。配列はワイヤーが太くなっていることに注意する。

2.2.5 フォーループとシフトレジスタと配列
[キーワード] フォーループ、シフトレジスタ、1次元配列、自動指標付け、2次元配列、強度グラフ
[ストーリー]
(1)1から10までの累計を配列で出力して合計する方法とシフトレジスタで計算する方法を説明。トンネルモードの説明。
(2)フォーループの自動指標付けについて説明。
(3)2次元配列と強度グラフ紹介
(4)サイン波を生成して音を出すVIを作る。ここでは波形生成関数を使ってみました。

2.2.6 録音、再生プログラム
[キーワード] タイプ定義、LabVIEW Measurement File、
[ストーリー]
ステートマシンで“easyRecorder.vi”を作ります。ファイルの保存と読み込みはMeasurementFileへの読み書きを使用しました。
(1)プログラムの状態に対応した列挙体を作成します。初期化、録音、再生、ファイル保存、ファイル読み込み、終了の6個の状態で考えます。タイプ定義をして”my_state.ctl”として保存します。
(2)Whileループを作成し、中にケースストラクチャを作成。Whileループにシフトレジスタを作成し、Whileループの外側でmy_state.ctlの定数の”初期化”を接続します。ケースストラクチャのセレクタ端子とシフトレジスタを結線するとサブダイアグラムのケースセレクタラベルにmy_state.ctlの”初期化”と”録音”が表示されます。”録音”サブダイアグラムを表示してケースストラクチャの外枠上で右クリックしポップアップメニューから”Add Cae After“を選択し、ケースを追加します。同様にケースを追加して全てのケースを作成します。
(3)ここで、”待機”状態を忘れたことに気がつきましたので、my_state.ctlを右クリックし、”Open Type Def”を選択します。”初期化”項目の後に”待機”項目を追加して保存します。Whileループの外側に作ったmy_state.ctlの定数にも”待機”が追加されていることを確認します。このようにタイプ定義をすると後の修正が楽になります。
parrot.viの録音部分と再生部分を”録音”サブダイアグラムと”再生”サブダイアグラムにコピーします。
ファイル保存とファイルからの読み込みはMeasurementFileへの読み書きを使用しました。

 

 

0 Kudos
Message 19 of 295
(161 Views)

詳細なご検討、ありがとうございます。google documentにドキュメントを作成しました。

どなたでも編集/コメント/閲覧が可能ですので、こちらに追記いただいてもよろしいでしょうか。

 

正解のない作業ですから、ガンガン記入いただいて構いません。

まずは書くだけ書いて、整合は後でやりましょう。

 

 

ちなみに2/24-29まで出張で、ほとんど活動ができないかもしれません。

3月になったら私もドキュメントを書き始めます。

Certified LabVIEW Developer
There are only two ways to tell somebody thanks: Kudos and Marked Solutions

GCentral
0 Kudos
Message 20 of 295
(155 Views)