9

RS-232 ハンドシェイク ラインを win32 (古い C-API) から直接制御できるかどうか、またどのように制御できるか疑問に思っています。

外部ハードウェアとインターフェースしたいのですが、2 つの単純なデータラインで十分です。

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

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

4

5 に答える 5

7

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

適切な概要はこちら: http://msdn.microsoft.com/en-us/library/ms810467.aspx

Win32 Serial Comm API および/またはドライバーは扱いにくい場合があるため、ネットワーク上で何が起こっているかをデバッグする必要があることに注意してください。

于 2009-05-04T16:43:21.890 に答える
2

RS232 ポートと通信するプロジェクトを実行しなければならなかったときに、このチュートリアルに出くわしました。これは、ポートを開く方法、タイムアウトを含むいくつかのプロパティを設定する方法、読み取り/書き込み、ポートを閉じる方法の完全な例です。あなたのプロジェクトはおそらく今では終わっていますが、SOアーカイブに残っているので、これが有用であり続けることを願っています.

于 2009-06-26T01:34:46.560 に答える
0

デバイス ドライバーを実装するために必要な保護されたハードウェアを取得するためだけに、同様の種類のプログラミングを行うことができます。私が同じような仕事をしていた1980年代からは、これが楽になったと思います。

于 2009-05-04T16:36:59.177 に答える
0

マイクロソフトは実際にハードウェア ハンドシェイクを行っていますか? 何年もの間、NT、win2000、および XP は、ハードウェアでハンドシェークを行いませんでした。代わりに、fifo が特定のポイントに達すると、デバイス ドライバーは手動で cts 行を変更します。つまり、デバイス ドライバーにデータを失わせたり、マウスでウィンドウをつかんだり、画面の周りを円で囲んだりするのは非常に簡単でした (パスのすべてまたは一部で、そのウィンドウを画面の左側から外してください)。 )。Alt キーを押しながら入力してコマンド プロンプトを全画面表示にしたり、全画面表示にしたりすることは、データの損失を引き起こす簡単な方法でした。または、十分な割り込みレイテンシを引き起こすその他のもの。基本的に、マイクロソフトのハードウェア フロー制御はハードウェアではなくソフトウェア フロー制御です。ハードウェアにハードウェア フロー制御機能がある場合でも、マイクロソフトのドライバーはそのビットを設定していませんでした。

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

于 2009-05-04T16:55:31.597 に答える