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 の辺りが怪しいのですが...。
よろしくお願い致します。
>ポートを開いた後
MS-DOS プロンプトなどで、
NETSTAT コマンドを実行し、
Listenになってるか?などを確認してみては?
モデム系の機器が相手なんだからポートを開いたら最初に
MSComm1.InputMode = comInputModeText
Buffer = "AT" & vbCrLf
MSComm1.Output = Buffer
のようにするべき。
ATコマンドを使用するモデム類は、最初の AT+改行 のビットパターンから
通信条件(ボーレート、データ長、パリティ等)を取得する構造なので、
それを省略するとTA側の通信条件がコンピュータ側と同じになりません。
りあえず、気を付けておくべき点として
(1)AT コマンドをきちんと調べましょう。普通は何も設定しないと発信者番号は取得できません。ATコマンドは一部の基本的なコマンド以外は機種依存しているので、該当機種のマニュアルをよく読みましょう。
(2)一部の機種で初期設定のコマンドが特定の通信条件でないと受理されない物があります。
(3)マニュアルがなく、まともなアプリケーション開発が出来ない機種も存在します。インターネット接続さえ出来れば後どうでもいいという考え方のメーカーがありますから。そういう機種は無視して切り捨てましょう。
記載プログラム見ると
& vbCrLf
が足りていないだけだと思うけど。
大概はEnter(\r\n)で1命令の終了を認識するように作ってあるはず。
皆さん、ご親切にありがとうございます。
現在テスト環境が無いのでご指摘頂いた内容を試せないのですが、
TAのマニュアルにLF省略可と記載してありましたので
Buffer = "AT" & vbCr
と記述した場合でもだめでした。
LFは必要だったのでしょうか。
テスト環境が整い次第試してみます。
DTR信号をEnableしてないからかな?(記載コードに漏れがないなら・・・)
あと個人的には
>.Handshaking = 2 - comRTS
が非常に気になった。(ハンドシェイクなし?)
皆さんのご意見を参考にしてやってみましたが、全く反応がありませんでした。
TAの仕様にフロー制御RS/CSとなっていましたが、Handshaking = 2 - comRTS
でいいのでしょうか?
ハイパーターミナルではポートの設定を行い、「電話を待つ」状態にすれば
自動的に着信番号が次々と表示されます。
その際、ATコマンドは使用できないのですがその辺と関係ないでしょうか?
未熟者なので的外れな質問をしているかもしれませんが何卒よろしくお願い致します。
GODさんと同じくDTREnable=True くらいしか思いつかない。
ハンドシェイクはそのまま(2)でもよさそう。
あと、なんとなく待機時のRTSとDTRの状態を確認したほうがよさそう。
ツイート | ![]() |