ccbbcc 2024-08-12 12:59 采纳率: 92.4%
浏览 3
已结题

如何让程序从通讯故障中恢复

我想实现VB6通讯故障后,比如拔下串口线,显示通讯故障
然后我插上串口线,通讯恢复正常。
现在问题是插上串口线,并不显示通讯正常
部分代码

Select Case MSComm1.CommEvent
    Case comEvReceive
        sj = MSComm1.InBufferCount
        If SendFlag = 1 Then
        rev = MSComm1.Input
        Form2.Timer2.Enabled = False
        Form4.Timer2.Enabled = False
        Timer1.Enabled = flase
        Timer2.Enabled = True
        End If
        If SendFlag = 2 Then
        rev2 = MSComm1.Input
        Timer1.Enabled = False
        Timer2.Enabled = False
        Form4.Timer2.Enabled = False
        Form2.Timer2.Enabled = True
        End If
        If SendFlag = 3 Then
        rev4 = MSComm1.Input
        Timer1.Enabled = False
        Timer2.Enabled = False
        Form2.Timer2.Enabled = False
        Form4.Timer2.Enabled = True
        End If
'strbuf(0) = rev(0)
'rev1 = rev
rev_ok = 1
Label41.ForeColor = vbBlue
Label41.Caption = "通讯正常"
commfaultflag = False
End Select
End Sub

Private Sub Timer1_Timer()
On Error GoTo errHandler:
If SendFlag = 1 Then
'Sleep 500
MSComm1.Output = send
Timer1.Enabled = False
'Timer2.Enabled = True
End If
Exit Sub
errHandler:
    Label41.ForeColor = red
    Label41.Caption = "通讯故障"
    Timer1.Enabled = True
End Sub

请指教,谢谢

  • 写回答

1条回答 默认 最新

  • 关注

    下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    你的问题似乎是在VB6中使用Microsoft Communication Library (MSComm)进行通信时遇到的错误,而这个库不能正确处理错误情况,导致程序无法正确检测到传输是否正常。

    以下是修复这个问题的一些可能方法:

    1. 在SendFlag为1时,检查返回值。如果返回值不是0,则说明通讯是正常的。如果是0,可以将MSComm1复位,然后重新发送数据以确认通讯状态。
    If SendFlag = 1 And rev = 0 Then
        Exit Sub
    End If
    
    1. 如果你的应用程序被错误中断,那么它可能无法在等待定时器或事件处理器时继续运行。你可以尝试改变程序的设计,例如使用多线程或多进程来处理异步操作,或者在某些情况下更早地关闭应用程序以释放系统资源。
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Dim errHandler As Integer
        If SendFlag = 1 And rev = 0 Then
            Exit Sub
        End If
        errHandler = RaiseError '或 Try...Catch
        If errHandler <> 0 Then
            Label41 saverColor = Label41.Color
            Label41我省略掉的文字颜色
            Label41Scarlet.Text = errHandler.ToString
            Return
        End If
        If SendFlag = 2 Or SendFlag = 3 Then
            SendRev Rev2, rev
            Form2Timer.Enabled = False
            Form4Timer.Enabled = False
            Timer1.Enabled = False
            Timer2.Enabled = False
            Form4.Timer2.Enabled = True
            Exit Sub
        End If
    End Sub
    

    这只是一个基本的例子,实际的修复可能会更复杂。你可以根据自己的需求和实际情况调整这些代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月27日
  • 已采纳回答 8月19日
  • 创建了问题 8月12日

悬赏问题

  • ¥15 C# wpf 软年 卸载有残留 webview2
  • ¥15 求代写matlab解决柔性调度代码,价格私
  • ¥15 为什么安装Anaconda时报系统找不到指定文件?
  • ¥15 如何将这个项目的ssh-TCP,改成ssh3-UDP协议
  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋