06-08-2021 06:10 AM
投稿の仕方がわからず別の掲示板にも出してしまいましたがこちらで質問したかったため、もう一度投稿すること、お許しください。
LabVIEW初心者のものです。
初歩的な質問で申し訳ないのですが、
現在、イベントストラクチャによりフロントパネルのクリックした場所の座標を表示。
1回目のクリックがスタート時の座標・2回目のクリックがゴール時の座標として記録し、その場所へロボットを移動させるというプログラムを組みたいのですが、私が作成したプログラムではイベントストラクチャが動いてくれずプローブを見ても実行していないと出ます。
調べてみたところ、タイムアウトのイベントストラクチャを追加することで解決できるという情報を得て試してみたのですが解決の糸口がつかめません。
プログラムの悪いところやアドバイス等ありましたらご教示いただけますと幸いです。
よろしくお願いいたします。
解決済! 解決策の投稿を見る。
06-08-2021 07:34 AM
イベントストラクチャは動いていますが、他のコードとの実行順が決まらないので思った通りの動きになりません。
LabVIEWはパーツ(ノードと呼びます)同士をワイヤでつなぎます。そのワイヤ上をデータが流れて伝わっていくとき、データの到達順にコードが実行されます。
ワイヤの接続関係がないグループ同士はどれが先に実行されるかわかりません(ほぼ同時に実行)。
この場合、イベントストラクチャ、シーケンスストラクチャ、ケースストラクチャ、その他のノードの実行順を決めてやる必要があります。
06-08-2021 08:12 PM - 編集済み 06-08-2021 09:04 PM
J.H.Watson様
早速のご返信ありがとうございます。
用語までわかりやすく教えていただき、非常にありがたいです!
データの流れを見てみたところおっしゃる通りでしたので実行順を決める方法を調べ、エラー線をつないでみました。
しかし、一番初めのエラーなしがOKになりイベントストラクチャに入ってもクリックして何も起こらず、その先に進めないという状況です。
つなぎ方が悪いのかと考え、イベントストラクチャにタイムアウトイベントを追加し再びデータの流れを見てみたところ思うようにデータが流れたためマウスダウンがうまくいっていないのかと考えております。
重ねての質問になってしまい大変恐縮ですがご回答いただけると幸いです。
スクリーンショット105729がイベントストラクチャで止まってしまっている状態、
スクリーンショット100843がタイムアウトを追加し実験して流れを確認した状態です。
どうぞよろしくお願いいたします。
イベントマウスダウンのみのVIを添付させていただきます。
06-09-2021 12:17 AM
「スタート位置」や「ゴール位置」のローカル変数からの読み取りと制御器への値を引き渡すコードは、エラーワイヤに影響されないところにあるので実行順が守られません。つまり反復回0と1のケース内にあるローカル変数への書き込みよりも先に読み取られてしまうので、xとyの位置スタートと位置ゴールは変化しません。
06-09-2021 01:35 AM
J.H.Watson様
ご返信ありがとうございます。
ご指摘いただいた個所をすべてケースで囲みそこにエラーワイヤをつなぐことで修正いたしました。
これで治ったように思えるのですがどうでしょうか?
こちらのVIですが、保存している場所をmyRIOの下にすると動かず、コンピュータの下にすると思い通りに動いてくれるのですが、
myRIOとの関係が何か影響しているのでしょうか?
質問ばかりで申し訳ありませんがお答えいただけますと幸いです。よろしくお願いいたします。
06-09-2021 02:35 AM
私は目標とする動作を知らないので何とも言えませんが、nakishiro54さんの思い通りに動いているのなら、それでいいと思います。
ただ、このVIはリセットと停止の動きが変だと思いますよ。たとえば添付のVIの動きを追ってみてください。
マイコンピュータの下にあるVIは開発機であるWindows PCのプログラムであることを示します。
myRIOの下に置くと、myRIOに組み込まれて動くプログラムだと判断されます。この場合はRT(リアルタイムOS部分で動作するVIとなります。
RTではボタンやパネルをクリックしたイベントは使用できません。使えるのはダイナミックイベント(プログラム的に発生させるイベント)だけです。
myRIOでシステムを組むにはRTとFPGAを使うVI開発の知識が必要です。たとえばWindows PCをホストにしてユーザーインタフェースを担当させ、そこでできたデータをRTに送って動作させるような作り方になります。サンプルプロジェクトやヘルプ、NIのWebサイトを調べてみてください。
06-09-2021 04:08 AM
J.H.Watson様
ご返信ありがとうございます。
ご多用の中丁寧に返信いただきさらにVIも添付していただき、大変恐縮です。
動きを追ってみました。NIオンライントレーニングというものの見よう見まねで作ったVIということもあり停止やリセット等のイベントストラクチャでの運用がうまく理解できていなかったため、大変勉強になりました!
また、タイプ定義やシフトレジスタ等まだまだ使いこなせていないようなものも使われていて自身の勉強不足を痛感いたしました。
J.H.Watson様から頂きましたVIをしっかりと解読し理解を深めていこうと思います。
RTとFPGAを使うVI開発の知識が必要とのことで、そちらも今後勉強していき自分の思うとおりに動かせる、また、J.H.Watson様のように困っているかたを優しく助けられるような技術者になりたいです。
長々とした文章になりましたがご丁寧に対応していただきありがとうございました。
今回初めて投稿したもので、不安に思っていましたがJ.H.Watson様のような知識量が多く、優しい方に答えていただけて大変うれしく思っております。
今後も疑問点を投稿すると思いますが、もしまた答えていただけるときにはよろしくお願いいたします。
貴重なお時間をありがとうございました。
06-09-2021 04:40 AM
どういたしまして。
私も独学で始めたころ、ワイヤがつながるまでに1週間くらい悩みました。なので気持ちはよくわかります。
実は添付VIにはバグがあって、リセットまたは停止ボタンをクリックしたとき、先にマウスダウンイベントが処理されてしまい位置が変わってしまいます。つまりシングルペーンのマウスダウンイベントは使い難いのです。解決にはペーンを増やしてそのペーンに対するものか、特定の制御器に対するイベントに限定することが考えられます。
ガンバってください(^^)
06-09-2021 04:52 AM
修正版を添付し忘れてました。
06-09-2021 10:14 PM
J.H.Watson様
バグの修正・VIの添付ありがとうございます。
確かに前回のVIでは実行のハイライト等で見たときリセット・停止を押した際の動作前にマウスダウンイベントが入り少し違和感の残るリセット・停止であったように思えます。
修正後のVIでは値が変動しないまま0へのリセットが行われており、ペーンを増やしマウスアップにすることでここまで処理が変わるのかと大変興味深く思いました。
こちらのVIや行われた修正など理解できていないこと(ペーンの増やし方など)がまだあるので参考にさせていただき調べながら自身の糧にしていこうと思います。
応援ありがとうございます。まだまだ知らないことがたくさんのLabVIEW、楽しみながら学習していきます(*^-^*)