传感器采集到到的数据实时保存到本地磁盘中

yirenju6028 2016-12-25 11:38:15
最近想写个软件(c#),把传感器采集到到的数据实时保存到本地磁盘中(以二进制文件,格式:时刻+电压值+电流值),然后可以导出Excel。如果上个文件满了,后缀自动加一。现在遇到问题,如何实时保存?各位能提点建议或者给个例子么?多谢!
...全文
1243 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
haoziran 2017-11-13
  • 打赏
  • 举报
回复
目前正在做这样的项目,不太会,能请教一下吗?
yirenju6028 2016-12-28
  • 打赏
  • 举报
回复
引用 19楼失足成万古风流人物 的回复:
用log4net得了,不用先保存到list里
最后解析数据,提取数据的时候就烦恼了。
yirenju6028 2016-12-28
  • 打赏
  • 举报
回复
引用 20楼小海贼 的回复:
[quote=引用 16 楼 yirenju6028 的回复:] [quote=引用 11楼wanghui0380 的回复:]一步一步做呗 1.你自己把采集部分写出来 2.把采集的数据 丢进 可限流线程安全队列 3.订阅队列,写入excel,当然何谓excel满我是不知道滴,你可以自己通过异常或者自己的计数来判定。 当然俺们不会帮你写代码,只会告诉你基本思路。 采集有可能涉及多路采集和多厂家设备集成,这个如果是写项目需要注意防范 采集有可能需要限流,避免数据堆积,这个需要防范。如果项目小可以自己丢到可限流线程安全队列处理,如果数据比较大,先丢到mq或redis里面 采集有可能需要优先级队列,有些数据需要优先处理,有些数据可以暂缓处理,这个需要防范 至于订阅导出excel反而不是那么困难,一般程序员都可以完成,这个不多描述
你好,非常感谢你的建议! 现在数据的采集部分已经写出。我想把数据打包放入List<>里面的,不知道这可不可以?然后不知如何从里面取出一条条信息写入二进制文件中。[/quote] 另外建一个线程,专门讲list中的数据存入到文件中,我做过和你很类似的项目,主线程专门读,子线程专门写(以一定频率检查list的count,起始我是定义了2个list全局变量的,一个在存储的时候,主线程操作另一个),他们共享list这个变量,我的项目是实时读取外径,这个读取频率在10毫秒左右,不间断;[/quote]听你的意思是,读的线程和写的线程共享一个List?你看能否这样,现在需要采集两个量:电压和电流,那我分别定义两个:ListVoltage和ListCurrent,他们的Count我只给100个,超过100我就开始移除第一个。接下来我用另一个写线程,比如我写一条信息,包含3个参数,那我就取:DateTime、ListVoltage[0]、ListCurrent[0],把这3个参数写进文件。如果读线程里面一直都不到采集上来的数据,那我抛出异常?写文件自然停止?我又想到另一个问题,解析数据咋办?如果我按时间来检索数据文件中的数据,并导出EXCEL?
楚狂歌 2016-12-27
  • 打赏
  • 举报
回复
楼主对【实时】的理解相当微妙啊
小海贼 2016-12-27
  • 打赏
  • 举报
回复
引用 16 楼 yirenju6028 的回复:
[quote=引用 11楼wanghui0380 的回复:]一步一步做呗 1.你自己把采集部分写出来 2.把采集的数据 丢进 可限流线程安全队列 3.订阅队列,写入excel,当然何谓excel满我是不知道滴,你可以自己通过异常或者自己的计数来判定。 当然俺们不会帮你写代码,只会告诉你基本思路。 采集有可能涉及多路采集和多厂家设备集成,这个如果是写项目需要注意防范 采集有可能需要限流,避免数据堆积,这个需要防范。如果项目小可以自己丢到可限流线程安全队列处理,如果数据比较大,先丢到mq或redis里面 采集有可能需要优先级队列,有些数据需要优先处理,有些数据可以暂缓处理,这个需要防范 至于订阅导出excel反而不是那么困难,一般程序员都可以完成,这个不多描述
你好,非常感谢你的建议! 现在数据的采集部分已经写出。我想把数据打包放入List<>里面的,不知道这可不可以?然后不知如何从里面取出一条条信息写入二进制文件中。[/quote] 另外建一个线程,专门讲list中的数据存入到文件中,我做过和你很类似的项目,主线程专门读,子线程专门写(以一定频率检查list的count,起始我是定义了2个list全局变量的,一个在存储的时候,主线程操作另一个),他们共享list这个变量,我的项目是实时读取外径,这个读取频率在10毫秒左右,不间断;
  • 打赏
  • 举报
回复
用log4net得了,不用先保存到list里
wanghui0380 2016-12-26
  • 打赏
  • 举报
回复
一步一步做呗 1.你自己把采集部分写出来 2.把采集的数据 丢进 可限流线程安全队列 3.订阅队列,写入excel,当然何谓excel满我是不知道滴,你可以自己通过异常或者自己的计数来判定。 当然俺们不会帮你写代码,只会告诉你基本思路。 采集有可能涉及多路采集和多厂家设备集成,这个如果是写项目需要注意防范 采集有可能需要限流,避免数据堆积,这个需要防范。如果项目小可以自己丢到可限流线程安全队列处理,如果数据比较大,先丢到mq或redis里面 采集有可能需要优先级队列,有些数据需要优先处理,有些数据可以暂缓处理,这个需要防范 至于订阅导出excel反而不是那么困难,一般程序员都可以完成,这个不多描述
吉普赛的歌 2016-12-26
  • 打赏
  • 举报
回复
用数据库保存吧, 轻松方便很多吧。
threenewbee 2016-12-26
  • 打赏
  • 举报
回复
windows不是实时操作系统。你只能每得到数据就写入下文件,视作实时。
yirenju6028 2016-12-26
  • 打赏
  • 举报
回复
引用 3楼daixf_csdn 的回复:
你这个需求很奇怪,你是要将数据存储到本地,而且要能导出Excel,所以一般来说,数据的存储并不需要实时。 你所说的实时,可能并不是计算机术语上的“实时”。 对于你的真实需求,我觉得更有可能的是不是,需要异步非实时的保存,即在不影响采集效率的情况下,又能将数据写入本地文件。 那就是用多线程的方式写入文件。
我的意思是,某事某刻对应着某时某刻采集到数据,只要此时采集到的数据和现实时间对应就ok。
yirenju6028 2016-12-26
  • 打赏
  • 举报
回复
引用 11楼wanghui0380 的回复:
一步一步做呗 1.你自己把采集部分写出来 2.把采集的数据 丢进 可限流线程安全队列 3.订阅队列,写入excel,当然何谓excel满我是不知道滴,你可以自己通过异常或者自己的计数来判定。 当然俺们不会帮你写代码,只会告诉你基本思路。 采集有可能涉及多路采集和多厂家设备集成,这个如果是写项目需要注意防范 采集有可能需要限流,避免数据堆积,这个需要防范。如果项目小可以自己丢到可限流线程安全队列处理,如果数据比较大,先丢到mq或redis里面 采集有可能需要优先级队列,有些数据需要优先处理,有些数据可以暂缓处理,这个需要防范 至于订阅导出excel反而不是那么困难,一般程序员都可以完成,这个不多描述
你好,非常感谢你的建议! 现在数据的采集部分已经写出。我想把数据打包放入List<>里面的,不知道这可不可以?然后不知如何从里面取出一条条信息写入二进制文件中。
BenBenBears 2016-12-26
  • 打赏
  • 举报
回复
引用 8 楼 mjp1234airen4385 的回复:
看楼主的情况,大家不要纠结实时这两个字了。
同意。
yirenju6028 2016-12-26
  • 打赏
  • 举报
回复
引用 8楼mjp1234airen4385 的回复:
看楼主的情况,大家不要纠结实时这两个字了。 从终端上采集到数据,同事写入到磁盘文件里就OK了。 先要说清楚终端是以什么方式接入到系统里的,是网络还是串口,usb的。 再用不通的办法采集数据,把数据写入磁盘就是一样的了,导出到excel也是一样的。 如果知道数据结构的话,楼主可以先设计磁盘写入和导出excel。
下位机的数据是串口传递上来的,数据结构自己定义的,存储到磁盘的一条信息内容:时间、电压值、电流值。然后解析这个保存的文件(二进制文件,理由是,磁盘利用率高,相比较文本文件)。然后解析这个文件,可以整齐的导出表格excel。大家不要纠结“实时了”,我的意思是,某事某刻对应着某时某刻采集到数据,只要此时采集到的数据和现实时间对应就ok。
mjp1234airen4385 2016-12-26
  • 打赏
  • 举报
回复
看楼主的情况,大家不要纠结实时这两个字了。 从终端上采集到数据,同事写入到磁盘文件里就OK了。 先要说清楚终端是以什么方式接入到系统里的,是网络还是串口,usb的。 再用不通的办法采集数据,把数据写入磁盘就是一样的了,导出到excel也是一样的。 如果知道数据结构的话,楼主可以先设计磁盘写入和导出excel。
风吹腚腚凉 2016-12-26
  • 打赏
  • 举报
回复
引用 5 楼 tys591320 的回复:
你所谓的实时难道不就是收到数据立刻记录当前时间然后保存么!反正我这种业余选手都是把数据存到一个数组或者是那 然后当数据总数大于某个值时生成一个以当前时间为文件名的文件然后存储
传感器必须实时啊,比如你开车撞了,气囊不能等你 那首 情深深雨萌萌唱完了再打开气囊吧?
风吹腚腚凉 2016-12-26
  • 打赏
  • 举报
回复
引用 3 楼 daixf_csdn 的回复:
你这个需求很奇怪,你是要将数据存储到本地,而且要能导出Excel,所以一般来说,数据的存储并不需要实时。 你所说的实时,可能并不是计算机术语上的“实时”。 对于你的真实需求,我觉得更有可能的是不是,需要异步非实时的保存,即在不影响采集效率的情况下,又能将数据写入本地文件。 那就是用多线程的方式写入文件。
引用 2 楼 sp1234 的回复:
[quote=引用 楼主 yirenju6028 的回复:]现在遇到问题,如何实时保存?
一直说这个词儿,说到太阳毁灭了,就会编程了。[/quote] 这话说的就不对了吧,我们可以通过VXD驱动截获系统实时中断来实现。
依然冷暖 2016-12-26
  • 打赏
  • 举报
回复
你所谓的实时难道不就是收到数据立刻记录当前时间然后保存么!反正我这种业余选手都是把数据存到一个数组或者是那 然后当数据总数大于某个值时生成一个以当前时间为文件名的文件然后存储
风吹腚腚凉 2016-12-26
  • 打赏
  • 举报
回复
你应该用VxWorks 这个硬操作系统。
圣殿骑士18 2016-12-26
  • 打赏
  • 举报
回复
你这个需求很奇怪,你是要将数据存储到本地,而且要能导出Excel,所以一般来说,数据的存储并不需要实时。 你所说的实时,可能并不是计算机术语上的“实时”。 对于你的真实需求,我觉得更有可能的是不是,需要异步非实时的保存,即在不影响采集效率的情况下,又能将数据写入本地文件。 那就是用多线程的方式写入文件。
  • 打赏
  • 举报
回复
引用 楼主 yirenju6028 的回复:
现在遇到问题,如何实时保存?
一直说这个词儿,说到太阳毁灭了,就会编程了。
加载更多回复(3)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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