COM ポート経由でデータを受け入れるコードを VB6 で記述しようとしています。現在、1 台の GSM 電話がデータを送信しています。データは、通話やメッセージを含むあらゆるものである可能性があります。通話とメッセージの形式を取得できます。
通話の場合:
RING+CLIP: "+919823596784",145,"",,"",0
メッセージの場合:
+CMT: "AD-bytwoo",,"14/06/05,17:19:31+22"
9860939518:
Hi Hw r u
問題は、RThreshold
通話とメッセージのたびに値を変更する必要があることです。上記のようMSComm1.Rthreshold = 47
に、文字列全体を取得するための呼び出しやMSComm1.RThreshold = 70
小さなメッセージの場合と同様です。RThreshold が 47 未満または 47 より大きい呼び出しの場合、データはシフトし続けます。私が読んだスレッドが何であれ、イベントは1文字自体の受信時にトリガーされるため、1に等しくなければならないとMSComm1
言われていますが、私のコードでは発生していません。これが私のコードです:RThreshold
MSComm1.Oncom
Dim str_1 As String
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form_Load()
'On Error GoTo errx:
Dim strValue As String ' define Buffer value from Modem
MSComm1.CommPort = 6 'comm port no.
MSComm1.InBufferSize = 100
MSComm1.Handshaking = comNone
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 67 'no. of chr to receive
MSComm1.InputLen = 0 ' no. of chr on which oncomm event fires
MSComm1.RTSEnable = True
MSComm1.PortOpen = True 'open comm port
''MSComm1.Output = "AT + CLIP = 1" + Chr(13)
'Sleep 1500
'MSComm1.Output = "AT + CNUM" + Chr(13)
'Sleep 1500
'MSComm1.Output = "AT+CMGF=1" + Chr(13) '& Chr(10)
'Sleep 500
MSComm1.Output = "AT+CNMI=1,2" + Chr$(13)
Sleep 500
'Exit Sub
'errx:
'MsgBox "error"
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
If MSComm1.InBufferCount Then
Text1.Text = MSComm1.Input
End If
End If
MSComm1.InBufferCount = 0
str_1 = Text1.Text
End Sub
の場合MSComm1.RThreshold = 1
、文字は受信されません。何が問題なのか誰か教えてください。