NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

照度を変化させるプログラムについての質問

解決済み
解決策を見る

修士研究で照明制御をするのにLabVIEWを使用させていただいています。

プログラミング経験がなく、周りに聞ける人もいないので投稿いたしました。

どなた様か、ご回答いただけますと幸いです。

 

私はLED照明を電圧制御するプログラミングを組んでおり、以下の様なプログラミングを組みたいと考えています。

 500lxで点灯し、照度を維持する→500lxから50lxに徐々に照度を下げる→50lxで維持する

 

照度は60分ぐらいかけて下げたいと考えており、変化のさせ方は印象評価によって決めたいので複数種用意するつもりです。

(添付しているviファイルでは基本関数発生装置を用い、三角関数に設定しています)

制御するのみで、データを随時収録するなどは考えていません。

お忙しいところ恐縮ですが、何卒宜しくお願い致します。

0 件の賞賛
メッセージ1/5
1,723件の閲覧回数
解決策
トピック作成者chang_mieが受理

平素よりNI製品をご愛顧頂きありがとうございます。
日本ナショナルインスツルメンツ技術部の上野です。

 

添付いただいたコードよりDAQデバイスのアナログ出力でLED照明を制御すればいいことは読み取れますが、電圧値の設定がどのくらいの照度になるかの仕様が不明ですので、0 V = 0 lx、10 V = 500lxと仮定して回答致します。

 

まず60分という時間から高速なアナログ出力は不要だと思いますので、ソフトウェアタイミングによるオンデマンドアナログ出力で十分です。

このサンプルプログラムは、ヘルプメニュー >> サンプルを検索 >> ハードウェア入力と出力 >> DAQmx >> アナログ出力 >> 電圧 - オンデマンド出力にあります。

 

この方法は、Whileループ内にDAQmx書き込みVIを配置して、出力したい値を1点ずつ書き込むことでその値を出力します。その値として、消灯、50 lx、500 lx、および複数の漸減があるようですので、ケースストラクチャでその値を切り替えて渡せるようにしてみてください。

 

 照度を下げていく漸減で使用する値は、ループの前に作成しておくことも可能です。ソフトウェアタイミングでのアナログ出力では、ループ内に配置した待機関数で出力タイミングを決定します。待機関数で1000ミリ秒(1秒)と設定すれば、1秒ごとにループが回ります。その設定で60分間(3600秒)に照度を下げる場合、3600個の要素を持つ数値配列を作成しておき、ループ内で1要素ずつ順番に指定していけば、アナログ出力値を1秒ごとに変えられます。

 

ちなみに待機関数の時間を変えることで出力タイミングを変更可能ですが、DAQmx書き込みVIのタイムアウト値がデフォルトで10秒ですので、それ以上時間を空けたい場合は、タイムアウト設定も変更する必要があります。また、停止ボタンの応答性もこの待機関数の設定で変化しますのでご注意ください。

 

フロントパネルでボタンを複数配置してLED照明の照度を制御するように設計されていますが、ケースストラクチャを用いて出力値を切り替えるならリング制御器を使用するとプログラミングが簡単になります。

複数の条件から1つの条件だけを選択する際に向いている制御器でケースストラクチャをSwitch文のように扱えます。複数のボタンを配置する場合は、条件が1つだけではなく複数となる場合によく用いられます。

 

作成例を添付致しますのでご確認ください。

 

0 件の賞賛
メッセージ2/5
1,657件の閲覧回数

日本ナショナルインスツルメンツ技術部 上野様

 

お忙しい中、ご丁寧な返信及びプログラムありがとうございます。

送ってくださったプログラムをさっそく運転させていただきました。

条件の切り替えも簡単にできること、漸減されていく様子にとても感動しました。

 

そのうえで、質問が2点ございます。

1点目: 10Vを500lxと仮定してくださっていますが、その数値はどこから変更することができるのでしょうか

2点目: 実際に使うときは30分漸減させ一時停止し、またその停止した照度から30分漸減させるという使い方をするのですが、その場合は1800個ずつの数値配列に分ける形になるのでしょうか

 

度々の素人質問で申し訳ございません。

またお手すきの際にご返信いただけますと幸いです。

何卒よろしくお願い申し上げます。

0 件の賞賛
メッセージ3/5
1,642件の閲覧回数

1. Whileループ内にあるケースストラクチャで2というケースにあるオレンジ色の枠で10という数値定数と、ループに入る前に3600個の要素を持つ配列で算出している値が最終的に10になります。それらの部分を変更してください。

 

2. 1800個の要素を持つ配列を2つ作っておき、リング制御器で切り替える方法が最もシンプルだと思います。ケース3を複製して、前半の1800要素の配列と後半の1800要素の配列を処理すれば、30分で一時停止のように動作するコードは作成できます。

0 件の賞賛
メッセージ4/5
1,635件の閲覧回数

上野様

 

早々にお返事ありがとうございます。

承知いたしました。

やってみます。

本当に助かりました。

0 件の賞賛
メッセージ5/5
1,631件の閲覧回数