Foxtable(狐表)用户栏目专家坐堂 → 关闭串口报错


  共有3395人关注过本帖树形打印复制链接

主题:关闭串口报错

帅哥哟,离线,有人找我吗?
873773115
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
关闭串口报错  发帖心情 Post By:2021/4/23 10:16:00 [显示全部帖子]

老师好。现在有个问题请教一下

现在如果在窗体的 afterclose 事件里 使用代码关闭串口,会直接导致系统假死
如果不关闭串口,直接关闭系统,会在系统关闭后,出现 《通用技术平台已停用》

如果在beforecloseproject 事件里 使用代码关闭串口,也会直接导致系统假死

代码如下:
If ports.Contains("COM1") = True AndAlso Ports("COM1").IsOpen Then
    Ports("COM1").Close()
End If

请问老师,如何解决呢?

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 14:31:00 [显示全部帖子]

放在窗口按钮里不行,但不是每次都会假死,可能3次会出现一次假死

e.Form.TimerEnabled = False
If ports.Contains("COM1") = True AndAlso Ports("COM1").IsOpen Then
    Ports("COM1").Close()
End If

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 15:18:00 [显示全部帖子]

不是,直接就假死了,等几分钟后任然是假死状态。只能结束进程
这里有个帖子说的问题 和我遇到的是一样的,还提供了解决方法,但是没看懂,请老师帮忙看下

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&replyID=884352&ID=132444&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 16:54:00 [显示全部帖子]

不行,串口数据刷新放在窗口的  timertick事件中了,然后在里面加了 
Application.DoEvents

afterload 事件中设置了打开  timertick 开关
直接窗口没打开就假死了



 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 17:02:00 [显示全部帖子]

老师补充一下,如果电脑没插上与地磅相连的数据线时候,随便怎么操作,啥事儿都没有

只有在线正常连接的时候,数据也正常传输的时候,使用串口关闭时,会出现这种情况

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 18:38:00 [显示全部帖子]

测试了。也不行,也是直接假死     只要线路正常连接,有数据过来的话   
使用 Ports("COM1").close()  这个方法关闭串口,就会假死  

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/23 18:47:00 [显示全部帖子]

老师,我这个是不是跟下面这个帖子是一个问题呢?当初没给出解决方案

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&replyID=847396&ID=126391&skin=1

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/24 10:00:00 [显示全部帖子]

老师,我在DataReceived事件这样写

if vars("do") = false
return
end if

在窗口设置按钮
e.Form.TimerEnabled = False
Vars("do") = False

这样子设置,在关闭系统的时候,任然会假死     有什么方法能设置串口数据停止接收,或者关掉它   还是我的思路错了


 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/24 11:48:00 [显示全部帖子]

没找到相关的开发文档,查了使用说明之类的,只有一些获取不同数据命令,没有能停止发送数据的命令

然后命令窗口里 关闭串口,或者不关闭串口,直接关闭窗口使 vars("do") = false 也是系统直接假死

现在出现的结果就是两种

①。无论是DataReceived事件中写终止代码,还是任意形式用代码关闭串口,都会导致窗体直接假死

②。不关闭串口,也不在DataReceived事件中写代码,直接关闭系统  系统能关掉,也不会出现假死,但是一关掉就出现    <通用技术平台已停用>

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/24 14:01:00 [显示全部帖子]

除了之前测试终止代码,现在DataReceived事件没写代码



实现代码如下  窗口afterload事件
Try
    If ports.Contains("COM1") Then
        Ports("COM1").Close()
        Ports.Clear
    End If
    Ports.Add("COM1")
    Ports("COM1").Open()
    e.Form.TimerEnabled = False
    e.Form.TimerInterval = 500
    e.Form.TimerEnabled = True
Catch ex As Exception
    MessageBox.Show("COM1已经被其它程序占用,无法打开!","提示",MessageBoxButtons.OK)
End Try

窗口 timertick事件

Dim s As String
Dim sr1 = ProjectPath & "\images\" & "redp.png"
Dim sr2 = ProjectPath & "\images\" & "greenp.png"

Dim cos As List(of String) = Ports.PortNames
If cos.Contains("COM1") = False Or Ports.Contains("COM1") = False Or Ports("COM1").IsOpen = False Then
    e.Form.Controls("picturebox1").ImageFile = sr1
    e.Form.Controls("picturebox2").ImageFile = sr1
    Return
End If

s = Ports("COM1").ReadExisting()

With e.Form.Controls("picturebox2")
    Dim sr As String = .ImageFile
    If s > "" AndAlso sr = sr2 Then
    ElseIf s > "" AndAlso sr = sr1 Then
        .ImageFile = sr2
    ElseIf s > "" AndAlso sr = "" Then
        .ImageFile = sr2
    Else
        If sr = "" Then
            .ImageFile = sr1
        Else
            .ImageFile = ""
        End If
        e.Form.Controls("picturebox1").ImageFile = sr1
        Return
    End If
End With


If s.Length > 8 Then
    s = s.SubString(s.IndexOf("=")+1,7)
    Dim chars() As Char = s.ToCharArray()
    Array.Reverse(chars)
    s = String.Join("",chars)
    e.Form.Controls("ybzl").Text = CInt(s)
Else
    Return
End If

Static i As Integer
Static zls As new List(of Integer)

If zls.Count < 5 Then
    zls.Insert(i,CInt(s))
    i = i + 1
End If

If zls.Count = 5 Then
    zls.Sort
    Dim cy As Integer
    cy = Math.Abs(zls(4) - zls(0))
    With e.Form.Controls("picturebox1")
        Dim sr As String = .ImageFile
        If cy <= 10 Then
            If .ImageFile = sr1 OrElse .ImageFile = "" Then
                .ImageFile = sr2
            End If
        Else
            If sr = "" Then
                .ImageFile = sr1
            Else
                .ImageFile = ""
            End If
        End If
    End With
    i = 0
    zls.Clear
End If




 回到顶部
总数 14 1 2 下一页