2

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言われていますが、私のコードでは発生していません。これが私のコードです:RThresholdMSComm1.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、文字は受信されません。何が問題なのか誰か教えてください。

4

4 に答える 4

1

報告される文字列は常に同じ長さではなく、MSComm RThreshold はあまり正確ではありません。そのため、電話番号が利用可能な場合にのみ解析する方が正確です。カスタムプロトコルで完全なテレグラムを受信するために、いわゆる「DataCollector」を提供するSupercomと呼ばれるライブラリを使用します。SuperCom DataCollectorは、接続 (シリアル、TCP) を介して受信したデータを提供できるため、完全にバックグラウンドで実行されます。これは、start や end などの定義 (Start="CLIP:" や End="," など) に基づいています。アプリケーションはデータを待つ時間を無駄にしませんが、利用可能な場合は電話番号を取得します。はい、商用製品ですが、何ヶ月も故障することなく実行する必要があります。

于 2015-11-12T15:46:57.297 に答える
-1

シリアルポートの通信設定

- ComPort mean is Port interfacing RS-232 (Com1,Com2) 
- Setting mean is Baud,Parity,Data(number of bits),Stop Ex. "1200,n,8,1 " 
- HandShaking mean is we can define to 4 type 1.comNone 2.comXonXoff 3. comRTS 4.comTRSXonXoff

送受信データにバッファを使用する

-InBuffersize mean is define buffer for receive data.
-OutBuffersize mean is define buffer for send data.
-Rthreshold mean is define to occur in Event-driven for send data
-Sthreshold mean is define to occur in Event-driven for receive data
-Inputlen mean is number of data to read in a buffer receive data
-EOFEnable mean is End-Of-File(EOF)

ハードウェアについて

- ParityReplace mean is character value instead of occur Parity Error 
- NullDiscard mean is define in receive or not "NULL CHARACTER"
- RTSEnablemean is define signal RTS (Request To Send)
- DTSEnablemean is define signal DTR(Data Terminal Ready)
于 2014-12-04T05:26:31.483 に答える