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


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

主题:关闭串口报错

帅哥哟,离线,有人找我吗?
873773115
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/24 8:57:00 [只看该作者]

解决方法就是
1、不要关闭串口
2、使用变量控制DataReceived事件是否接收内容,比如

DataReceived事件
if vars("do") = true
接收数据
end if

窗口 afterclose 事件
vars("do") = false

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/24 10:09:00 [只看该作者]

直接到命令窗口测试开启和关闭窗口有没有问题?

检查串口设备的开发文档,看看是不是需要先发送什么数据让硬件停止发送数据,再关闭串口

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


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

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

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

现在出现的结果就是两种

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

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

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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/24 12:09:00 [只看该作者]

DataReceived事件完整代码发上来看看

 回到顶部
帅哥哟,离线,有人找我吗?
873773115
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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




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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/24 14:29:00 [只看该作者]

1、试试去掉给图片框赋值的代码,看看是不是图片框的问题
2、不要开启窗口计时器,测试有没有问题?
3、关闭串口这样试试
e.Form.TimerEnabled = False
Application.DoEvents
system.threading.thread.sleep(1000)
If ports.Contains("COM1") = True AndAlso Ports("COM1").IsOpen Then
    try
Ports("COM1").Close()
Catch ex As Exception
    MessageBox.Show(ex.message)
End try
End If

另外确定COM1这个串口是存在的?

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


加好友 发短信
等级:童狐 帖子:292 积分:2728 威望:0 精华:0 注册:2017/11/5 13:39:00
  发帖心情 Post By:2021/4/24 15:36:00 [只看该作者]

1.去掉图片框的代码后,没有变化,错误还是一样的
2.已测试直接将 获取数值代码写在 DataReceived事件  中,  出现的问题是一样的    不关闭串口,关闭系统的时候报错《通用技术平台已停用》,
如果关闭系统之前关闭串口,系统假死
3.已尝试使用蓝老师的关闭串口代码,也是窗体假死

串口连接是正常的,串口也存在。用串门测试工具打开,数据传输都是正常的,串口为COM1

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


加好友 发短信
等级:超级版主 帖子:107669 积分:547660 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/4/24 16:03:00 [只看该作者]

用串门测试工具打开和关闭串口都没有问题?

新建一个项目测试有没有问题?

不写任何接收数据的代码,也就是窗口计时器和DataReceived事件都不写任何代码,直接打开串口,然后等待几分钟关闭串口有没有问题?

 回到顶部
总数 23 上一页 1 2 3 下一页