NI製品で7ビットまたは8ビットの代わりに9ビットのシリアル通信を行うことはできますか?

更新しました Nov 8, 2023

使用製品

ドライバ

  • NI-VISA
  • NI-Serial

問題

ナショナルインスツルメンツ(NI)でシリアル通信に9番目のデータビットを追加できますか?

解決策

特定の計測器に対するシリアルプロトコルは、一般的な8データビットとパリティビットではなく、9ビットの日付フレームを使用します。ただし、NI製シリアル製品のUARTは、偶数/奇数/マーク/スペース/パリティなし、および1/1.5/2ストップビットの5~8データビットのみをサポートしています。UARTは9ビットのデータを直接サポートしていないため、これを達成するための規定がありません。9ビットで通信するために使用できる回避策が2種類あります。

 

パリティビットを9番目のデータビットとして使用する


送信: 

  1. ポートを8データビットに設定する必要があります。
  2. 送信に9番目のビットを追加するには、伝送されるすべてのバイトに対してパリティビットをマークまたはスペースと明示的に設定する必要があります。マークは高パリティビット(1)であり、スペースは低パリティビット(0)です。

たとえば、バイナリ000100010を送信する必要がある場合、16進数の0x88を送信し、パリティをスペースに設定します。バイナリ000100011を代わりに送信する必要がある場合、16進数の0x88を送信しますが、パリティをマークに設定します。バイナリで示されている場合、最下位ビットはシリアル送信で最初に送信されるため、最下位ビットが最左ビットであることに注意してください。


受信: 

  1. ポートを8データビットに設定し、パリティチェックを有効にし、スペースまたはマークのいずれかに設定します。
  2. 一度に1バイトずつ読み取ります。
  3. パリティエラーが発生した場合、9番目のビットが設定したビットの反対であることがわかります。
  4. 適切なビットを追加します。

たとえば、パリティをスペースとして設定するとします。バイトを読み取ってパリティエラーが発生した場合、9番目のビットがマークで、適切なビットを追加できることがわかります。

1つの問題は、LabVIEW 7.0以降では、NI-VISAが誤ったパリティを含むデータバイトを受け取ると、シリアルデータをエラー文字(デフォルトでは0)で完全に置き換えます。LabVIEW 6.1以前では、データバイトがパリティエラー置換バイトに置き換えられません。visaconf.iniファイルを変更することで、この動作を変更することが可能です。計測器がアドレス指定目的で9番目のデータビットを受信するだけで、9番目のビットでデータを送信する必要がない場合は、計測器が想定するものに1回パリティを設定する必要があります。

エラー置換ビットを無効にするためにvisaconf.iniファイルを変更する方法は、以下のとおりです。

Windows XPの場合、visaconf.iniファイルは下記のフォルダにあります。
 <Documents and Settings>\All Users\Application Data\National Instruments\Nivisa

Windows Vistaの場合、visaconf.iniファイルは下記のフォルダにあります。
C:\ProgramData\National Instruments\NIvisa

ファイルに次の行を追加して保存します。

[ASRL-RSRC-ALIAS]
DisableErrorReplacement=1



LabVIEW 2010のユーザの中には、コンピュータを再起動したり、Measurement and Automation Explorerを開いたときにこのキーが失われることがあります。 実行時にキーが常に visaconf.iniファイル内に存在するようにするには、プログラムで次のコードを使用してキーを追加することが可能です。

上記のコードにあるファイルパスは、ローカルマシン上の visaconf.iniファイルの場所と一致するように変更する必要があります。


 

9ビットフレームを処理する別のマイクロコントローラを使用する

もう1つの選択肢は、UARTを備えた別個のマイクロコントローラを使用して、9つのデータビットフレームを処理し、計測器とコンピュータの間の仲介役として配置することです。コンピュータは各9ビットフレームに2つの8ビットデータフレームを送信します.1つは最初の8ビットで、もう1つは9ビットで、これをUARTで1つの9ビットフレームに再構成して計測器に送信させます。同様に、UARTは計測器から9ビットのフレームを受け取り、2つの8ビットフレームをコンピュータに返します。