シリアル通信でデータが16進で00,10進で0,アスキー文字でNULL(ヌル)までしか読み取られないのはなぜでしょうか



使用ソフトウェア:
使用ソフトウェア・バージョン: N/A
使用ソフトウェア・バージョンに特化: N/A
二次のソフトウェア: N/A

問題: LabWindows/CVIでシリアル通信を行う際,計測器から返されるデータの途中に00xが含まれています。00x以降のデータがすべて失われてしまいます。例えば,返されるデータが AA 4C 00 DD BB であった場合,AA 4C 00しか読み取ることができず,DD BB が失われているように思えます。どのように対処すればよいでしょうか。

解決策: 計測器は00xの後を含め,すべてのデータを返しているようです。データは,文字列や配列の操作の後に失われていると考えられます。ANSI C標準ライブラリ関数のprintf(), strcpy(), strcat()などは,00xもしくはNULL(ヌル文字)までを読み取ります。従って,これらの関数を使う変わりにCVIのsprintf()関数を使用して自力でフォーマットして下さい。

bytes_read = ComRdTerm (comport, read_data, read_cnt, read_term);
for(i=0;isprintf(tbox_read_data+2*i,"%02x", read_data[i]);
}
SetCtrlVal (panel_handle, SERIAL_TBOX_READ, tbox_read_data);

これに加え,以下の様にして配列中の任意の要素を調べることができます。
read_data[Index]
Indexは00xが含まれる要素よりも後の指標を指定することができます。

もしデータが読み取り中に失われている場合,シリアル受信の終端文字を変更する必要があります。CVI関数のComRdTerm()を使用して下さい。LabVIEWでは,終端文字はVisa Configure Serial Port.viで設定できます。


関連リンク: KnowledgeBase 21LCJ1LI: Why Does My Serial Instrument Not Respond to Commands?

添付:





報告日時: 03/14/2003
最終更新日: 03/17/2005
ドキュメントID: 2VDB8MHM