NI製品ディスカッション

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

スキャンインターフェースモードでのCompact RIOの測定エラーについて

こんにちは。

当方以下の環境でCompact RIOを用いた測定を行っております。
シャシー:NI cRIO 9063
モジュール1:NI 9514
モジュール2:NI 9234
モジュール1でサーボモータに指令を与え回転数を取得、またモジュール2でアナログ信号を同期させて測定するプロジェクトとなっております。

こちらについて、cRIOを起動した初回では測定が行えるのですが、2回目以降に測定が行えません。
おそらくcRIO側のメモリに何かしらの問題があることが想定されるのですがerror outを用いても特にエラーコードが返ってきません。

よろしければ解決のための知識をご教授いただければ幸いです。

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

「測定が行えない」とは何をもってそうのように判断されているのでしょうか。意図された結果が得られないのであれば、どのような結果が得られているか、またお使いのコードを共有していただくことで何かしらの気づきを得られる可能性があります。ご検討ください。

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

ご返信ありがとうございます。
コードと測定データを添付します。

まずコードに関しては

host.vi:PC側の保存用
measurement_control.vi:cRIOの制御用

となっております。

測定結果については
test4.csv:cRIO起動直後に測定したもの
test5.csv:test4.csv測定後に測定したもの
です。

 

test4.csvはサーボの回転数データが返ってきています。
4列目、5列目に関してはセンサを取り付けていないので無視で構いません。
しかしtest5.csvについては1行目でデータが終了しております。

個人的にはcRIO内の配列が初期化されていないことが原因だと考えておりますが、初期化方法について見当がつかない状況です。

すべてをダウンロード
0 件の賞賛
メッセージ3/8
1,244件の閲覧回数

おそらくWrite CSV.vi内に問題があると思います。外套のサブVIを添付していただけますでしょうか。

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

こちらになります。
もともと用意されていたviを改変したものとなります。

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

ご共有ありがとうございます。保存部分の問題ではないようですね。

純粋にシェア変数の値が入っていないことが原因ということになるかと思います。これは発生時にプローブやハイライト実行をして値の遷移を監視することで何か気づくことがあるかと思います。

 

気になったのが、「Control」のシェア変数が一度Trueになると、measurement_control.vi の上半分のループが止まりますが、「2回目以降」とおっしゃっているのはVIを停止して再実行されているのでしょうか?それとも実行したままでしょうか?

 

もしこれが原因であれば、上半分のループが止まらないように、例えば外側にWhileループを配置する、などが簡易的な対応になるかと思います。

0 件の賞賛
メッセージ6/8
1,185件の閲覧回数

2回目以降はCompact RIOを使っているため、再度デプロイしてからになります。

これについてですが、measurement_control.viのStraight-Line Move側にあったブール制御子をRead側に取り付け、逆にStraight-Line Move側にシェア変数から判定するようにしたら、モーターが動かなくなってしまいました。

 

おそらくシェア変数が2回目以降書き換わらないことが明確な原因ではないかと思います。

これについて、別のループのブールを同時に制御する方法は存在するのでしょうか?

0 件の賞賛
メッセージ7/8
1,102件の閲覧回数

「動かなくなった」は「1回目のデプロイでは動くが2回目のデプロイでは動かない」ということでしょうか。

もしそうだとすると1回目の「Control」シェア変数に書き込んだ値がTrueのままになっているので、即プログラムが停止しているという可能性はないでしょうか。フロントパネルにループの繰り返し端子の数値を表示することでループが回っているかを確認することができるかと思います。もしこの状況であれば、プログラムの最後でControlシェア変数にFalseを書き込んであげればよいはずです。

 

別ループのブール制御器の制御はローカル変数やグローバル変数を使うことで可能ですが、シェア変数でも同等なので今のままで良いと思います。

 

2回目の実行で何が起きているかは、ブロックダイアグラムの電球のアイコン(ハイライト実行)をクリックするとモニタできますので一度ご確認ください。

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