(1)信号:RS232C信号或RS422信号,
(2)波特率:300/600/900/1200/2400/4800 默认为1200
(3)数据位:所有数据均为ASCII码,每组数据由10位组成,第一位为起始位,第十位为停止位,中间8位为数据位。
(4)地址范围:26个地址(A~Z)
(5)以连续发送方式时,数据以ASCII码方式输出,每帧数据共有9组组成(包括小数点).数据传送先低位后高位,每帧数据间有一组是分隔符“=”,重为89.03,数据连续发送30.98000=30.98000=.........  我的程序如下请高手帮看看:Private Sub Command1_Click()  '开始接收
     Label1.Caption = ""
    If MSComm1.PortOpen = True Then
       MSComm1.PortOpen = False
    End If    If MSComm1.PortOpen = False Then
       MSComm1.CommPort = 1                   '串口号,
        MSComm1.Settings = "1200,n,8,1"        '串口的属性
        MSComm1.InputLen = 0                   '接收缓冲区的大小
        MSComm1.RThreshold = 10
       MSComm1.InputMode = comInputModeText     
        MSComm1.PortOpen = True                '打开通信串口
        MSComm1.InBufferCount = 0
       MSComm1.OutBufferCount = 0
    End If
End SubPrivate Sub MSComm1_OnComm()
   Dim k, i, j As Integer
   Dim myarray() As Byte
   Dim strss As String    Select Case MSComm1.CommEvent
        Case comEvReceive
         
            k = MSComm1.InBufferCount
             If k = 0 Then
                 Exit Sub
             End If
         
             ReDim myarray(k - 1)
             myarray = MSComm1.Input
             j = 0
             For i = 0 To UBound(myarray)                   ''''''每一组为10 个字节
                j = j + 1
                strss = strss & chr(myarray(i))
                If j = 10 Then
                   Label1.Caption =strss 
                   strss = ""
                   j = 0
                End If
             Next
             
        Case comEvSend
            MSComm1.OutBufferCount = 0
            MSComm1.InBufferCount = 0
       End Select
End SubPrivate Sub Command5_Click()   '停止接收
     Label1.Caption =strss
    If MSComm1.PortOpen = True Then
       MSComm1.PortOpen = False
    End If
End Sub

解决方案 »

  1.   

    你程序代码中既然以文本模式接收,则无须用Byte数组来获取数据,存在矛盾.
    接收代码中多余部分应删除,已注释掉.
    数据连续发送是30.98000=30.98000=.........
    那么MSComm1.RThreshold = 9
    而不是MSComm1.RThreshold = 10     
    我记得已回复你的另一贴,不知道你还在那方面存在疑问?
    Option Explicit
        Dim strss As StringPrivate Sub Command1_Click()         '开始接收
        Label1.Caption = " "
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
        End If
            If MSComm1.PortOpen = False Then
                MSComm1.CommPort = 1             '串口号,
                    MSComm1.Settings = "9600,n,8,1 "   '串口的属性
                    MSComm1.InputLen = 0
                    MSComm1.RThreshold = 9
                  MSComm1.InputMode = comInputModeText
                    MSComm1.PortOpen = True           '打开通信串口
                    MSComm1.InBufferCount = 0
                  MSComm1.OutBufferCount = 0
            End If
        Print MSComm1.PortOpen
    End SubPrivate Sub MSComm1_OnComm()
        Dim k, i, j  As Integer
        'Dim myarray()  As Byte既然以文本模式接收,则无须用Byte数组来获取数据
            Select Case MSComm1.CommEvent
                Case comEvReceive
                    k = MSComm1.InBufferCount
                    If k = 0 Then
                        Exit Sub
                    End If
                    ReDim myarray(k - 1)
                    strss = MSComm1.Input
                    'j = 0
                    'For i = 0 To UBound(myarray)     ' ' ' ' ' '每一组为10   个字节
                        'j = j + 1
                        'strss = strss & Chr(myarray(i))
                        'If j = 10 Then
                    Label1.Caption = Val(Mid(StrReverse(strss), 2, 8))
                    strss = ""
                            'j = 0
                        'End If
                    'Next
                Case comEvSend
                MSComm1.OutBufferCount = 0
                MSComm1.InBufferCount = 0
            End Select
    End SubPrivate Sub Command5_Click() '停止接收
        If MSComm1.PortOpen = True Then
            MSComm1.PortOpen = False
        End If
    End Sub