Microsoft Comm Control 6.0 のチェックボックスをONにして適用ボタンを押します。
そうすると、コントロールの場所に電話のコントロールが追加されたはずです。
▼受信イベントを拾う
コントロールをフォームに貼り付けてダブルクリックします、そうすると、Private Sub MSComm1_OnComm() というイベントが作成されたと思います。
そこで、次の様に書き換えてみましょう。
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 0 '読み取るバイト数を指定 0は全て読み込む
Label1.Caption = MSComm1.Input
End Select
End Sub
これは、MSCommがデータを受信した時にLabelの文字を書き換えるコードです。
▼ポートへの接続
次にポートへの接続とイベントの閾値を設定します。
Private Sub Form_Load()
MSComm1.CommPort = 4
MSComm1.Settings = "9600,N,8,1"
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
End Sub
MSComm1.OutBufferCount = 0 'バッファクリア
Do
MSComm1.Output = "送信文字列" & vbCr & vbLf
Loop While MSComm1.OutBufferCount >= 1
上記コードを走らせると送信完了まで待機し、文字が送信されます。
▼文字の受信 イベントで1文字づつ
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
MSComm1.InputLen = 1 '読み取るバイト数を指定 0は全て読み込む
str = str + MSComm1.Input
End Select
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.NullDiscard = False ' 0 を受信する Trueにすると0を無視する
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive
Dim b() As Byte
Dim i As Integer
MSComm1.InputLen = 0 '読み取るバイト数を指定 0は全て読み込む
b = MSComm1.Input
For i = LBound(b) To UBound(b)
str = str + " " + CStr(b(i))
Next i
End Select
End Sub
Option Explicit
Private Declare Sub Sleep Lib "kernel32" ( _
ByVal dwMilliseconds As Long)
Private Function connect(ByVal port As Integer) As Boolean
connect = False
If MSComm1.PortOpen Then MSComm1.PortOpen = False
On Error GoTo Err1
MSComm1.CommPort = port
MSComm1.Settings = "9600,E,8,1" '偶数パリティで設定しているため注意
MSComm1.DTREnable = False
MSComm1.PortOpen = True
connect = True
Err1:
End Function
Private Function portScan() As Integer
Dim portNo As Integer
Dim str As String
For portNo = 1 To 16
If connect(portNo) Then
MSComm1.OutBufferCount = 0 'バッファクリア
Do
MSComm1.Output = "t" & vbCr & vbLf
Loop While MSComm1.OutBufferCount >= 1
Dim i As Integer
For i = 1 To 100
Sleep 10
If MSComm1.InBufferCount > 3 Then
str = MSComm1.Input
If str = ("NG" + vbCrLf) Then
'接続成功
portScan = portNo
Exit Function
End If
End If
Next i
End If
Next portNo
portScan = -1 '接続先のポートが見つからなかった
End Function
Private Sub portScanReset()
'ポート検索用に設定されているため、自分のアプリケーション用に設定しなおす
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
End Sub
Private Sub Form_Load()
Dim portNo As Integer
portNo = portScan()
If portNo <> -1 Then
Form1.Caption = "接続先ポート番号 : " & portNo
Else
Form1.Caption = "接続エラー"
End If
portScanReset
End Sub