本人现在通过PCI卡采集一些数据。本程序采集的数据量比较大 ,PCI卡的每个通道每秒大约产生约上万个数据,
而且采集的时间是持续不断,连续的采集。采集卡有32个通道。每个通道负责采集一种数据样本。这个程序可能一直几个月连续的采集!
本人想将采集的数据都保存,用文件保存到磁盘,怎么做。本人还想通过某个时间段去检索某个样本数据!
或许用其他的什么办法保存,数据库啊! 等等 ,大家说说看!
而且采集的时间是持续不断,连续的采集。采集卡有32个通道。每个通道负责采集一种数据样本。这个程序可能一直几个月连续的采集!
本人想将采集的数据都保存,用文件保存到磁盘,怎么做。本人还想通过某个时间段去检索某个样本数据!
或许用其他的什么办法保存,数据库啊! 等等 ,大家说说看!
解决方案 »
- VC2010中MFC的CString
- SHELL扩展里做的dialog,怎么样加上XP风格
- 灰常蛋疼的问题 HOOK DirectX 函数
- VC6工程文件,添加控件,映射变量后,再运行就运行不起来了。
- 请问哪里可以下载《MFC程序开发参考大全》电子版的书?
- Console application的程序,能否接收消息? 如果能,应该怎么写?
- 请问,这样的程序哪里出错了?
- 控件注册问题?高手来看看,特急!!!!!
- 如何反编译一个DLL文件?在没源代码的情况下我想看看别人写的DLL都有什么函数等等。
- 利用CreateFile函数对MOXA卡的各串口初始化
- 请教关于使用函数CreateProcessAsUser的问题
- vc2005 unicode下CString和string之间转换的问题
>> 那就直接写文件好了。另 你的数据量很大,如果插入数据库是来不及的 所以只有写文件
硬盘要足够大。
//无论如何都是写在硬盘上的。
//实时数据库的性能应该可以满足插入的要求。
//定时将实时数据库内容写入到Oracle中。
数据量大倒是谈不上,因为无论你怎么说,你的PCI总线速度在那摆着呢!我做运动控制软件的,对此多少有一些了解
详细的算一下一个通道1ms采集10个数据,呵呵这对任何系统平台的系统来说太easy了,我做过1ms需要处理上万个数据采集的程序(wince),而且有一部分还是模拟量
所以楼主不用过分担心采集速度的问题
===============================================
个人认为你应当考虑的是扩展方面的事情,因为板卡是可以扩展的,如果64个通道,128个通道你的程序是否还能受的了
通常情况下无论是客户还是team leader都不会允许通过降低采样频率来保证存储数据的完整性
所以大部分时候采用的方法都是放在如何提高存储效率上
我的做法都是用内存映射文件 开辟一个固定大小的缓冲区(例如2M根据具体应用情况来定)满了再写进硬盘,当然如果系统掉电你的数据肯定会丢的,呵呵我们给自己的系统配了一个数据掉电保持模块,就没有这个问题了,不知道你们的项目经理能否允许。
这个原理就是实时库的原理,楼主可以查一下实时库方面的知识。
如果你是做嵌入式系统地话,你这个速度真不算什么,楼主不要被吓倒
由于是服务进程且独立于采集程序,如果你把扫描周期设置的大一点,一般情况下不会影响你的采集程序的速度
我做过电力系统配变监测软件,后台的数据采集的原理就是这么设计的,不好的地方是在xp类下的系统可以,在wince下用这个方法不划算,可以把文件通过远程上传到服务器上由服务器来做这件事情,这样效果会比较好,因为嵌入式系统的资源比较宝贵呵呵