ccbbcc 2024-08-13 14:43 采纳率: 91.6%
浏览 19
已结题

VB6如何检测串口拔下

我想实现如下功能,串口正常通信时显示通信正常,串口拔下时显示通信故障,再插上显示通信正常。
我的代码如下:

Private Sub Timer1_Timer()
Dim i As Long
    If commfaultflag = True Then
        commfaultflag = flase
    
        If SendFlag = 1 Then
        i = Combo1.ListIndex
    
    
    MSComm1.CommPort = i + 1
    MSComm1.Settings = "9600,N,8,1"
MSComm1.RThreshold = 43

MSComm1.InputMode = comInputModeBinary

MSComm1.InputLen = 0
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Timer1.Enabled = True
        
       
        MSComm1.Output = send
       
       End If
    Else
        If SendFlag = 1 Then
        
            If Err.Number = 8021 Then

                Label41.ForeColor = vbRed
                  Label41.Caption = "通讯故障"
                MSComm1.PortOpen = False
                commfaultflag = True
            Else
                On Error GoTo testerr1
                MSComm1.Output = send
                Exit Sub
testerr1:
                Label41.ForeColor = vbRed
                  Label41.Caption = "通讯故障"
                MSComm1.PortOpen = False
                commfaultflag = True
            End If
        
       End If
    End If


End Sub

可是执行MSComm1.PortOpen = True这句时,报错

img


请问如何解决?谢谢

  • 写回答

2条回答 默认 最新

  • 浪客 2024-08-14 10:28
    关注

    供参考

    Dim send(7) As Byte
    Dim comnum As Integer
    
    Private Sub Form_Load()
        send(0) = &H1
        send(1) = &H3
        send(2) = &H0
        send(3) = &H0
        send(4) = &H0
        send(5) = &H50
        send(6) = &H45
        send(7) = &HF6
        comnum = 1
    End Sub
    
    Private Sub Command1_Click()
        Timer1.Enabled = Not Timer1.Enabled
    
        Text1.Text = Text1.Text + IIf(Timer1.Enabled, "开始发送", "结束发送") + vbCrLf
    End Sub
    
    Private Sub Text2_Change()
        Text2.SelStart = Len(Text2.Text)
    End Sub
    
    Private Sub Timer1_Timer()
        If Not MSComm1.PortOpen Then OpenCOM comnum
        
        On Error GoTo ERR2
        If MSComm1.PortOpen Then
            MSComm1.Output = send
            Text1.Text = Text1.Text + Format(Now, "yyyy-MM-dd HH:mm:ss << ") + byteToStr(send) + vbCrLf
            Text2.Text = Text2.Text + Format(Now, "yyyy-MM-dd HH:mm:ss >> ") + vbCrLf + byteToStr(MSComm1.Input) + vbCrLf
            setStatu "通讯正常", vbGreen
        Else
            setStatu "串口未打开", vbYellow
            Text2.Text = Text2.Text + "串口未打开" + vbCrLf
        End If
        
        Exit Sub
    ERR2:
        setStatu "通讯故障:" + vbCrLf + Err.Description, vbRed
        MSComm1.PortOpen = False
    End Sub
    
    Private Function OpenCOM(com As Integer) As Boolean
    On Error GoTo Err1
        MSComm1.CommPort = com
        MSComm1.Settings = "9600,N,8,1"
        MSComm1.RThreshold = 43
        MSComm1.InputMode = comInputModeBinary
        MSComm1.InputLen = 0
        
        MSComm1.PortOpen = True
        OpenCOM = MSComm1.PortOpen
        Exit Function
    
    Err1:
    
    End Function
    
    Private Sub setStatu(msg As String, cor As Long)
        Label1.Caption = msg
        Label1.BackColor = cor
    End Sub
    
    Private Function byteToStr(bytes) As String
        byteToStr = ""
        For i = 0 To UBound(bytes)
            byteToStr = byteToStr + Right("0" + Hex(bytes(i)), 2) + " "
        Next i
    End Function
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月22日
  • 已采纳回答 8月14日
  • 创建了问题 8月13日