シリアル通信やGPIBでヌル (NULL) 文字を送信できますか

更新しました Jul 19, 2024

使用製品

ソフトウェア

  • LabWindows/CVI Base
  • LabWindows/CVI Full
  • LabVIEW Base
  • LabVIEW Full

問題

計測器にヌル (NULL) 文字を送信しようとしていますが,うまく通信できません。LabVIEWやLabWindows/CVI,Visual C, Visual Basicなどで,ヌル文字を送信することはできるのでしょうか。

解決策

どのようなプログラム環境を用いても,シリアル通信でヌル文字を送受信することができます。問題は,文字列の扱い方の問題によりヌル文字の送受信ができていないことによる可能性があります。

追加情報

次のコードでは、シリアルポートから "hello"のみが送信されます。 これは、 StringLengthが文字列内でNULL文字を検出し、この文字を文字列の末尾として解釈するためです。
 
char send_data[15] = "hello\00world"
stringsize = StringLength (send_data); // stringsizeには5が代入される
ComWrt (comport, send_data, stringsize); // "hello"だけがシリアルポートに送信される


ヌル文字をシリアル通信データの終端文字として送信するためには,ヌル文字を追加する必要があります。ヌル文字は文字列に存在するので,送信する文字数をインクリメントします。
 
char send_data[15] = "hello";
stringsize = StringLength (send_data)++; // stringsizeには6が代入される
ComWrt (comport, send_data, stringsize); // "hello/0"がシリアルポートに送信される


LabWindows/CVIインストールディレクトリのsamples\rs232にあるサンプルプログラムのserial.prjで,SendAscii関数とReadCallBackコールバック関数を添付ファイルと入れ替えることで,ヌル文字を終端文字として使用できます。ユーザが終端文字ももしくは終端バイトに"None"を選択した場合,ヌル文字の終端が使用されます。