System.IO.Ports.SerialPort-IOCTL_SERIAL_SET_WAIT_MASKを構成できますか?

StackOverflow https://stackoverflow.com/questions/628161

  •  06-07-2019
  •  | 
  •  

質問

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

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

RING

DATE = 0308
TIME = 2045
NMBR = 01234567890

RING

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

これがなぜなのかを理解するために、Sysinternals Portmon

主な違いは接続構成に現れます。私の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つの質問:

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

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

設定できない場合、シリアルポートを制御する低レベルのシステム関数に独自のラッパーを書き込むためにこれを回避する唯一のオプションはありますか?

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

役に立ちましたか?

解決

私は診断がうまくいかなかった。

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

必要なのは、送信するコマンドにキャリッジリターンを追加し、 Write メソッドを使用して送信することだけです。

時間を無駄にすることをおologiesびします。

他のヒント

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

.Netクラスの問題を回避できるかどうかを引き続き知りたい。

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