多通道串口采存系统如何运用生产者消费者构架

2019-07-17 10:35发布

做了一个温度采存系统,就是从串口读取传感器发送来的数据处理后波形图表显示并存储到TXT文档。目前已经做了六个通道的,六路并行采集、处理、显示、存储,测试了几天没有问题。但是现在老师说要做48路,也就是要同时采集48个通道的数据并同时显示存储,这个理论上把目前的六路继续复制扩充就行了,就是怕同时运行几十路电脑吃不消。老师让我用生产者消费者循环,我对这个了解不多,目前在学,但是不知道用生产者消费者循环带来的好处是什么?什么做生产者循环,数据采集和处理吗?什么做消费者,显示和存储吗?可是感觉这样的好处也只是节省了时间,可是我采集温度这样的大惯性量又不需要很高的频率,我需要的是节省资源让电脑能同时采集48路。有些不解,请知道的指点指点,谢谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
hejin515
1楼-- · 2019-07-17 15:09
 精彩回答 2  元偷偷看……
hejin515
2楼-- · 2019-07-17 16:57
并行可以实现吗?
socobear
3楼-- · 2019-07-17 22:52
基本概念:生产者和消费者是两个并行的循环,二者通过一个队列来异步传输数据(即两个循环的执行时间不相同)。
--------
生产者:采集数据,比如你的程序是通过串口来读取数据的,目测应该不会用48个串口,应该是一个或者几个串口来读取所有通道,因此在编写程序时,下位机程序对目标通道扫描,将各个通道的数据串行发送给pc上的labview程序,labview程序中的“生产者”部分,对接收到的数据进行进行简单的处理,甚至不处理,直接丢入数据传输队列中;
消费者:通过前述的队列,从生产者部分获取到源源不断的数据,对数据进行处理,显示,存储等操作。
-------------
用这个模式的好处是:数据不会丢失。由于你的数据频率不高,显示什么的不会有滞后。这个模式简单来说就是流水线。。。。
hejin515
4楼-- · 2019-07-18 04:39
socobear 发表于 2015-11-12 18:06
基本概念:生产者和消费者是两个并行的循环,二者通过一个队列来异步传输数据(即两个循环的执行时间不相同)。
--------
生产者:采集数据,比如你的程序是通过串口来读取数据的,目测应该不会用48个串口,应该是一个或者几个串口来读取所有通道,因此在编写程序时,下位机程序对目标通道扫描,将各个通道的数据串行发送给 ...

谢谢,写这么多,辛苦了。我需要采48个点的温度,所以会用到48个传感器,这个传感器模块都是串口发送数据的,我转换成了USB口,所以到时候是48个USB口,会多用几个Hub,所以接口不是问题。这个传感器一秒钟发送两百多组数据,因为温度的采集不需要很高频率,我虽然都读取了,但是其实只是提取利用了很少的数据。因为假设我采样频率设为1Hz,我只要一秒钟能读到它的一组数据就可以了,所以我不怕数据丢失。我做了六路的测了几天没问题,现在主要考虑的是 按照我目前的并行结构,如果直接复制到48路,程序可能会跑不动,所以主要想有没有好的架构,可以让我48路采集的占用资源比较少,让labview程序连续长时间运行不会出错。不知道你有何想法,请指教!
socobear
5楼-- · 2019-07-18 06:06
hejin515 发表于 2015-11-13 08:53
谢谢,写这么多,辛苦了。我需要采48个点的温度,所以会用到48个传感器,这个传感器模块都是串口发送数据的,我转换成了USB口,所以到时候是48个USB口,会多用几个Hub,所以接口不是问题。这个传感器一秒钟发送两百多组数据,因为温度的采集不需要很高频率,我虽然都读取了,但是其实只是提取利用了很少的数据。因为假设 ...

真有这么多串口。。。

有个比较偷懒的办法是这样:for循环里面一次读6个通道,将48个串口(ref)分成8组,每组6个串口ref,然后在每一个for循环里面一次读取6个通道(你目前已有的程序),循环8次就完成所有通道的一次轮询了。。。
hejin515
6楼-- · 2019-07-18 06:18
 精彩回答 2  元偷偷看……

一周热门 更多>