上位机:PC机
下位机:单片机
  下位机有150个数据,要在上下位机开机通信正常后分三批上传给上位机,每个数据都要显示在PC界面上的规定位置
  每次上传前上位机都要给下位机发送一个上传命令
Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
        Case 2
            strbuff = MSComm1.Input
            inbte = strbuff
            For i = 0 To UBound(inbte())
                    indata = indata & Right("0" & Hex(inbte(i)), 2)
            Next i
            Text4.Text = indata
          If Mid(indata, 1, 4) = "5A79" Then
             indata = ""
             Timer1.Enabled = False
             Timer2.Enabled = True
           ElseIf Mid(indata, 1, 8) = "3582017F" Then
           indata = ""
             mnulianji.Enabled = False
             mnutuoji.Enabled = True
             MsgBox "联机成功!", , "提示"
             Timer2.Enabled = False
             Timer1.Enabled = True    '定时器1打开发送AA,收到5A79后定时器2打开
             sj = 1       '上传第一批数据
             n = 0: n1 = 0
            ElseIf sj = 1 Then
              ss = Mid(indata, 5, 2)                                            '1
                 Text2(0).Text = Val("&h" & ss) / 10 - 12 & "dB"
                 Slider2(0).Value = 240 - Val("&H" & ss)
              ss = Mid(indata, 7, 2)                                            '2
                 Text3(0).Text = Val("&h" & ss) / 10
                          50个数据依次显示在要显示的位置
                 sj=2        '重新赋值为2,准备上传第二批数据 
                 timer2.enabled=false
                 timer1.enabled=true
               n=0  :n1=0
   现在问题是接收到的50个数据,上位机只读取了8个,但text4中也显示下位机发过来的50个数据,找了很久不知啥原因
   还有就是当我把sj=2这句注释掉以后就读取了全部数据,但这样的话就没办法发送第二批数据的命令了,
   望高手看一下问题在那里,如有看不明白的QQ联系:479702007,24小时在线等,急急!

解决方案 »

  1.   

    Private Sub Form_Load()
    With MSComm1
        .CommPort = 1
        .Settings = "38400,n,8,1"
        .OutBufferCount = 0
        .InBufferCount = 0
        .InputMode = 1
        .RThreshold = 1
        .SThreshold = 0
        .OutBufferSize = 512
        .InBufferSize = 1024
        .InputLen = 0
        If Not .PortOpen Then             '判断通信口是否打开
             On Error Resume Next
            .PortOpen = True                '打开通信口
              If Err Then                   '错误处理
                 MsgBox "COM1被占用或此COM1不存在!请选择其他端口!", 16, "错误提示"
                 Exit Sub
              End If
          End If
    End WithEnd Sub
      

  2.   

    Private Sub MSComm1_OnComm() 
        Select Case MSComm1.CommEvent 
            Case 2 
                MSComm1.RThreshold = 0
                strbuff = MSComm1.Input 
                inbte = strbuff 
                For i = 0 To UBound(inbte()) 
                        indata = indata & Right("0" & Hex(inbte(i)), 2) 
                Next i 
                Text4.Text = indata 
              If Mid(indata, 1, 4) = "5A79" Then 
                indata = "" 
                Timer1.Enabled = False 
                Timer2.Enabled = True 
              ElseIf Mid(indata, 1, 8) = "3582017F" Then 
              indata = "" 
                mnulianji.Enabled = False 
                mnutuoji.Enabled = True 
                MsgBox "联机成功!", , "提示" 
                Timer2.Enabled = False 
                Timer1.Enabled = True    '定时器1打开发送AA,收到5A79后定时器2打开 
                sj = 1      '上传第一批数据 
                n = 0: n1 = 0 
                ElseIf sj = 1 Then 
                  ss = Mid(indata, 5, 2)                                            '1 
                    Text2(0).Text = Val("&h" & ss) / 10 - 12 & "dB" 
                    Slider2(0).Value = 240 - Val("&H" & ss) 
                  ss = Mid(indata, 7, 2)                                            '2 
                    Text3(0).Text = Val("&h" & ss) / 10 
                              50个数据依次显示在要显示的位置 
                    sj=2        '重新赋值为2,准备上传第二批数据 
                    timer2.enabled=false 
                    timer1.enabled=true 
                  n=0  :n1=0 
                MSComm1.RThreshold = 1