想讀取某串口設備中的數據,該怎麼樣實現呢?
可發郵件到:[email protected]
先謝謝了.我很菜,沒辦法,沒做過這方面的事.還請不要笑話.要分只管開口要,我從來就不會下吝嗇分的.

解决方案 »

  1.   

    使用MSCOMM控件是mscomm1.inptu就可以接收串口中的数了。
    如:
         Private Sub Form_Load()
    Dim receivedata As vaviant
         Dim loop1 As Integer
         MSComm1.PortOpen = 1
         Do
         loop1 = loop1 + 1
         MSComm1.Input = receivedata
         If loop1 = 500 Then
         Exit Sub
         Loop While receivedata = ""
         strgood = Asc(receivedata)
    End Sub
      

  2.   

    http://www.ccw.com.cn/htm/app/aprog/01_2_26_3.asp
      

  3.   

    '通过串口向一个仪表发送数据,为4个字节,然后仪表会反馈给我一个8个字节的数据,每隔200ms发送一次
        '注: 有两个协议,分别应用于两种仪表 
        ' 协议一:发送时,为4个字节,接收数据为8个字节。 
        ' 协议二:发送时,为8个字节,接收数据为10个字节。 
        Private arrSend(8) As Byte 
        Private arrSendRead(4) As Byte 
        Private strFlag As String 
        Private Sub Form_Load() 
         With MSComm1 
         .CommPort = 1 
         .Settings = "9600,n,8,2" '设置通信口参数 
         .InBufferSize = 640 '设置MSComm1接收缓冲区为100字节 
         .OutBufferSize = 512 '设置MSComm1发送缓冲区为80字节 
         .InputMode = comInputModeBinary '设置接收数据模式为二进制形式 
         .InputLen = 1 '设置Input 一次从接收缓冲读取字节数为1 
         .SThreshold = 0 '设置Output 一次从发送缓冲读取字节数为1 
         .RThreshold = 10 '设置接收一个字节产生OnComm事件 
         .InBufferCount = 0 '清除接收缓冲区 
         .OutBufferCount = 0 '清除发送缓冲区 
         If .PortOpen = False Then '判断通信口是否打开 
         .PortOpen = True '打开通信口 
         If Err.Description Then '错误处理 
         MsgBox "串口通信无效!" 
         Exit Sub 
         End If 
         End If 
         End With 
         strFlag = "1" '协议一 
         strFlag = "2" '协议二 
         Timer1.Enabled = True 
        End Sub 
         
        Private Sub Timer1_Timer() '200ms触发一次 
         sendReadDec 
        End Sub 
        Private Sub sendReadDec() 
         On Error GoTo errhandle 
         MSComm1.OutBufferCount = 0 
         MSComm1.InBufferCount = 0 
         If strFlag = "1" Then '协议一 
         arrSend(0) = &H80 + Hex(1) 
         arrSend(1) = &H80 + Hex(1) 
         arrSend(2) = &H52 
         arrSend(3) = &HC 
         arrSend(4) = &H0 
         arrSend(5) = &H0 
         arrSend(6) = CByte("&H" & Right(CStr(Hex(arrSend(3) * 256 + 82 + 1)), 2)) 
         arrSend(7) = (arrSend(3) * 256 + 82 + 1 - arrSend(6)) \ 256 
         MSComm1.RThreshold = 10 
         MSComm1.Output = arrSend 
         Else '协议二 
         arrSendRead(0) = &H80 + Hex(1) 
         arrSendRead(1) = &H80 + Hex(1) 
         arrSendRead(2) = &H52 
         arrSendRead(3) = &HC 
         MSComm1.RThreshold = 8 
         MSComm1.Output = arrSendRead 
         End If 
         
         Exit Sub 
        errhandle: 
         If Err.Number = 8018 Then 
         MsgBox "端口已经被其它应用程序打开,系统不能正常运行!", vbOKOnly + vbCritical, "端口错误" 
         End If 
        End Sub 
        Private Sub MSComm1_OnComm() 
        Dim arrReceive(10) As Byte 
        Dim lngData As Variant '用来从接收缓冲区读取数据 
         On Error Resume Next 
         With MSComm1 
         Select Case MSComm1.CommEvent 
         Case comEvReceive 
         RThreshold = 0 '关闭OnComm事件接收 
         lngData = .Input '读取一个接收字节 
         arrReceive(0) = lngData(0) 
         lngData = .Input 
         arrReceive(1) = lngData(0) 
         lngData = .Input 
         arrReceive(2) = lngData(0) 
         lngData = .Input 
         arrReceive(3) = lngData(0) 
         lngData = .Input 
         arrReceive(4) = lngData(0) 
         lngData = .Input 
         arrReceive(5) = lngData(0) 
         lngData = .Input 
         arrReceive(6) = lngData(0) 
         lngData = .Input 
         arrReceive(7) = lngData(0) 
         If strFlag = "1" Then 
         lngData = .Input 
         arrReceive(8) = lngData(0) 
         lngData = .Input 
         arrReceive(9) = lngData(0) 
         End If 
         End Select 
         End With 
        End Sub
      

  4.   

    楼上的,上面好像有一句有点问题。
                 If Err.Description Then '错误处理
    应该改成:If Err.Description <>"" Then   '错误处理
    因为Err.Description是string型的而不是Boolean型的。
    OK,应该就是这样了。