两个串口采集数据并绘图,一个定时器统制采集的开始,停止。程序会卡顿
两个串口采集数据并绘图,一个定时器控制采集的开始,停止。程序会卡顿我的程序里面,需要用两个串口实时采集
两个串口采集数据并绘图,一个定时器控制采集的开始,停止。程序会卡顿
我的程序里面,需要用两个串口实时采集设备数据,数据接收后解析并在2个teechart上分别绘制曲线。
我现在才有的方案是界面上放2个spcomm的控件,分别对应两个串口;用一个定时器200毫秒发送一次读两个串口数据的命令(2行代码),分别在2个spcomm的reveivedata里面分析数据并绘制。程序在自己的普通pc电脑上工作,一切正常,占用内存很稳定,10几兆,cpu工作也很稳定,1%的样子。
但是客户那里的工控机在运行程序后,发现工作几个小时会出现程序卡顿,绘制曲线卡顿的情况,非常的费解。
不知这样的程序是否还有必要单独的用2个线程来实现2个串口的工作?
请各位指教啊。
[解决办法]
不明觉厉
[解决办法]
这种连续不间断的采数据,最好还是开个线程,让串口在后台采集数据,前台界面负责显示数据和绘制曲线。串口线程成功采集到数据了,就用消息通知主线程。
如果更复杂点,采集数据很快的话,还得弄个缓冲区,前台来不及处理,以免数据丢失
[解决办法]
工控机和普通电脑在数据处理方面基本没什么差异。它的不同是表现在其他方面。
我们也有一个简单接收数据的程序,跟你的基本一样,只是在外接设备上有点不同——我们的外接设备是一直对外发送串口数据的。
绘制曲线卡顿等情况,是不是你的曲线绘制的时候,X轴的点有些多?这样的话会出现这样的情况。
[解决办法]
这种采集数据并画图的程序,还用teechart画曲线,数据一多肯定卡。
自己在Canvas上画吧。
[解决办法]
问问,在canvas上怎么绘制实时曲线。
[解决办法]使用chart控件,X轴数据一多,还会出现内存不足。用IMAGE,PAINTBOX绘制图形吧。
[解决办法]多数问题是出在在SPCOMM的接收时进行描绘曲线图了, 因为VCL说描绘Canvas一定要在主线程中执行.
正确做法, 接收到数据后, 存放到变量.(这个在接收线程)
在form中加一定时器,每隔一段时间从变量中取数据进行描绘.(这在主线程执行)
[解决办法]所有的串口操作放在一个线程里就好,线程只要建一个和一次,程序运行时就先创建好线程,线程的运行和退出前台主线程来控制,参考下我的做法:
http://blog.csdn.net/jankercsdn/article/details/8874469
如果数据采集过程中不考虑中断线程(主要是为了让出串口给下位设备发控制命令什么的),可以简化下
[解决办法]几百个点?是一直保留在界面上吗?就是说从1~几百,都是这样画的?
如果不是要观察数据整体趋势的话,还是不要在Chart上保留这么多点,用Canvas即时刷新画图还是不错的。
或者,你可以在内存画图,数据接收完后,一次把曲线画出来。
[解决办法]有可能是内存随然释放了,但是产生很多内存碎片。