1

私はSystem.IO.Ports.SerialPorts、古い外部モデムから発信者の表示データを収集する小さなWindowsフォームアプリケーションを作成することにより、.Net(3.5)がクラスを介してシリアルポートとどのように相互作用するかについて少し学ぼうとしています。

モデムが発信者表示をサポートしていることをテストしました。Puttyまたはハイパーターミナルを使用して(ここAT#CID=1で見つけたコマンドを使用して)発信者の表示データを収集するようにモデムを構成でき、電話が鳴るとデータが表示されます。ターミナルウィンドウでは、次のようになります。

RING

DATE = 0308
TIME = 2045
NMBR = 01234567890

RING

私のC#アプリケーションはモデムを正常に構成しているように見えRING 、電話が鳴るとメッセージを表示します。ただし、発信者IDデータは表示されません。

これがなぜであるかを理解するために、SysinternalsPortmonを使用してさまざまなクライアントが実行したアクションを比較しまし

主な違いは接続構成にあります。私のC#アプリケーションには、PuttyとHyperterminalにはない次の行が含まれています。

0.00000307  callerID.exe    IOCTL_SERIAL_SET_WAIT_MASK  Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING   

私が理解しているように、これIOCTL_SERIAL_SET_WAIT_MASKはフィルタリングするメッセージタイプの包括的なリストです。

したがって、3つの質問:

発信者ID情報がによって抑制されている可能性はありIOCTL_SERIAL_SET_WAIT_MASKますか?

その場合、発信者ID情報を表示するように設定するにはどうすればよいですか?クラスのプロパティからはアクセスできないようです。

構成できない場合、これを回避して、シリアルポートを制御する下位レベルのシステム関数に独自のラッパーを作成する唯一のオプションはありますか?

シリアルポート通信についての私の理解は非常に基本的であるため、診断にはかなりの時間がかかると思います。どんな指導もありがたく受けました。

4

2 に答える 2

1

私は自分の診断とはかけ離れていました。

このWriteLineメソッドは、モデムが予期しているライン ターミネータで送信するコマンドを終了していないようです。

送信するコマンドにキャリッジ リターンを追加し、メソッドを使用して送信するだけで済みましたWrite

誰かの時間を無駄にして申し訳ありません。

于 2009-03-10T18:49:24.433 に答える
0

システム dll の P/Invoke 経由でシリアル ポートにアクセスする方法の適切な例のように見える MSDN でこれを見つけました。

.Net クラスに関する問題を回避できるかどうかを知りたいです。

于 2009-03-10T10:46:49.197 に答える