新手问题:文件操作的问题(150分)

B

bigkey

Unregistered / Unconfirmed
GUEST, unregistred user!

我在做一个工业控制通讯采集显示系统,通讯采集到的数据向一个数据文件(记录型的文件)写,这个文件只是记录当前值,而记录所有数据用(历史)数据库.
目的: 完成数据的显示和存入历史数据库,且通讯采集数据多少的灵活性要强.
A)
关于这个记录文件,我需要在其他FORM里设置定时器来读并且计算显示,有这样几个问题:
1. 文件的读写有没有什么限制,同时操作如何.一个文件可不可以打开多次.
2. 频繁的打开关闭,会不会较慢
B)
换一个思路也有问题:
不需要存实时数据到记录文件. 如果采集的同时计算显示,并且把计算值存入历史库(DBASEIV),会不会影响过分采集速度
各位打下,请多帮忙.特别是搞过工业控制数据库的大侠.
 
可以开一个Buffer,临时存放采集到的数据.
在主循环中,把采集到的数据放进Buffer,再由这个Buffer转存到数据库.
另外在定时器触发事件中读取并显示Buffer中的内容.
 
A)一个文件采用共享方式可以打开多次,但只有一个可写。
文件频繁打开关闭肯定很慢。我建议采用内存。
B)WINDOWS本身的实时性就不太好,如果数据采集的实时
性要求很高的话,其他操作可能会影响采集的实时性。
不过可以尽量改善,我建议采用多线程,用专门一个线程
进行数据采集以尽量提高实时性,不过多线程程序调试
比较麻烦,编程时要注意同步和互斥。
 
实时纪录可以这样吧:开几个不大不小的buffer,
在开一个进程buffer满再写入磁盘
我用这个方法边录音边处理,效果很好,基本没有丢失数据.
当然也要看你的数据采样率!
 
各位打下,能更具体些吗?拜托...分数不够,我可以加
 
使用Tmemorystream
 

1 要看你要完成的任务的实时性,如果在工业监测(不是控制)要求实时性不是很高,就直接计算、显示并且存数据历史文件就可以了,不会影响采集的。注意到你的采集,如果是串行通讯,那么计算机基本可以满足的,没有必要非的用内存交换,而且即便通讯速率高些,通讯端口有自己的缓存。
数据处理部分可以单独进行, 根据现场的数据要求完成。
2 如果非要用MEMORY,因为内存的管理要复杂一些,最好用数据流,TMEMOSTREAM相对于自己操作内存要容易和安全的多。
3 最好不要用数据记录文件来交换数据。尤其是实施数据。
不知是否恰当,根据个人经验而言。请大侠们指正。
 
多人接受答案了。
 
顶部