10-21-2021 11:35 PM
以前に以下の質問をさせていただいたものです。
添付の二つのプログラムを用いて実行しましたが、以下のようなエラーが出てしまいます
バッファなどをどこでいじれるかがわからず、解決の道筋が立ちません。
どなたか、エラーの解消方法のご提案、あるいは現プログラムの問題点などを
教えていただけないでしょうか。
解決済! 解決策の投稿を見る。
10-23-2021 10:06 PM
niUSRP Write Tx Data (CDB).vi で書き込むデータが不足してバッファが空になった というエラーですね。
「受信データ」表示器の内容は「元の複素数データ」と同じになっていますか?
このエラーが出るのは何回かデータを送受信しているうちにですか?それともいきなりですか?
10-23-2021 11:40 PM
以前の質問にもご回答いただいた上に今回もありがとうございます。
いえ、それぞれのプログラムで違うデータになってしまっています。
また、こちらはRXを起動したのちにTXを起動するとその直後に発生します。
なので、最初の段階で止まる状態です。
10-24-2021 12:56 AM
TCP接続をlocalhostで開いているので、同一PC内で2つのVIを実行していると思います。
受信データの配列は空ですか?
空でなければデータポイント数は合っていますか?
ポイント数が合っていて値が違いますか?
「TCP読み取り」でタイムアウトなどのエラーが起こっていませんか?
USRPからのデータ読み込みと、USRPへのデータ書き込みを同一ループ内に入れて実行したとき(TCPでの送受信は省いて直結してください)、ループはどれくらいの時間で回りますか?
10-24-2021 07:11 PM
データ配列は空ではありません。
データポイントが何かわからず申し訳ないのですが、
小数点の位置も値も異なっています。(以下画像の通り)
タイムアウトエラーは発生しておりません。
直結した場合のループ時間は100ms前後です。
10-24-2021 07:39 PM
データポイント数は、データ配列の長さです。
試しに、TX、RXとも待機関数をなくして、それぞれのWhileループの回る回数(i 端子の値)をモニタしてみてください。そのうえでRXとTXの実行開始の遅れをできるだけ短くしてください。
ループ回数は両方とも同じにならないとおかしいと考えられます。
10-24-2021 07:50 PM
データポイントに関して教えていただきありがとうございます。
データポイント数については新たに表示器を出すことで
確認できるものでしょうか?
ループ内にあった待機時間(100ms)を消去して実行したところ、
止まることなく送受信が行われました。
また、途中TCP_RX側を停止させて確認したところ、
ループ回数についても同じ値となりました。
ただ、元データと受信データの値が同じループ値でも一致しません。
10-24-2021 08:16 PM
配列の長さは「配列サイズ」関数で取得できます。
データが一致しないのはおそらく、RX側が実行開始後TX側の接続の有無を無視してどんどんデータを送信してしまい、受信側で少し前のデータを受け取っているせいだと思います。
RXに、TXが接続されるまで待機する仕組みを入れるか、サーバとクライアントを入れ替える(TXを先に実行してRXが接続されてデータが送られてきたら読み取る)ことを検討してください。
サンプルの検索メニューで「ネットワークストリーム」を検索するとより気の利いたプロトコルの参考になると思います。
10-24-2021 09:18 PM
配列サイズの取得方法について教えていただきありがとうございます。
確認したところ、配列サイズは同じ値でした。
そのため、Watsonさんのおっしゃる通り、
接続有無によるデータ転送ズレの問題なのだと思います。
教えていただいた方針とサンプルをもとに、改良していきたいと思います。
以前の質問に引き続き、ご丁寧に教えてくださりありがとうございました。
また、自己解決できない問題が発生しましたら、コミュニティに投稿させて
いただくこともあるかと思いますが、その際お時間あればまたご回答いただければ
ありがたく思います。
改めまして、ありがとうございました。