上位机程序高频率数据采集

1、用一个列表存放所有设备采集到的数据,设备采集到的每一个参数,都更新到列表固定的位置上;

例如:转速,在列表里固定一个位置存放转速,只要上位机收到一次转速,这个列表的转速就更新一次。

2、这里把上面的列表看作一个对象,定时复制这个对象至缓存中。只要定时器精度够高,做到保存每一毫秒时刻的数据都行,前提是设备的数据采集频率能达到,不然保存的数据会出现重复的!(这里的复制对象也不一定是使用复制怎么快怎么来);

3、在复制后判断缓存中的对象数量达到到100时(这里可以是任意数量但需要关注程序的处理速度),将缓存中的对象全部传入“线程1”,并清理当前缓存;在“线程1”里将数据批量保存。

高精度定时器制作思路

此定时器使用计算机系统接口完成,windows系统调用winmm.dll的

timeBeginPeriod(int para):

用于设置系统时钟的最小时间间隔。它的原理是通过改变系统时钟的分辨率来实现。在默认情况下,Windows 系统的时钟分辨率为15.6毫秒。而调用timeBeginPeriod 函数后,可以将时钟分辨率设置为更小的值,最小可以达到1 毫秒。参数para是要设置的毫秒数;

timeEndPeriod(1):

用于清除以前设置的系统时钟的最小时间间隔。参数para是上次调用timeBeginPeriod函数时设置的毫秒数;

timeGetTime():

获取windows启动以来经过的时间,单位是毫秒;请注意, timeGetTime 函数返回的值是 DWORD 值。 返回值每隔 2^32 毫秒变为0,大约为 49.71 天。 这可能会导致在计算中直接使用 timeGetTime 返回值的代码出现问题,尤其是在值用于控制代码执行的情况下。 在计算中应始终使用两 个 timeGetTime 返回值之间的差异。

高精度定时器实现方法:

创建变量:int a = timeGetTime();int b = timeGetTime()+定时器精度;bool c 定时器开关;

创建线程、设置线程优先级为最高,线程里使用while循环,用c作为循环条件;

在while里再嵌套一层while,用a<b作为条件;

在内层的while里通过timeGetTime()获取a的值;

当内层while执行完后,先更改b的值为【timeGetTime()+定时器精度】,再执行程序的定时任务;

在调用定时器时通过c来控制定时器开闭;

注:意在启动定时器前应当先给a和b赋值,确保首次任务正确执行;

注:定时器的精度会受到所执行代码的影响,所以定时执行的任务越简单速度越快,精度就越高!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值