質問

win32(古いC-API)からRS-232ハンドシェーク回線を直接制御できるのか、どのように制御できるのか疑問です。

外部のハードウェアとやり取りしたいのですが、2つのシンプルなデータラインで十分です。

では-win32用のAPIを使用して、4つのステータス行の状態を読み書きできますか?通常のシリアル通信では、ハンドシェイクラインはUARTによって自動的に駆動されます(ハードウェアハンドシェイクが有効な場合)。

DOSでは些細なことでした。 UARTを直接プログラムする必要がありました。この機能は何とかwin32で生き残ったのでしょうか?

役に立ちましたか?

解決

SetCommState()を使用して、RTSとDTRを制御できます。また、ハードウェアまたはドライバーがハードウェアフロー制御(CTSおよび/またはDSR)を処理するように設定することも、 SetCommMask()を使用して設定して、それらの信号が変化したときにイベントを取得することもできます。

まともな概要はこちらです: http://msdn.microsoft.com/ en-us / library / ms810467.aspx

Win32 Serial Comm APIおよび/またはドライバーは細心の注意を払う必要があるため、回線上で行われていることをデバッグする必要があることに注意してください。

他のヒント

this RS232ポートと通信するためにプロジェクトを行う必要があったときのチュートリアル。これは、ポートを開き、タイムアウトなどのプロパティを設定し、読み取り/書き込みを行い、ポートを閉じる方法の完全な例です。あなたのプロジェクトはおそらくもう終わっていますが、SOアーカイブに残っているので、これが役に立つことを願っています。

デバイスドライバーを実装する必要がある保護されたハードウェアに到達するためにのみ、同様の種類のプログラミングを行うことができます。同じタイプの仕事をしていた1980年代以来、これは簡単になったと思います。

Microsoftは実際にハードウェアハンドシェイクを実際に行っていますか? NT、win2000、およびXPは、長年にわたってハードウェアでハンドシェイクを行いませんでした。代わりに、fifoが特定のポイントに到達すると、デバイスドライバーは手動でcts行を変更します。つまり、デバイスドライバーがデータを失い、マウスでウィンドウをつかみ、画面の周りを一周するのは信じられないほど簡単だったということです(すべてのパスまたは一部のパスで、そのウィンドウを画面の左側から外してください) )。 Altキーを押しながらEnterキーを押すと、全画面でコマンドプロンプトが表示されます。これは、データ損失を引き起こす簡単な方法です。または、十分な割り込み遅延を引き起こす他の何か。基本的に、Microsoftのハードウェアフロー制御はハードウェアではなくソフトウェアフロー制御です。ハードウェアにハードウェアフロー制御機能がある場合でも、microsftのドライバーはそのビットを設定しませんでした。 SeaLevelは最終的にそのビットをサポートしましたが、それを有効にするにはSetCommState()に適切な無関係の設定を配置する必要がありました。

シグナルを制御するプログラムに関しては、SetCommState()を使用します。

DTR / DSR / DCDフロー制御をサポートしないUSBシリアルアダプターがいくつかあります。 これがあなたの場合かもしれません。

http://www.digi.com/support/kbase/kbaseresultdetl? id = 588

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top