NI製品ディスカッション

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

Labviewのシリアル通信について質問です.

大学でHSC-103というステージコントローラを用いてステージの移動と座標の計測をシリアル通信で行うためにLabviewを使っています. 動かした座標を計測するためにリード指令Q:というコマンドを用いた時, 座標が正しく表示される時と座標が表示されずOKやNG, 1となる時があり困っております. 原因をご教示いただきたいです. 下記にパソコンの設定を載せております.

ボーレート 38400[bps]
デリミタ CR+LF
パリティ なし
データビット 8bit
ストップビット 1bit
フロー制御 ハードウェア(RTS/CTS)

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

添付の絵だけでは何とも言えません。

症状から考えられるのは、
・シリアルポートの初期化でデリミタが違っている
・レスポンスの読み残しがあり、残骸が読み込まれるときがある
・同一ポートに対する書き込みと読み取りが複数の個所で入れ子になっている

 

シリアル通信では「コマンドの送信とそれに対する応答を残さず読み切る」のをワンパッケージにして、排他制御しなければなりません。

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

返信が遅くなり申し訳ございません. ご回答ありがとうございます. 新たに添付した画像が座標移動とリード指令Q:を組み合わせたものになります. 

回答にあるシリアルポートの初期化とはどのような場合に起こるのでしょうか?

また、排他制御を実行するためにはどのような処理を行えばいいのでしょうか?

重ね重ねの質問になってしまいますが, ご教示どうかよろしくお願いします. 

0 件の賞賛
メッセージ3/8
509件の閲覧回数

配線が汚くて動作を追えません。

VIを添付してください。

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

添付したものが作成したHSC-103を用いてシリアル通信を行ったものです.

hontai.viのサブviであるstageidou.viで問題が起こっております.

シーケンスストラクチャを用いており 0,1,2でx,y,z軸それぞれの速度の決定(D)、3,4,5でx,y,z軸それぞれでの原点移動(H)、6がzentai.jpgであげたx軸移動(M)とy軸移動(M),リード指令(Q:)です. 

また, Hsc-103の設定は, 

ボーレート 38400[bps]
デリミタ CR+LF
パリティ なし
データビット 8bit
ストップビット 1bit
フロー制御 ハードウェア(RTS/CTS)

です.

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

まずは言葉を共有しましょう。そしてLabVIEWのデータフローを理解してください。

 

VIダイアグラム上のアイコンで示されるのが関数やサブVIです(ノードとも呼ばれます)。
stageidou.viならそのダイアグラム上にあるVIがサブVIで、サブVIの中にもサブVIがあるのでVIは階層構造になり得ます。hontai.viはstageidou.viのサブVIです。stageidou.viの「表示」メニューから「VI階層」を表示してみると解りやすいです。

 

ワイヤはデータが流れる経路で、ノードは入力ワイヤの全てにデータが到達した時点で実行し、動作が完了すると出力ワイヤにデータを流します。データが来ない入力ワイヤがある間は実行を待たされるので、その原理上ワイヤの経路によってノードの実行順を制御できます。ワイヤデータのやり取りが無いノードは並列に実行されます。これがデータフロープログラミングと呼ばれるLabVIEW最大の特長です。ワイヤを不用意に分岐して複数のノードに渡すとそれらの実行順は不定になる場合があります。

 

さらに、同一のサブVIを複数の個所で呼び出している場合、一度に一カ所のサブVIしか実行されません(例外は可能)。実行が完了すると他の場所のサブVI呼び出しが実行されます。これを利用して排他制御を実現できますが、どの場所のサブVIが先に実行されるかは他の要因に依存します。

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

hontai.viの中で並列に動く可能性があるサブVIはシーケンス6のQ.vi、x-move.vi、y-move.viの3つです。

「VISA書き込み」と「VISA読み取り」関数はRS232C_WaitReady_HIT.viとRS232C_WaitString_HIT.viの中で呼び出されています。この2つは上記3つのVIのあちこちで使われているので、書き込んだコマンドに対する返答を読み取る前に他所での書き込みと読み取りが割り込む可能性があります。するとコマンドと応答がちぐはぐになります。

 

とりあえず一番怪しいRS232C_WaitReady_HIT.viを書き換えてみました。VISAにアクセスするVIをRS232C_WaitString_HIT.viだけに限定します。あと、RS232C_Init_HIT.vi内のVISAシリアルポート構成が間違っていたので修正しました。これでQコマンドの応答が正しく受け取れるかどうか試してください。


ただしまだRS232C_WaitReady_HIT.viの中に動作完了を長時間待つループが入っています。これが終わらない限り同一ストラクチャ内にある他のVIが実行できないので、Qコマンドの更新が滞ると思います。

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

返信ありがとうございます!ワイヤデータのやり取りが無いノードは並列に実行されるという知識がなかったため勉強しなおす所存でございます. ただいまコロナに罹患してしまったため研究室に入れず作成してもらったviは動かせていいませんが, 動かし次第報告させていただきます. 本当に心の底から感謝いたします. 

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