12-15-2023 01:47 AM
こんにちは。
当方以下の環境でCompact RIOを用いた測定を行っております。
シャシー:NI cRIO 9063
モジュール1:NI 9514
モジュール2:NI 9234
モジュール1でサーボモータに指令を与え回転数を取得、またモジュール2でアナログ信号を同期させて測定するプロジェクトとなっております。
こちらについて、cRIOを起動した初回では測定が行えるのですが、2回目以降に測定が行えません。
おそらくcRIO側のメモリに何かしらの問題があることが想定されるのですがerror outを用いても特にエラーコードが返ってきません。
よろしければ解決のための知識をご教授いただければ幸いです。
12-15-2023 08:03 AM
「測定が行えない」とは何をもってそうのように判断されているのでしょうか。意図された結果が得られないのであれば、どのような結果が得られているか、またお使いのコードを共有していただくことで何かしらの気づきを得られる可能性があります。ご検討ください。
12-21-2023 11:05 PM
ご返信ありがとうございます。
コードと測定データを添付します。
まずコードに関しては
host.vi:PC側の保存用
measurement_control.vi:cRIOの制御用
となっております。
測定結果については
test4.csv:cRIO起動直後に測定したもの
test5.csv:test4.csv測定後に測定したもの
です。
test4.csvはサーボの回転数データが返ってきています。
4列目、5列目に関してはセンサを取り付けていないので無視で構いません。
しかしtest5.csvについては1行目でデータが終了しております。
個人的にはcRIO内の配列が初期化されていないことが原因だと考えておりますが、初期化方法について見当がつかない状況です。
12-24-2023 06:40 AM
おそらくWrite CSV.vi内に問題があると思います。外套のサブVIを添付していただけますでしょうか。
12-25-2023 12:58 AM
こちらになります。
もともと用意されていたviを改変したものとなります。
12-25-2023 02:38 AM
ご共有ありがとうございます。保存部分の問題ではないようですね。
純粋にシェア変数の値が入っていないことが原因ということになるかと思います。これは発生時にプローブやハイライト実行をして値の遷移を監視することで何か気づくことがあるかと思います。
気になったのが、「Control」のシェア変数が一度Trueになると、measurement_control.vi の上半分のループが止まりますが、「2回目以降」とおっしゃっているのはVIを停止して再実行されているのでしょうか?それとも実行したままでしょうか?
もしこれが原因であれば、上半分のループが止まらないように、例えば外側にWhileループを配置する、などが簡易的な対応になるかと思います。
01-08-2024 11:34 PM
2回目以降はCompact RIOを使っているため、再度デプロイしてからになります。
これについてですが、measurement_control.viのStraight-Line Move側にあったブール制御子をRead側に取り付け、逆にStraight-Line Move側にシェア変数から判定するようにしたら、モーターが動かなくなってしまいました。
おそらくシェア変数が2回目以降書き換わらないことが明確な原因ではないかと思います。
これについて、別のループのブールを同時に制御する方法は存在するのでしょうか?
01-09-2024 06:21 PM
「動かなくなった」は「1回目のデプロイでは動くが2回目のデプロイでは動かない」ということでしょうか。
もしそうだとすると1回目の「Control」シェア変数に書き込んだ値がTrueのままになっているので、即プログラムが停止しているという可能性はないでしょうか。フロントパネルにループの繰り返し端子の数値を表示することでループが回っているかを確認することができるかと思います。もしこの状況であれば、プログラムの最後でControlシェア変数にFalseを書き込んであげればよいはずです。
別ループのブール制御器の制御はローカル変数やグローバル変数を使うことで可能ですが、シェア変数でも同等なので今のままで良いと思います。
2回目の実行で何が起きているかは、ブロックダイアグラムの電球のアイコン(ハイライト実行)をクリックするとモニタできますので一度ご確認ください。