打印

关于PC在线采集系统的新问题,永远搞不清状况的数据处理...

[复制链接]
773|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangpeng59|  楼主 | 2018-3-9 21:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wangpeng59 于 2018-3-9 21:21 编辑

一个PC在线采集系统,之前发过一个帖子咨询,得到了好多高人的指点,说实话当时很多人说的什么也不太懂。。
之前的帖子:https://bbs.21ic.com/icview-2400956-1-1.html
几个月来按照网上开源的框架和自学(确实也没有一直做这个项目),有了一点儿眉目了。。

现在选择了C#做这个项目,先说一下我的思路:
1.我上传一帧的数据格式是:5A 5A ……(16字节数据,每2字节其实是一个采集通道的数据)…… A5 A5,一帧为固定不变的20字节,没设长度位和校验位;
2.要求数据的采集频率为1kHz(即1ms一帧),并上传至PC(因为需要导出的Excel或TXT文档要求有所有数据);
3.从串口缓冲区接收到的数据传入队列1,另开一线程进行数据处理(掐头去尾,中间数目每2个字节调换顺序并拼成一个int数据),处理后又放入另外一个队列2中,队列2用于画图使用;
4.画图考虑到系统的处理和视力接受能力,打算50ms或者100ms描一个点。


画图感觉问题不大,但数据处理部分还是不太清楚,目前还是有几个问题需要请教:
1.如果我100ms描一个点,那在这100ms之前系统应该已经采集进了100帧数据,那我描上的这个点应该是这100帧数据的平均值吗?
2.串口多长时间轮询一次?每次串口能接收到多少数据?我看有的资料说一次可能还不足1帧,是不是太慢了……
3.我觉得我的数据处理工作量比较大,(需要掐头去尾,中间数目每2个字节调换顺序并拼成一个int数据,还要取100次的平均值……),这样会不会在100ms内做不完这些工作而新的数据又来了呢?或者我的这种数据处理思路本身就是错的?抱歉我C#只是临时抱佛脚,基础不行,因此我对他们之间的速度配合没有一丁点儿的概念~
4.网上参考的范例,队列(也不知是不是叫队列)用的是Queue,但很多文字资料说用的是List,请问这两个有区别吗?
5.因为我采集的数据多且快,请问队列或数组可以存多少字节的数据有上限吗?
6.画图描点应该是使用定时器吧?每100ms去队列2(或其它地方)拿一次数据?

求大神给个指导,有例程或者资料就更好了,谢谢!!

相关帖子

沙发
dalarang| | 2018-3-9 22:05 | 只看该作者
本帖最后由 dalarang 于 2018-3-9 22:06 编辑

1、100ms是采集不了100帧数据的,串口没那么快,取个平均就行了。
2、根据实际使用需要来确定轮询间隔,一般情况下就算完全没有轮询间隔,一秒钟也就几帧往来。
3、这点数据量对PC来说微乎其微,不用担心处理不过来。
4、用queue或list都问题不大。

数据的存取要注意加上互斥锁,用lock关键字防止线程交叉竞争而导致的错误,你如果单片机嵌入系统搞过多线程编程就明白,类似于mutex。

要注意的一点是,虽然数据处理是非常快,但是C#的窗口显示是很耗时间的。

使用特权

评论回复
板凳
wangpeng59|  楼主 | 2018-3-9 22:18 | 只看该作者
dalarang 发表于 2018-3-9 22:05
1、100ms是采集不了100帧数据的,串口没那么快,取个平均就行了。
2、根据实际使用需要来确定轮询间隔,一 ...

请问我目前选择的波特率是230400B/S,我一帧是20字节数据,计算起来可以1ms发送一帧,而且我用STM32的USB转串发送,上位机串口助手也可以正确接收。是不是说明能接收这么多帧数据了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

217

帖子

2

粉丝