質問

私はWavecom最高裁GSMモデムを持っています。私は、モデムと通信し、それが受信するテキストメッセージを読み、簡単なアプリケーションを書いています。

私のアプリケーションは、そのメモリ内に保存し、数が0より大きい場合、それはモデムのメモリから削除メッセージを読み取ったメッセージの数については、モデムを照会します。私は数秒ごとにモデムをこのように照会します。

残念ながら、しかし、モデムは数分ごとにハングアップし、私はそれに送信するコマンドATいずれにも応答しません。私はコミュニケーションのロックを解除するために思い付いた唯一の解決策は、シリアルポートを閉じ、新たにそれを開くことです。そして、すべてがシリアルポートはモデムがハングアップしたときに再びリニューアルオープンする必要があり、その後、次の数分間で結構です。

これは、もちろん、モデムのせいすることができますが、私はそれとの通信方法がOKであるかどうかを疑問に思っています。

すべてのファーズは、私は非同期操作用のモデムのシリアルポートを開きます。次のようにそれから私は、DCB構造を設定します:

GetCommState(PortHandle, DCB);
DCB.BaudRate := 115200;
DCB.ByteSize := 8;
DCB.Parity := NOPARITY;
DCB.StopBits := ONESTOPBIT;
DCB.EvtChar := #13;
SetCommState(PortHandle, DCB);
SetCommMask(PortHandle, EV_RXFLAG);

//the modem does not respond without setting these:
EscapeCommFunction(PortHandle, SETDTR);
EscapeCommFunction(PortHandle, SETRTS);

そして、私が行うすべては、ATコマンドを送信し、モデムの応答を待つです。私は、任意のフロー制御を使用しないでください。私はすべてが、COMMイベントを待つモデムが応答すると、シリアルポートのキューからデータを読み込み、メッセージ用のモデムを照会する#13文字が続くATコマンドいくつかの書き込みである。

私はあなたが見ることができるように、私はそのフィールドの一部を変更していないため、私は、不適切DCB構造を設定しているかもしれないと思います。シリアルポート上の私の知識が十分ではありませんので、私はRTSとDTR制御(有効/無効/ハンドシェイク/トグル)を設定する方法がわからない。

あなたがモデムを扱うこのようにいくつかの明白な誤りに気づいた場合は、私が間違って行っていたものを私に説明している場合、

、私は感謝されます。すべてがうまくている場合は、他の一方で、多分あなたは、モデムがハングアップする理由のアイデアを持っている?

事前にありがとうございます。

役に立ちましたか?

解決

一般的にDCB設定を使用すると、確認する必要があります最初のものです。モデムのマニュアルには、シリアルポートの設定を言及する必要があります。そうでない場合は、モデムのモデル番号をオンラインで検索します。

他のヒント

デバイスマネージャー、モデムで確認フロー制御を行い、プログラムはすべて同じに設定されています。私は、Delphiを知らないが、私はDCBは「フラグ」フィールドを持つべきだと思います。ハードウェアフロー制御のための24にそれを設定してみてください。

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