串口通信---实现实时监测外部数据 在vb6.0下,怎样通过串口通信,实现实时监测外部数据,监测到数据有变化时,系统能够做出相应的处理,不过不能占用系统太多资源,在网上找了一下,发现用多线程能实现,可是,vb6.0不支持多线程编程,怎么办呢?有没有其他好的办法?请各位大侠帮帮忙!!另外,我想确切指到,vb6.0到底支不支持多线程编程,权威的解答!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VB6支持,但想要实现很好的支持很难。你的要求只要写OnComm事件就可以了。 用oncomm事件吧,把rtthreshold设成1,这样有数据来就会产生事件,然后在事件中接收数据并进行处理! 但是,我查了一下,oncomm事件,使用了MSComm控件。可是,在多线程里面,不支持控件使用的,怎么办呢?关键在于,在进行串口通信的同时,不能影响系统的正常使用,只有当接收到错误的数据时,才进行相应的处理?我对这方面了解不多,请多赐教! 哦,对了,使用oncomm事件,会不会占用很多系统的资源,让系统运行速度变慢呢?还是影响很小呢? oncomm应该比较节省系统资源啊,总比循环查询要好的多,windows就是基于事件的,所以用起来比较方便和高效的! 监控的同时,DoEvents 一下。 楼主,我劝你VB6下你最好不要考虑多线程,多半会适得其反的,我曾经也想用多线程实现多个串口的多线程串口通信,但程序很容易就崩溃了,查阅了很多资料,加之我水平不够,放弃了。如果你的程序是商用的,多线程请慎用,可以使用DoEvents来提高程序的响应。 这个问题刚开始我也是头疼我一个串口要实时接收六个仪表,一共二十几个参数值.而且仪表的通讯协议是被动方式的.即PC要发送指令仪表才返回数据.这样一来,要不断的发送指令,不断的接收及处理,还要不断的往数据库写入!!我是采用轮询方式的,用TIMER作个扫描周期,TIMER事件初关掉TIMER,执行扫描完再开,这样可以有效的压缩TIMER内部时间在读取函数中加入DoEvents,基本可以了.CPU占用率一直在57%左右.一般的操作不会卡死.测了一天也没问题但是偶尔在数据库操作的时候,比如查询历史数据,会卡死:(真也找不到好办法呀~~~听朋友说,用VB.NET可以采用多线程解决~~~可惜没玩到这个东西过.期待楼主的问题得到真正的解决! 我们的项目,用的是vb6.0环境开放的,如果要换成.net环境下,就要改动很大了,况且这个项目基本快结束了……时间也来不及……各位,我们大家一起都再研究研究……看看有没有什么其它好的解决办法……如果,确实不行的话,就用oncomm进行处理……毕竟这也是一种办法…… 如果你的仪表的实时性要求不是很高(个人认为3秒以内要将这20多个参数读取一遍,这样实时性要求就比较高了),你可以设置一个轮读变量,在Timer中使用Select Case 语句来依次读取每一个参数,每次读一个。比如,你的Timer的Interval是200ms,那么你读完我、所有的参数耗时大约是:200ms X 20=4000ms 也就是4秒,其实这个实时性已经很高了。我11个仪表,都是这样处理的。 1.采用多进程,几十个串口程序一起运行2。每个程序都采用查询式的3.接受缓冲区开20000字节剩下的什么时间片全部交给xp去处理。一个查询就可以让cpu90%,50个查询还是这个样子。自己试一下! DOS 的中断在XP里面还有吗? 要做个模块, 请问怎么做? vb加载图片 为什么VB的怎样将一个类模块编译为DLL 请问如何使用vb设置文件共享~~!在线侯ing 关于用VB获取到网站验证码图片和自动提交问题, 求助 请问有没有竖排显示记录的GRID控件呢? 急,关于复制文件的问题?100分。 高分求关于水晶报表的使用文档!!!!!!!!!!!!!!!急!!! 求高手帮忙改段程序,急急急! 远程邮局的连接端口是什么? VB如何将Toolbar1的按钮用线进行区分开? 就像OFFICE 一样? 几个按钮用淡颜色的影线区分?? 关于兴趣与专业
我一个串口要实时接收六个仪表,一共二十几个参数值.而且仪表的通讯协议是被动方式的.即PC要发送指令仪表才返回数据.这样一来,要不断的发送指令,不断的接收及处理,还要不断的往数据库写入!!我是采用轮询方式的,用TIMER作个扫描周期,TIMER事件初关掉TIMER,执行扫描完再开,这样可以有效的压缩TIMER内部时间在读取函数中加入DoEvents,基本可以了.CPU占用率一直在57%左右.一般的操作不会卡死.测了一天也没问题但是偶尔在数据库操作的时候,比如查询历史数据,会卡死:(
真也找不到好办法呀~~~听朋友说,用VB.NET可以采用多线程解决~~~可惜没玩到这个东西过.
期待楼主的问题得到真正的解决!
各位,我们大家一起都再研究研究……看看有没有什么其它好的解决办法……
如果,确实不行的话,就用oncomm进行处理……
毕竟这也是一种办法……
2。每个程序都采用查询式的
3.接受缓冲区开20000字节
剩下的什么时间片全部交给xp去处理。一个查询就可以让cpu90%,50个查询还是这个样子。自己试一下!