08-26-2010 02:59 AM
LabVIEW初心者のYoshihitoと申します。
たびたび申し訳ありませんが、問題解決のためアドバイスをいただきたく、新たに質問させていただきます。
あるデバイスで交互に行いたい2つの動作(フォーミュラと閾値以外は全く同じ)があります。
そこで、それぞれに条件があるため条件を閾値として設定し、閾値に達したらデバイスにデジタルパルスを送り、次の動作に移る(2つの動作の繰り返し)プログラムを組みたいと思っています。
個々の動作を行うプログラムはできているのですが、それをどのように組み合わせれば繰り返し行えるようになるのかがわからず、困っています。
おそらくケースストラクチャやシーケンスストラクチャを用いると思うのですが、具体的にどのように用いればよいのかについては力不足でわかりませんでした。
個々の動作を行うプログラムは添付した画像のようになっているのですが、2つの動作でフォーミュラと閾値の値が違うため、別々に設ける必要があると考えています。
言葉足らずでわかりにくいところがあると思いますが、何かアドバイスをいただけたら幸いです。
よろしくお願いいたします。
08-26-2010 10:42 AM
Yoshihito 様
平素よりNI製品をご使用いただき誠にありがとうございます。
今回 Yoshihito 様がご要望の処理をもっとも簡単に表すとどのようになりますでしょうか。デバイスの型番、それからもっとも大まかな流れを状態遷移図にしてJPEGで張り付けていただけますと、こちらもスムーズに適切なご案内をさしあげることができます。例えば、状態遷移の状態は「デバイス1集録」であるとか、「データ処理1」などで、遷移状態はそれら状態間を矢印で書く、等をお願いしたく存じます。
08-28-2010 06:50 PM
気になったので
横槍失礼いたします。
条件分岐、データ選択のテストが出来る物をUPしておきます。
8.2形式で保存しています。
的外れだったらすみません。
o.fujioka 様がおっしゃる様に
フローチャートの様にみんなでイメージが共有できる物が
有った方が、相手にちゃんと伝わると思います。
フローチャートを作成しているときに、自分で気づく事も多々あります。
08-30-2010 12:37 AM
o.fujioka様、xyzz様、返信ありがとうございました。
説明がわかりにくく失礼いたしました。
デバイスの型番は「USB-6221」です。
プログラムのフローチャートは書いたことがないのですが、書き方を調べて作成してみました。
処理1と2で行う処理の流れは同じなのですが、計算の内容と閾値がそれぞれ異なるため分けて書きました。
書き方等誤りがありましたら、再びご指摘いただけると幸いです。
よろしくお願いいたします。
08-30-2010 06:16 AM
Yoshihito様
フローチャート拝見しました。
2つの処理を完全に直列で行うようですので、
大きなwhileループ(xyzz様の写真の一番外側の枠ですね)の中に2つの処理を並べて、
エラーチェックの配線で順番につなげば恐らくフローチャート通りの機能が実現すると思います。
LabVIEWは、上流の処理が終わるまで次の処理が行われない特性があるので、
配線はサブループ内の最後の処理(図1を見る限りフォーミュラでしょうか?)につないでおけばいいと思います。
08-30-2010 06:27 AM
ザックリとしたシーケンスを作ってみました。
8.2形式で保存しています。
08-30-2010 07:29 AM
Yoshihito 様、xyzz 様、山本様、
掲示板を盛り上げていただきましてありがとうございます。
xyzz 様の VI は非常にシンプルで見ていて流れがわかりやすいですので、Yoshihito 様もぜひご参考ください。私からは、もう少し高度なデザインパターンをご紹介いたしたく存じますので、もう少々お時間いただければと存じます。
09-01-2010 12:26 AM
山本様、xyzz様、o.fujioka様、返信ありがとうございました。
xyzz様のサンプルを使用させていただき、動作確認をしましたところ、希望していた動作ができるようになりました。
現在添付させていただいた図のようになっているのですが、2回目の繰り返しになったときに、赤枠で囲った部分の数値をリセットできるようにしたいと思っているのですが、どのようにしたらできますでしょうか。
数値がリセットされないと、すでにしきい値に達していると判断されてしまうようで、すぐにパルス出力されてしまうのが現状です。
たびたびすみませんが、よろしくお願いいたします。
09-01-2010 06:20 AM
時間領域演算関数(積分)の初期化(積分値のリセット)の仕方が解からないので
初回ループ時に前回終了時の積分値を引いた値を入力する方法と、
シフトレジスタを用いて処理する方法をUPしておきます。
8.2形式で保存しています。