Private Sub Form_Load()
If MSComm1.PortOpen = True Then
  MSComm1.InBufferCount = 0
  MSComm1.PortOpen = False
End If
End SubPrivate Sub Timer1_Timer()
Timer1.Interval = 0
MSComm1.InputLen = 1
MSComm1.OutBufferCount = 0
MSComm1.InBufferCount = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
End SubTimer1的Interval属性我设置的是1
以上代码我在本机上调试通过了的
但只要一移植到另一台电脑上,执行到MSComm1.PortOpen = True这一行时就会出错,提示是"实时错误,端口已打开",错误号没注意记~请教一下该怎么解决?

解决方案 »

  1.   

    补充一下:我使用的是COM1口,并且没有其它任何程序占用该端口~~
      

  2.   


    在Form_load里加一句试试
        MSComm1.CommPort = 1                        '设置或返回端口号  
    最好把串口配置好,例如    '设置串口属性, 打开串口     MSComm1.CommPort = 1                        '设置或返回端口号  
        MSComm1.InBufferSize = 1024                '设置接收缓冲区的大小 
        MSComm1.Settings = "115200,n,8,1"          '设置并返回通讯参数,值为字符串String行 
        'MSComm1.Settings = BaudRate & ",n,8,1" 
        MSComm1.InputLen = 0                        '设置或返回,从接收缓冲区读取的字符数,0时(默认),读取缓冲区全部字符 
        MSComm1.RThreshold = 1                      '接收区的“门阀值”,0时(默认),不产生OnComm事件;1时,接收缓冲区每接收到一个字符,都会产生OnComm事件 
        MSComm1.SThreshold = 1                      '发送区的“门阀值”,0时(默认),不产生OnComm事件;1时,发送缓冲区每接收到一个字符,都会产生OnComm事件 
        MSComm1.InBufferCount = 0 
        MSComm1.InputMode = comInputModeText        '以文本方式取回传入的数据,既comInputModeText = 0 
      MSComm1.PortOpen = True                    '打开串口 
      

  3.   

    会不会是另一台电脑上的 COM口设置的是COM2呢?
      

  4.   

    以下代码是自动搜寻可用COM口且打开:
    Option Explicit
        Dim a As Integer
        Dim openFlag As BooleanPrivate Sub cmdOpen_Click() '打开关闭端口
        If openFlag Then
            cmdOpen.Caption = "打开串口"
            MSComm1.PortOpen = False '打开端口
            Shape1.FillColor = vbRed
            Label1 = "COM" & a & "关闭"
        Else
            OpenPortNum
            cmdOpen.Caption = "关闭串口"
            Shape1.FillColor = vbGreen
            Label1 = "COM" & a & "打开"
        End If
        openFlag = Not openFlag
    End SubPrivate Sub OpenPortNum()
        On Error GoTo uerror
        For a = 1 To 16
            MSComm1.CommPort = a
            MSComm1.PortOpen = True
            If MSComm1.PortOpen = True Then
                'Print "可用Com号= "; a
                Exit Sub
            Else
            End If
        Next
        Exit Sub
    uerror:
        'Print "出错或占用Com号= "; a
        Resume Next
    End SubPrivate Sub Form_Load()
        MSComm1.Settings = "9600,n,8,1"
        MSComm1.InputMode = comInputModeBinary      '采用二进制传输
        MSComm1.InBufferCount = 0   '清空接受缓冲区
        MSComm1.OutBufferCount = 0  '清空传输缓冲区
        MSComm1.RThreshold = 1      '产生MSComm事件
        MSComm1.InBufferSize = 1024
        Call cmdOpen_Click
    End Sub
      

  5.   

    要怎么添加” MCSComm控件 “啊 ?
      

  6.   

    添加MSCOMM控件方法:
    在VB菜单 "工程"->"部件"中,选择 Microsoft Comm Control 6.0 即可。
      

  7.   

    LZ:
    在BAIDU的问帖http://zhidao.baidu.com/question/62765401.html
    你已经说找到原因了:
    COM口硬件没坏,是COM口的外设上出的问题.谢谢!
    建议结贴了,不要冷落CSDN论坛的众多热心人.
      

  8.   

    楼主为什么要把MSComm的设置放在Timer 里面啊Private Sub Timer1_Timer() 
    Timer1.Interval = 0 
    MSComm1.InputLen = 1 
    MSComm1.OutBufferCount = 0 
    MSComm1.InBufferCount = 0 
    If MSComm1.PortOpen = False Then 
    MSComm1.PortOpen = True 
    End If 
    End Sub 据我了解timer控件的中断太厉害了!