選択したカードは、このアプリケーションには適していません。プレーンな RS-232 ポートしかなく、マルチドロップ バスには適していません。EIA-485 スタイルのバス インターフェイスを購入するには、他の場所で購入する必要があります。これらは、産業用電子機器のサプライヤでしか見つけることができません。断然最良の方法は、MDB 仕様を所有する業界団体である National Automatic Merchandising Association に問い合わせることです。
9 ビットのデータ形式は単なるトリックであり、MDB プロトコルでアドレス バイトとデータ バイト間のモード切り替えに使用されます。バス上のすべてのポートはアドレス バイトをリッスンし、アドレス指定されたポートだけがデータ バイトをリッスンします。
9 番目のビットは、任意の UART が生成できる単純なパリティ ビットです。基本的なデータ サイズは 8 ビットのままです。UART は、初期化された方法からパリティ ビットを自動生成します。マーク、スペース、奇数、偶数パリティから選択できます。
これは、このようなバスで使用される種類のプロセッサである UART を備えたマイクロコントローラで簡単に実行できます。オンザフライで UART を再プログラムし、アドレス バイトを送信するときにマーク パリティを生成するように指示するだけです。そして、データ バイトを送信するときにスペース パリティに再プログラムします。実際の UART チップにもよりますが、通常は FIFO が空になるのを待つ必要があります。
これは、通常の Windows または Linux マシンで行うのがはるかに難しく、ユーザー モード プログラムと UART の間にドライバーがあります。ドライバは、Windows の EV_TXEMPTY の WaitCommmEvent() のように、「送信バッファが空」ステータス ビットを生成しますが、これには fifo の空のステータスは含まれず、バッファが空であることを示すだけです。回避策は、バッファが空の状態になるのを待ってから、FIFO が確実に空になるまで十分な時間 sleep() を実行することです。通常、FIFO の深さは 16 バイトなので、ビット時間の 16 倍の時間スリープします。これらの詳細を確実に知るには、選択したカードの UART のデータシートが必要です。