- PR -

SerialPortを使ったリターン値

1
投稿者投稿内容
未記入
会議室デビュー日: 2006/11/14
投稿数: 9
投稿日時: 2007-04-26 09:49
C#2005を使用しています。
SerialPortクラスを使用して内蔵モデムにATコマンドを飛ばし電話をかけようと思っています。

以下のようにATコマンドを指定したCOMポートに発行した場合のモデムのリターン値を取得したいのですがwirteメソッドはvoidの為に取得できません。

SerialPort.Write(ATコマンド);
例)
SerialPort port = new SerialPort(ComPort, 9600, Parity.None, 8, StopBits.One);
port.Write("ATD" + TelNum);

モデムにATコマンドを発行した際にどこでリターン値を取得すればよいのでしょうか?
そもそもやり方が間違っているのでしょうか?
知ってる方がいましたらご教授ください。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-04-26 10:24
こんにちは。

引用:

未記入さんの書き込み (2007-04-26 09:49) より:
以下のようにATコマンドを指定したCOMポートに発行した場合のモデムのリターン値を取得したいのですがwirteメソッドはvoidの為に取得できません。



結果コード(数字orテキスト)を”受信”すればいいのではないでしょうか?

未記入
会議室デビュー日: 2006/11/14
投稿数: 9
投稿日時: 2007-04-26 11:34
Tdnr_Sym様
回答ありがとうございます。

>結果コード(数字orテキスト)を”受信”すればいいのではないでしょうか?

結果コードを受信というのはDataReceivedイベントでSerialPort.Readをすると言うことですか?

SerialPort.Readをした結果を出力するとwriteで入力した文字列が表示されてしまいます。
そもそも結果コードを取得する方法が違っているのでしょうか・・・。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-04-26 12:02
こんばんは。

引用:

未記入さんの書き込み (2007-04-26 11:34) より:
SerialPort.Readをした結果を出力するとwriteで入力した文字列が表示されてしまいます。
そもそも結果コードを取得する方法が違っているのでしょうか・・・。



エコーを受信しているからではないですか?
不要ならエコーしない様に設定できないですか?
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2007-04-26 12:15
こんにちは。
追記です。

プログラミングの前に先ず、
ATコマンドの内容を確認して
ターミナルソフトで直接コマンドを入力して確かめてみては、いかがですか?
ひろ@ya
大ベテラン
会議室デビュー日: 2006/02/23
投稿数: 168
投稿日時: 2007-04-27 13:10
最近のモデムは同梱の紙のマニュアルにのは接続方法とドライバのインストール方法と
ダイヤルアップ接続の設定方法しか書いてないので、付属のCDやメーカのWebサイトからATコマンドリファレンス等を入手することをお勧めします。

# DOS時代のモデムのマニュアルの方がプログラマに親切でした。
TAD
ベテラン
会議室デビュー日: 2007/03/20
投稿数: 52
お住まい・勤務地: 海のそば
投稿日時: 2007-04-27 14:32
引用:
不要ならエコーしない様に設定できないですか?


あるいは、もう一行受信すると応答が取れるんじゃないでしょうか。

VBの例ですが、
http://support.microsoft.com/kb/823179/ja
にて
引用:
MSComm1.Output = "ATV1Q0" & Chr(13)
Console.WriteLine("Send the attention command to the modem.")
Console.WriteLine("Wait for the data to come back to the serial port...")
' Make sure that the modem responds with "OK".
' Wait for the data to come back to the serial port.
Do
Buffer = Buffer & MSComm1.Input
Loop Until InStr(Buffer, "OK" & vbCrLf)


という部分があります。やっていることは想像つきますよね? もちろん実用にするにはOKだけじゃなくて可能性のあるリターンコードを一通り検査しないといけないですが(ATDコマンドはいろいろエラーを返しそう)。あとタイムアウトとか(モデムに電源が入ってなかった...とかね)。

#に反応ですが
引用:
# DOS時代のモデムのマニュアルの方がプログラマに親切でした。


いわゆる「通信ソフト」の設定だけでも一般ユーザーレベルでATコマンドをいじらなきゃならないのが普通でしたから。いまのモデムの.infファイルの中身に相当するようなものを全部自分で...
1

スキルアップ/キャリアアップ(JOB@IT)