您的位置:程序门 -> vb -> 基础类



数据采集仪和vb的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


数据采集仪和vb的问题[已结贴,结贴人:cnike]
发表于:2007-05-16 23:22:44 楼主
系统在1ms产生10个数据,软件从数据采集仪获得数据,但是vb定时器最小定时单位为1ms,不能设置0.1ms,那我该怎么获得数据呢?
发表于:2007-05-16 23:57:221楼 得分:5
用queryperformancefrequency   queryperformancecounter做关键字在搜索引擎上搜索
发表于:2007-05-17 06:44:152楼 得分:5
vb定时器1毫秒都达不到。数据采集仪应该有fifo采集功能,采集仪的速度可以达到200k甚至更高,这样1毫秒采集10个数据是很轻松的事。vb只不过是通过指令从采集仪中把数据取回而已。
发表于:2007-05-17 09:02:063楼 得分:10
数据采集仪器为了配合外设一般都有缓存区间的,用vb2秒,或者更长时间去取数据,如果要求很及时处理的话,我就不知道了,
发表于:2007-05-17 09:08:134楼 得分:20
如果真要及时处理,对vb单线程来说,只好用
  do   while   1


loop

  中间取延时代码参照下面
              option   explicit

            declare   function   queryperformancecounter   lib   "kernel32 "   _
                                                                  (x   as   currency)   as   boolean
            declare   function   queryperformancefrequency   lib   "kernel32 "   _
                                                                  (x   as   currency)   as   boolean
            declare   function   gettickcount   lib   "kernel32 "   ()   as   long
            declare   function   timegettime   lib   "winmm.dll "   ()   as   long

            sub   test_timers()
            dim   ctr1   as   currency,   ctr2   as   currency,   freq   as   currency
            dim   count1   as   long,   count2   as   long,   loops   as   long
            '
            '   time   queryperformancecounter
            '
                if   queryperformancecounter(ctr1)   then
                    queryperformancecounter   ctr2
                    debug.print   "start   value:   ";   format$(ctr1,   "0.0000 ")
                    debug.print   "end   value:   ";   format$(ctr2,   "0.0000 ")
                    queryperformancefrequency   freq
                    debug.print   "queryperformancecounter   minimum   resolution:   1/ "   &   _
                                            freq   *   10000;   "   sec "
                    debug.print   "api   overhead:   ";   (ctr2   -   ctr1)   /   freq;   "seconds "
                else
                    debug.print   "high-resolution   counter   not   supported. "
                end   if
            '
            '   time   gettickcount
            '
                debug.print
                loops   =   0
                count1   =   gettickcount()
                do
                    count2   =   gettickcount()
                    loops   =   loops   +   1
                loop   until   count1   <>   count2
                debug.print   "gettickcount   minimum   resolution:   ";   _
                                        (count2   -   count1);   "ms "
                debug.print   "took ";   loops;   "loops "
            '
            '   time   timegettime
            '
                debug.print
                loops   =   0
                count1   =   timegettime()
                do
                    count2   =   timegettime()
                    loops   =   loops   +   1
                loop   until   count1   <>   count2
                debug.print   "timegettime   minimum   resolution:   ";   _
                                        (count2   -   count1);   "ms "
                debug.print   "took ";   loops;   "loops "
            end   sub
发表于:2007-05-17 18:32:445楼 得分:10
如果有缓存区的话就一次取10个出来然后自己处理

如果没有的话   就参照zou_seafarer(颓废程序员^_^)   说的   用while不停的取吧。。记得在循环体里面加上doevents,不然你就动不了了。

感觉用多线程做这个事情比较好。   可惜,尝试过用api做vb的多线程,结果惨不忍睹。。。
发表于:2007-05-17 18:33:506楼 得分:0
另外,此种设备,应该对实际采集数据允许一定的误差范围的吧?   难道1秒10个要求连续运行24小时不能丢的?
发表于:2007-05-17 21:46:447楼 得分:0
我用的是usb接口的   不是串口啊     上面说的也可以吗?


快速检索

最新资讯
热门点击