2009-05-04 42 views
6

私は、win32(古いC-API)からRS-232ハンドシェイクラインを直接制御することが可能かどうか、またそれをどうやって制御できるのだろうと思います。RS232(Comポート)RTS/CTS/DTR/DSRの低レベル制御は可能ですか?

私は外部のハードウェアとインターフェースしたいと思います.2つの簡単なデータラインで十分です。

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

私はそれがDOSの下では些細なことだったことを覚えています。 1つはUARTを直接プログラムしなければなりませんでした。この機能はwin32で何とか生き残っていますか?

答えて

5

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

まともな概要はここにある:気難しいことなので、ワイヤ上で何が起こっているかのいくつかのデバッグを行う必要があるように調製することができるhttp://msdn.microsoft.com/en-us/library/ms810467.aspx

注意Win32のシリアル通信のAPIおよび/またはドライバという。

+0

まさに私が探していたものです。ありがとう。 –

0

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

0

Microsoftは実際にハードウェアハンドシェイクを現在行っていますか?何年ものNTの間、win2000とXPはハードウェアでハンドシェイクをしませんでした。代わりにFIFOが特定のポイントに達したとき、デバイスドライバは手動でctsラインを変更します。つまり、デバイスドライバにデータを失わせ、マウスでウィンドウをつかんで、画面の周りに円を描くことは信じられないほど簡単でした(例えば、パスの全部または一部で画面の左側からそのウィンドウを取ることを確認してください)。コマンドプロンプトをフルスクリーンとの間でやりとりするAlt-Enterは、データ消失を引き起こす簡単な方法でした。または、割り込み待ち時間の原因となるもの。基本的には、マイクロソフトのハードウェアフロー制御はハードウェアではなくソフトウェアフロー制御であり、ハードウェアがハードウェアフロー制御機能を備えていても、マイクロソフトのドライバはそのビットを設定していませんでした。 SeaLevelは最終的にそのビットをサポートしました。まあまあ、SetCommState()に適切でない設定をして有効にする必要がありました。

プログラムが信号を制御する限り、SetCommState()を使用してください。

+0

私はこのようなことをしてからしばらくしていましたが、私の記憶は、PCの世界で標準的な問題である8250/16550 UARTはハードウェアハンドシェイクをチップ上で処理しないということです。これは、Winドライバの問題ではなく、ハードウェアの機能のみをサポートします。ドライバはデバイス割り込み中にステータスを取得し、ハンドシェイクライン自体をトグル/センスする必要があります。SeaLevelまたはHayesは、よりインテリジェントなハードウェアを持っていた(または持っていた)ので、そのドライバがそれを利用するだろう。また、初期のWindowsドライバは本当に本当に悪いですが、最終的には多少なりとも良くなってきたことは間違いありません。 –

2

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

+0

あなたのリンクは死んでいます。あなたは少なくともそれのタイトルを覚えていますか? – Wolf

+1

WaybackMachineインターネットアーカイブ: [Serial How-To - RobBayer.com](http://web.archive.org/web/20081121174350/http://www.robbayer.com/serial)からアクセスすることはできます。 php) [Windowsシリアルポートプログラミング - Robertson Bayer(PDF)](http://web.archive.org/web/20111027074853/http://www.robbayer.com/files/serial-win.pdf) –

関連する問題