请各位大侠来讨论一下这个项目的程序结构如何设计,VB控制4个串口的问题!谢谢

ziszf 2008-11-10 10:57:53
小弟手头有一项目(急),本人想用VB来做(本人纯属VB菜鸟级),下面列出项目需求,请教各位大侠了!!
需求:1、要求程序控制4个串口(已有扩展串口的设备)与4台采集装置通信取得数据;要求每5秒(一定从系统时钟的0秒开始,到5秒一次,10秒一次,类推。。)通信一次(4个串口同时),取得返回的数据要进行处理来刷新图形的状态,而且要入数据库作历史记录,并且需要将取得的数据通知局域网内的其他联网机去刷新图形状态(工作站)。
2、现在的问题是这个项目不像一般的监控系统程序,它要求这个每5秒的通信一定要尽量同时,这样取回的4个数据进行处理才最准确,而且一定不能漏掉一次通讯,它长期24小时运行,如果有遗漏(甚至一次也不可以)会直接造成经济损失。也就是说它的可靠性实时性要求很高。(这个本来就是与windows操作系统相矛盾的,要是在嵌入式系统或其他工控操作系统就好办多了,呵呵)
3、我用过TIMER控件作测试,一个是误差较大,另外好像有时因其他事务的处理较多时,timer的事件好像不发生了,造成漏通讯。往往测试几个小时还可以,当长时间就会漏。郁闷!我现在的想法是这样:创建一个activex exe进程专门负责通讯这一块,当取得数据的事件发生后主程序负责响应并进行处理。但现在的问题是我如果把时间中断判断这一块与串口操作一起放进了activex exe进程里的话,系统有事处理不过来时该漏还是会漏吧,真头痛!我又想过,要么就直接开辟一个进程专门作时间中断,每5秒一次事件,分钟到也中断,反正我想要的时间点都可以中断,这样会不会好一点,但没做过,没底?听说有多媒体定时器这个东西,不知大家有无已经调试通过的VB60代码,不知各位大侠可否指点一二
4、这4个串口,我到底是用一个进程,多个类实例来进行操作好呢?还是开四个进程分别对应各个串口好呢?或者就一个进程,也不追求太同时了,就按顺序一个一个发数据吧,反正串口发数据也很快。
唉,到底该怎样来组织这个程序结构呢?
...全文
190 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ziszf 2008-11-21
  • 打赏
  • 举报
回复
非常感谢各位大侠的关注,我现在问题已基本解决,还是采用另开一个ACTIVEX EXE的做法,改进程只作时间点判断,然后raiseevent,我在主程序里event到了就读串口放进数组,然后按其他事件event取数、进行运算、入库、刷图。测试了一天,基本可以接受,现在主要精力放在工作站端与服务器端通讯的编写,先结此帖,有问题再问!!谢谢各位!!
zdingyun 2008-11-16
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zdingyun 的回复:]
LZ:
应用程序需注意容错和容差性.即使是多线程程序,每个线程不会同时进行,仅是电脑速度快而我们感觉不到差异.
每个串口5秒时间内按9600波特率核算可传松4800个字节的数据流.这些字节相当于每秒有240个单精度数获得传送(理论)
如果每次数据量不大,可缩短下位机返回数据的周期.例如每秒1次,相当于每秒有240个单精度数获得传送(理论).
接收通过MSCOMM控件的ONCOMM事件来完成,并将接收的数据经电脑配置都相当高的电脑进行高速…
[/Quote]
下位机作为主动方,按确定时间间隔返回数据.
zdingyun 2008-11-16
  • 打赏
  • 举报
回复
LZ:
应用程序需注意容错和容差性.即使是多线程程序,每个线程不会同时进行,仅是电脑速度快而我们感觉不到差异.
每个串口5秒时间内按9600波特率核算可传松4800个字节的数据流.这些字节相当于每秒有240个单精度数获得传送(理论)
如果每次数据量不大,可缩短下位机返回数据的周期.例如每秒1次,相当于每秒有240个单精度数获得传送(理论).
接收通过MSCOMM控件的ONCOMM事件来完成,并将接收的数据经电脑配置都相当高的电脑进行高速处理数据,将处理结果赋值给全局变量或数据储存.
Timer计时器可以提供程序所需的时间信息,通过Timer事件可以有规律地按确定的时间间隔执行其它任务.
Option Explicit
Dim sum As Integer
Dim sum1 As Integer
Private Sub Form_Load()
Timer1.Interval = 500
End Sub

Private Sub Timer1_Timer()
If Label1.Caption <> CStr(Time) Then
Label1.Caption = Time$
sum = sum + 1
Label2 = sum
If sum >= 5 Then 'sum >= 5及以下sum1 >= 12的写法可确保按间隔需执行的代码不会遗漏,仅时间可能有偏差
'处理每5秒需执行的事的代码
sum = sum - 5
sum1 = sum1 + 1
Label3 = sum1 * 5
If sum1 >= 12 Then
sum1 = sum1 - 12
'处理每60秒需执行的事的代码
End If
End If
End If
End Sub
msdtx 2008-11-15
  • 打赏
  • 举报
回复
同意 alan001 ! 先弄清速度、采集方式。timer为底优先级消息,只要系统忙,一定会丢事件。
ziszf 2008-11-15
  • 打赏
  • 举报
回复
谢谢6742兄、VBVCDE兄提供的思路,我现在又有一个这样的问题:
在我的timer activex exe进程里,每分钟开始的00秒,会同时发生“5秒到”以及“分钟到”两个事件EVENT,那么在我主进程里写这两个事件的响应时就有一个问题,因为我5秒到的时候要进行一次数据采集,分钟到的时候要对上一分钟采集的12次数据进行平均运算,我采到的这12次数据是放在一个数组里,说白了我就是怕冲突,因为这时候“5秒到”采到数据了会去写数组,分钟到又会去读数组,如果“5秒到”写了一半了,这时“分钟到”刚好去读,那我读到的数进行处理就不准确了,这个问题怎么解决好呢?
t69490741 2008-11-14
  • 打赏
  • 举报
回复
VB好像是无法显示多线程的吧,我现在做的串口通信用vb来做就是采用轮训的方式,而且五秒钟轮训一次应该够了。
6742 2008-11-14
  • 打赏
  • 举报
回复
我想可以在activex中加入一个属性,主程序在结束前将该属性更改一下,

activex判断该属性已经更改了,就关闭timer
nvip 2008-11-14
  • 打赏
  • 举报
回复
这样,你把
设timer1间隔为1秒负责采样
设timer2间隔为500ms查询系统时钟判断五秒存数显示
每到10分钟统计采样此时是否够,不够就补充几个算是差值(糊弄人)

定时器间隔可以改
ziszf 2008-11-13
  • 打赏
  • 举报
回复
谢谢各位的关注!我等了两天还以为没人回帖了呢!我现在先作这样的尝试:其实我想来想去,我其实最大的要求就是要求每次时间的中断要准时、而且这个中断一定要发生不能漏,我这个项目要用到的时间点是每5秒、每分钟要作数据平均、入库;每小时的0、15、30、45分要做汇总,每个月头要重新设定报警值,对时间判断很多很烦、而且一次也不能漏。所以我现在尝试用activex exe开了一个进程,里面的类只作一件事,就是用timer判断我要的时间点,然后raiseevent,在主进程里我的程序就很好写了,只要去响应这些事件就完了。再等两天等我全面开始测试后再把测试结果贴上来。
以前从没写过activex exe,要注意些什么?还希望各位前辈不吝指教!
我现在有各问题就是怎样在主进程结束的时候的同时结束掉我的那个timer进程,我现在还不得不用windows任务管理器来结束,郁闷,请教各位了!谢谢!
xrongzhen 2008-11-13
  • 打赏
  • 举报
回复
学习
alan001 2008-11-13
  • 打赏
  • 举报
回复
UP

不知道数据发送速率如何?
红叶哥 2008-11-13
  • 打赏
  • 举报
回复

就用一個進程得了,除非你用的是4核,否則不可能做到完全同步發送.
一個一個串口的發送,時間相差非常小,可以不計.
你可以先發送完了,再一個一個從內存中讀取傳回來的數據.
timer控件是不準,有兩種做法:
1.每次執行時,與電腦時間從比對,修改interval屬性值,這樣誤差可減小
2.用do循環來做,在上次時間上加5秒,來做判斷
chongan_wang 2008-11-13
  • 打赏
  • 举报
回复
VB在入门阶段摸索中,呵呵,帮忙顶起~~~~
yeah920 2008-11-13
  • 打赏
  • 举报
回复
帮忙顶起来
Amy_Dream 2008-11-12
  • 打赏
  • 举报
回复
关注!!
xredhat 2008-11-12
  • 打赏
  • 举报
回复
关注此贴,学习。
xredhat 2008-11-12
  • 打赏
  • 举报
回复
呵呵,以前面试过一个单位,也问到这个问题。
他的要求更高,读取的数据还要做成曲线图,类似股票的那种曲线图,实时性的。监控点更多,用在水处理上面的。
zuoxingyu 2008-11-11
  • 打赏
  • 举报
回复
学习

用VB来做多进程,还真的一无所知,请高手指教

7,763

社区成员

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

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