新人,写了个小程序有点小问题,能不能麻烦帮忙看看

黄昏鹿场 2019-05-10 02:07:14
想要实现按一次按钮,采集一个数。思路是按下按钮,打开串口,采集数据,关闭串口。实际操作中,会随机某次按下采集按键,没有数据显示出来。再次按下按钮,程序提示串口已打开。就是不知道为啥会随机某次程序运行最后串口没有关闭,以下是相关代码。波特率啥的都设置好了


Private Sub Command1_Click()
On Error GoTo ErrDeal
MSComm1.PortOpen = True
Timer1.Enabled = True
ErrDeal:
If Err.Number = 8002 Then
MsgBox "串口不存在!", vbOKOnly Or vbInformation, "提示"
ElseIf Err.Number = 8005 Then
MsgBox "串口已打开!", vbOKOnly Or vbInformation, "提示"
End If
End Sub


Private Sub Timer1_Timer()
If MSComm1.InBufferCount = 10 Then
Text1.Text = Text1.Text & MSComm1.Input & vbTab & Format$(Now, "c") & vbCrLf
MSComm1.PortOpen = False
End If
End Sub



...全文
372 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2019-05-13
  • 打赏
  • 举报
回复
引用 3 楼 黄昏鹿场 的回复:
[quote=引用 1 楼 脆皮大雪糕 的回复:]
看你的机制是串口始终保持连接,然后上位机程序定时去取数据。

串口通讯如果没有同步时钟信号的话不宜长时间连接。

我完成一次事件就会关闭串口,现在问题就是会在随机某次程序运行最后串口没有关闭,导致程序出错,我不知道是不是语言逻辑问题[/quote]

你这肯定存在“逻辑问题”啊。
点按钮之后,在 Timer事件中要“接收到足够数据”后才会认为“完成”,关闭串口。
问题就在于:你点了按钮之后,也许过了一定时间还没收到“足够”的数据,
(甚至因“其它因素”造成串口回复一次你还没接收到10个字节、而“串口”又不再发数据)
 这时串口还没有关闭、你可能又去点按钮了……
 此时必然会引发“串口已经打开”的那个错误。

你可以试试:
在你的代码第3、4行那儿,插入一句: Command1.enabled =false

在17行那儿插入一句: Command1.enabled = true

当然,有可能出现我刚才说的那种上“意外”之后,你再也没法点 Command1 了。
(真是这样,也只需要在“超时”后强制关闭串口就行了)
黄昏鹿场 2019-05-13
  • 打赏
  • 举报
回复
引用 1 楼 脆皮大雪糕 的回复:
看你的机制是串口始终保持连接,然后上位机程序定时去取数据。

串口通讯如果没有同步时钟信号的话不宜长时间连接。

我完成一次事件就会关闭串口,现在问题就是会在随机某次程序运行最后串口没有关闭,导致程序出错,我不知道是不是语言逻辑问题
笨狗先飞 2019-05-10
  • 打赏
  • 举报
回复
你打开串口,读取数据和关闭串口都放在一个函数里来,别分散,不然就不好控制了。 整个过程没多少时间的,感觉不到什么时差的。
脆皮大雪糕 2019-05-10
  • 打赏
  • 举报
回复
看你的机制是串口始终保持连接,然后上位机程序定时去取数据。 串口通讯如果没有同步时钟信号的话不宜长时间连接。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧