MsCommで着信番号を表示させたい


aat  2005-06-23 02:09:38  No: 122893

Access VBAでシリアルポートに接続したTAから着信番号を表示したいのですがうまくできません。
過去ログやMSDNのサンプルと同じように記述していますがTAからの反応がありません。
TAはNTT INSメイトD-4です。ハイパーターミナルでは着信番号を表示できています。
==================================
Private Sub Form_Load()
          With MSComm1
            .CommPort = 4
            .Handshaking = 2 - comRTS
            .RThreshold = 20
            .RTSEnable = True
            .Settings = "9600,n,8,1"
            .SThreshold = 1
            .PortOpen = True
         End With
End Sub

Private Sub コマンド2_Click()
    Dim Buffer As String
    
    If MSComm1.PortOpen = False Then
        MSComm1.PortOpen = True
    End If
    
    Buffer = "ABC"
    MSComm1.Output = Buffer
    MSComm1.InputMode = comInputModeText
    
    Do '10文字受信するまで待機
        DoEvents
    Loop Until MSComm1.InBufferCount >= 10
    Buffer = MSComm1.Input
end sub
=======================================
ちなみに、アナログ回線でナンバーディスプレイアダプタをした場合は
上記のコードで取得できました。
憶測ですがTAとの通信がうまくいってないような気がしています。
ポートを開いた後、Output  の辺りが怪しいのですが...。
よろしくお願い致します。


いな  2005-06-23 02:12:07  No: 122894

>ポートを開いた後

MS-DOS プロンプトなどで、
NETSTAT コマンドを実行し、
Listenになってるか?などを確認してみては?


ひろ  2005-06-23 19:52:03  No: 122895

モデム系の機器が相手なんだからポートを開いたら最初に

   MSComm1.InputMode = comInputModeText
   Buffer = "AT" & vbCrLf
   MSComm1.Output = Buffer

のようにするべき。
ATコマンドを使用するモデム類は、最初の AT+改行 のビットパターンから
通信条件(ボーレート、データ長、パリティ等)を取得する構造なので、
それを省略するとTA側の通信条件がコンピュータ側と同じになりません。

りあえず、気を付けておくべき点として

(1)AT コマンドをきちんと調べましょう。普通は何も設定しないと発信者番号は取得できません。ATコマンドは一部の基本的なコマンド以外は機種依存しているので、該当機種のマニュアルをよく読みましょう。

(2)一部の機種で初期設定のコマンドが特定の通信条件でないと受理されない物があります。

(3)マニュアルがなく、まともなアプリケーション開発が出来ない機種も存在します。インターネット接続さえ出来れば後どうでもいいという考え方のメーカーがありますから。そういう機種は無視して切り捨てましょう。


GOD  2005-06-23 20:02:57  No: 122896

記載プログラム見ると
 & vbCrLf
が足りていないだけだと思うけど。
大概はEnter(\r\n)で1命令の終了を認識するように作ってあるはず。


aat  2005-06-23 22:38:31  No: 122897

皆さん、ご親切にありがとうございます。
現在テスト環境が無いのでご指摘頂いた内容を試せないのですが、
TAのマニュアルにLF省略可と記載してありましたので
Buffer = "AT" & vbCr
と記述した場合でもだめでした。
LFは必要だったのでしょうか。
テスト環境が整い次第試してみます。


GOD  2005-06-23 23:21:52  No: 122898

DTR信号をEnableしてないからかな?(記載コードに漏れがないなら・・・)

あと個人的には
>.Handshaking = 2 - comRTS
が非常に気になった。(ハンドシェイクなし?)


aat  2005-06-28 03:12:10  No: 122899

皆さんのご意見を参考にしてやってみましたが、全く反応がありませんでした。
TAの仕様にフロー制御RS/CSとなっていましたが、Handshaking = 2 - comRTS
でいいのでしょうか?

ハイパーターミナルではポートの設定を行い、「電話を待つ」状態にすれば
自動的に着信番号が次々と表示されます。
その際、ATコマンドは使用できないのですがその辺と関係ないでしょうか?

未熟者なので的外れな質問をしているかもしれませんが何卒よろしくお願い致します。


ブルー  2005-06-28 08:20:41  No: 122900

GODさんと同じくDTREnable=True くらいしか思いつかない。
ハンドシェイクはそのまま(2)でもよさそう。

あと、なんとなく待機時のRTSとDTRの状態を確認したほうがよさそう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加