04-21-2021 01:52 AM
投稿失礼いたします。
現在VISAを使用したシリアル通信(無手順)で、PLC⇔LabViewの間で解析トリガ送信およびデータのやり取りをしたいと考えております。
実現したいフローは、下記の通りです。
①PLCからトリガとなる固定の文字列を送信する〈LabView側はVISA読み取り〉
②LabViewが固定の文字列を受信すると、解析を開始する
③解析が終わるとLabViewから解析後の数値データ(ASCII形式)をPLCに送信する〈LabViewではVISA書込み〉
サンプルプログラムを活用し、通信も出来、データも送受信できているのですが、
VIを連続実行をさせて任意のタイミングでPLCからトリガとなる固定の文字列を送信することを実現したいです。
現状は、連続実行をさせてしばらくトリガを送信しないと下記タイムアウトエラーになってしまいます。
エラー - 1073807339 VISA読み取り/書き込みでタイムアウトが発生しました。
解決策としては下記2点が考えられると思っています。
①VIを連続実行して、VISA読み取りで待機する(タイムアウトを無効化?)
②VIを外部のトリガで実行できるようにする
LabView2020 SP1(32bit)を使用しています。
最近LabViewを触り始めて、まだ知識が浅いため、知見のある方に解決策をご教授いただけますと幸いです。
よろしくお願いいたします。
解決済! 解決策の投稿を見る。
04-22-2021 03:02 AM
「トリガが送信されないとタイムアウトが発生する」こと自体は、正常なのだろうと思いました。
この場合、いくつか案は考えられます。
システムの作り方として、トリガが届く予定になってから待ちに入る、という処理も一案かと思います。
04-22-2021 06:25 PM
Emboar_Dymax様
ご回答ありがとうございます。
>タイムアウト時間を設定する
1度はこの方法で試みたところエラー発生を遅らせることはできましたが、無限待ちができないため断念しました。
>エラーを無視して再トライ
こちらの方法はやりたいことが実現できそうな気がします。
まずは試しにトライしてみたいと思います。
>システムの作り方として、トリガが届く予定になってから待ちに入る、という処理も一案かと思います。
こちらも考えたのですが、今回シリアル通信のみで通信しており、
「トリガが届く予定」をLabViewに伝えるためにも読み取り関数を使わなければいけないと考えたため断念しました。
他に入力信号を入れられるシステムのほうが綺麗な流れかもしれませんが・・・。
とても参考になる情報をありがとうございました。
04-23-2021 05:49 AM
こんにちは。
VISA Read.viはバイトカウントで指定したバイト数を読み込みますが、VISAシリアルポート構成で設定したタイムアウト以内に読み込みが完了しないとタイムアウトエラーになります。
ここでVISAシリアルポートバイトプロパティを使う手をご紹介します。
VISA Read.viで読み取る前にVISAシリアルポートバイトプロパティで読み取りバッファにデータがあるか確認し、ゼロなら(データが無い)ならちょっと待ってから再度確認(ループ)。ゼロ以外(もしくは予定するバイト数のデータが入っていたらら)VISA Read.viで読み取る。
いかがでしょうか?
04-25-2021 06:23 PM
SuuuSan様
こんにちは。
ご回答ありがとうございます。
>VISA Read.viで読み取る前にVISAシリアルポートバイトプロパティで読み取りバッファにデータがあるか確認し、ゼロなら(データが無い)な>らちょっと待ってから再度確認(ループ)。ゼロ以外(もしくは予定するバイト数のデータが入っていたらら)VISA Read.viで読み取る。
VISAシリアルポートプロパティという機能もあるのですね、確かにこの方法で出来れば、エラーは出さずに実現できそうです。
試してみたいと思います。ありがとうございます。
04-25-2021 08:43 PM
Emboar_Dymax様、SuuuSan様
こんにちは。
様々なアドバイスをいただきまして、希望していた処理を実現することができました。
最終的にはVISAプロパティでデータが入ってきたら読み取り動作を開始する処理を採用させていただきました。
お二方とも、短期間で的確なアドバイスをいただき、ありがとうございました。