アカデミック 会社 イベント NI Developer Zone サポート ソリューション 製品とサービス お問い合わせ MyNI
This Document is not yet Rated  Rate this Document

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

使用ソフトウェア: LabWindows/CVI Development Systems>>Full Development System
使用ソフトウェア・バージョン: 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

Your Feedback! poor Poor  |  Excellent excellent   Yes No
 Document Quality? 
 Answered Your Question? 
  1 2 3 4 5
Please Contact NI for all product and support inquiries.submit