用的MSCOMM控件,但对数据的鉴别不会。数据格式是开始位+数据+结束位,我如何取得数据,并且区分数据阿?

解决方案 »

  1.   

    下午写了一个,但有错误。工作流程是这样的:下位机先发FF,作为联机信号,该程序收到FF后,再返回FF作为确认信号,然后就是接受下位机的数据,具体数据格式:共4位,第一位是报警位,第二、三位是地址位,第四位是数据位。程序如下:
    Private Sub MSComm1_OnComm()
    Select Case MSComm1.CommEvent
    '检测接收事件
        Case comEvReceive
        Dim buf As Variant         '接收联机信号
        Dim Buffer As Variant      '用来从接收缓冲区读取数据
        Dim Arr() As Byte
           If MSComm1.InBufferCount > 0 Then '判断是否有输入
             buf = MSComm1.Input
             MSComm1.InBufferCount = 0
             If buf = &HFF Then     //注意:是这行有错误,是类型不匹配。为什么?
             MSComm1.Output = &HFF  '返回确认信息
             MSComm1.RThreshold = 0 '使comEvReceive事件失效
             Do
             DoEvents
             Loop Until MSComm1.InBufferCount >= 4 '取得下位机的4个字节的信息
             Buffer = MSComm1.Input '读接收的二进制数据
             Arr = Buffer           '赋值于字节数组以便处理  //注意:说这里不能赋值给数组,为什么啊?
             Select Case Arr(0)
             Case &H77              '当为警情信号时
             b1 = Arr(3) - 6 * (Arr(3) \ 16)
                Select Case Arr(2)  '选择房间信息
                Case &H11
                Shape1.FillColor = RGB(255, 0, 0)
                Text1.ForeColor = RGB(255, 0, 0)
                Text1.Text = "警告:检测室1出现危险!温度为: " + b1 + "度"
                Case &H22
                Shape2.FillColor = RGB(255, 0, 0)
                Text1.ForeColor = RGB(255, 0, 0)
                Text1.Text = "警告:检测室2出现危险!温度为: " + b1 + "度"
                Case &H33
                Shape3.FillColor = RGB(255, 0, 0)
                Text1.ForeColor = RGB(255, 0, 0)
                Text1.Text = "警告:检测室3出现危险!温度为: " + b1 + "度"
                End Select
            End Select
            Else
            Text1.Text = "接收数据格式错误,请重新发送!"
            MSComm1.RThreshold = 1
            End If
          
           End If
           End Select
    End Sub
    大家帮忙啊,在此先谢了!!!!!
      

  2.   

    数据格式是开始位+数据+结束位---------不用管,那是硬件处理,你读出来的都是数据bin方式,有数据时,先将数据读到一个variant变量里,再将变量值赋给一个byte数组,对数组进行操作
      

  3.   

    第2个错误好像不应该
    是否bin方式????
      

  4.   

    Dim buf () As ByteIf buf(0) = &HFF Then     
      

  5.   

    我已经设置了二进制读取了。mscomm1.inputmode=1
    ???????????
    现在我是一头雾水啊!
      

  6.   

    说白了就是硬件的TTL电平与软件里的二进制的转化问题,有会的吗????
      

  7.   

    If MSComm1.InBufferCount > 0 Then '判断是否有输入
       buf = MSComm1.Input
       Sleep(100)
       .......
    End If