运行后Text1.text没有反应,通讯不成.那位高手赐教,不胜感激.Option Explicit 
Private Sub Command4_Click()
  Text1.Text = ""
End SubPrivate Sub Form_Load()
  MSComm1.PortOpen = True  '打开串口
  MSComm1.Settings = "9600,e,7,1"  '设置通讯协议
End SubPrivate Sub Command1_Click()
  Dim buf$
  MSComm1.OutBufferCount = 0
  MSComm1.InBufferCount = 0
  buf = Chr$(4) + "013302" + Chr$(5)  '"013302"为变频器地址"01"和请求参数地址"3302",应该是:buf=04H,30H,31H,33H,33H,30H,32H,05H,不知以上的方法有没有问题.
  MSComm1.Output = buf
End SubPrivate Sub Command3_Click()
  MSComm1.PortOpen = False
  End
End SubPrivate Sub MSComm1_OnComm()
  Dim buf$
  With MSComm1
  Select Case .CommEvent
  Case comEvReceive
  buf = .Input
  Text1.Text = buf
  End Select
  End With
End Sub

解决方案 »

  1.   

    不要用OnComm事件去等待。
    主动读取数据!
      

  2.   

    buf = Chr$(4) + "013302" + Chr$(5)  '"013302"为变频器地址"01"和请求参数地址"3302",应该是:buf=04H,30H,31H,33H,33H,30H,32H,05H,不知以上的方法有没有问题.
      MSComm1.Output = buf你是按文本发的
    改成按2进制发dim lb(9) as byte
    lb(0)=chr$(4)
    lb(1)=&04h
    ...
    lb(9)=Chr$(5)buf = lb
      

  3.   

    不知为何,程序改为以下后还是不行Private Sub Command5_Click()
      Dim buf$
      buf = MSComm1.Input
      Text1.Text = buf
    End SubPrivate Sub Form_Load()
      MSComm1.PortOpen = True  '打开串口
      MSComm1.Settings = "9600,e,7,1"  '设置通讯协议
    End SubPrivate Sub Command1_Click()
      Dim buf$
      Dim lb(7) As Byte
      lb(0) = &H4
      lb(1) = &H30
      lb(2) = &H31
      lb(3) = &H33
      lb(4) = &H33
      lb(5) = &H30
      lb(6) = &H32
      lb(7) = &H5
      MSComm1.OutBufferCount = 0
      MSComm1.InBufferCount = 0
      buf = lb
      MSComm1.Output = buf
    End SubPrivate Sub Command3_Click()
      MSComm1.PortOpen = False
      End
    End Sub
      

  4.   

    Private Sub Form_Load()
      MSComm1.CommPort=1
      MSComm1.Settings = "9600,e,7,1"  '设置通讯协议
      msComm1.RThreshold=1
      MSComm1.PortOpen = True  '打开串口
    End Sub
    Private Sub Command1_Click()
      Dim buf$
      MSComm1.OutBufferCount = 0
      MSComm1.InBufferCount = 0
      buf = Chr$(4) + "013302" + Chr$(5)  '"013302"为变频器地址"01"和请求参数地址"3302",应该是:buf=04H,30H,31H,33H,33H,30H,32H,05H,不知以上的方法有没有问题.
      MSComm1.Output = buf
    End SubPrivate Sub Command3_Click()
      MSComm1.PortOpen = False
      End
    End SubPrivate Sub MSComm1_OnComm()
      Dim buf$
      With MSComm1
      Select Case .CommEvent
      Case comEvReceive
      buf = .Input
      Text1.Text = buf
      End Select
      End With
    End Sub
      

  5.   

    接收时用Variant型变量
    Private Sub MSComm1_OnComm()
      Dim buf
      dim i as long 
      With MSComm1
      Select Case .CommEvent
      Case comEvReceive
      buf = .Input
      for i = 0 to ubound(buf)
      Text1.Text = buf  End Select
      End With
    End Sub
      

  6.   

    这是VB与PLC通信的一段命令,你可参考 '初始化
    MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.NullDiscard = False                 'NULL字符从端口传送到接受缓冲区
        MSComm1.DTREnable = False                   'DTR线无效
        MSComm1.EOFEnable = False                   '不寻找EOF符
        MSComm1.RTSEnable = False                   'RTS线无效
        MSComm1.InBufferCount = 0                   '清空接受缓冲区
        MSComm1.OutBufferCount = 0                  '清空传输缓冲区
        MSComm1.SThreshold = 1                      '如果传输缓冲区完全空时产生MSComm事件
        MSComm1.RThreshold = 0                      '不产生MSComm事件
        MSComm1.InBufferSize = 1024
        MSComm1.PortOpen = True                     '打开端口----------------------------
     Dim MyArray(0 To 10) As Byte
        Dim MyArrays() As Byte
        Dim strBCD As String
        Dim sngTime As Single
        Dim MyData As Variant
        Dim mTime As Single
        Dim i As Integer
            
        mTime = (mWaitTime + 10 * bytNum) / 1000#
        strBCD = Trim(Format(lngAddr, "000000"))
        
        MyArray(0) = &HAC
        MyArray(1) = &H55  '读
        MyArray(2) = &H55
        MyArray(3) = Val(Mid(strBCD, 1, 1)) * 16 + Val(Mid(strBCD, 2, 1))
        MyArray(4) = MyArray(3)
        MyArray(5) = Val(Mid(strBCD, 3, 1)) * 16 + Val(Mid(strBCD, 4, 1))
        MyArray(6) = MyArray(5)
        MyArray(7) = Val(Mid(strBCD, 5, 1)) * 16 + Val(Mid(strBCD, 6, 1))
        MyArray(8) = MyArray(7)
        MyArray(9) = bytNum       '要读数据的个数
        MyArray(10) = bytNum
        
        
        MSComm1.Output = MyArray          ----------发数据
        
        MSComm1.InBufferCount = 0   '清空接收缓冲区
        Do
          DoEvents
        Loop Until MSComm1.OutBufferCount = 0    '
         
    ----------------------------------
    ‘读反馈数据
        sngTime = Timer
        Do
          DoEvents
          If Abs(Timer - sngTime) > mTime Then GetData = False: Exit Function  '等待100ms
        Loop Until MSComm1.InBufferCount = 1 + bytNum * 2
        
        MyData = MSComm1.Input
        MyArrays = MyData
        If MyArrays(0) = &HAC Then
          GetData = True
          For i = 1 To bytNum
            bytData(i - 1) = MyArrays(2 * i)
            If MyArrays(2 * i - 1) <> MyArrays(2 * i) Then GetData = False
          Next i
        Else
          GetData = False
        End If