找回密码
 立即注册

QQ登录

只需一步,快速开始

子曰

中级会员

16

主题

45

帖子

670

积分

中级会员

积分
670

活字格认证

子曰
中级会员   /  发表于:2015-10-19 16:35  /   查看:12091  /  回复:17
如果在串口响应消息里面写:
             this.Dispatcher.Invoke(new System.Action(() =>
            {
                PaintData(Data, curDataCnt);
            }));
数据是不会丢,但整个ui界面就卡死了,点别的按钮没反应。

用定时器DispatcherTimer 设定时间间隔为 Interval = TimeSpan.FromMilliseconds(0.1) ; refreshTimer.Tick += (s, e) => PaintData();
chart绘图就会出现丢数据的情况。
串口出来的数据是每秒100点。 请问如何解决?

17 个回复

正序浏览
Alice
社区贡献组   /  发表于:2015-11-2 14:12:00
18#
回复 17楼tian__xiaa的帖子

C1Chart有两种添加数据的方式,一种是使用DataSource进行数据绑定,另一种就是添加系列DataSeries。
第二种方式的添加,您可以参考产品文档。

您说从硬件提取的数据,请您测试如果不使用C1Chart,而是用16楼采用的思路,将您采样的频率数据在1秒内画100个画在窗体上,也会被限制。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
tian__xiaa
注册会员   /  发表于:2015-11-2 11:13:00
17#
回复 16楼Alice的帖子

我们的硬件固定以100Hz的频率向PC发送数据,向chart数据集合添加数据用的是demo中dispatchertimer的方法。chart for WPF 的实时刷新提供其他的数据添加方式么?我在demo中没有找到。
另外,chart在刷新数据的时候,是只刷新数据集合改变的值么?还是刷新整个集合?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-30 18:36:00
16#
回复 15楼tian__xiaa的帖子


我做了一个示例,根据您的提示进行了测试,测试和c1chart无关。
采样率为100hz,即0.01秒取一个数据,然后添加到集合Collection中,使用微软的接口DispathcerTimer控制采样频率,设置dt = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(0.1) };
点击start按钮开始计时,点击stop按钮停止。
按照设定的采样率10hz,1秒钟可以采取10个点。

经过测试,可以满足需求。

将Interval属性改成0.01.然后继续上述测试。
计时开始后发现,Interval的更改和往集合里一次性加的点的增加,都无法改变1秒内增加的数据量。它有上限。
而这个和我们控件没有关系。

基于此,首先需要了解的是,您是如何通过100hz的采样率在1秒添加100点给这个平台下的集合?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
tian__xiaa
注册会员   /  发表于:2015-10-30 11:40:00
15#
回复 14楼Alice的帖子

或者说可以换一个方式来问这个问题,现在我们的硬件每秒有100点的数据(采样率100hz,均匀采样)经过串口传到PC端,需要在C1Chart中做显示,应该怎么实现?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-30 10:43:00
14#
回复 13楼子曰的帖子

您好。
C1Chart里并没有限制,主要看您的机器能画多少个点。
这个问题在于您传入的数据。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
子曰
中级会员   /  发表于:2015-10-29 17:48:00
13#
回复 12楼Alice的帖子

那chart 一秒钟做多能画多少点呢?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-29 12:19:00
12#
回复 11楼子曰的帖子

这是限制,无法绘制那么多数据。
就像是在平台本身,在1秒内绘制100个数据画在窗体上,也是会卡顿或是受到限制的。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
子曰
中级会员   /  发表于:2015-10-29 11:15:00
11#
回复 10楼Alice的帖子

这个问题我也发现了 Interval = TimeSpan.FromMilliseconds(0.1) 会丢数据,问题是串口是每秒100个数据的,如果在串口响应消息里面写:
             this.Dispatcher.Invoke(new System.Action(() =>
            {
                PaintData(Data, curDataCnt);
            }));
chart绘制是不会丢数据的,但整个ui界面就卡死了,点别的按钮没反应。这个有办法解决吗?
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-10-28 12:33:00
10#
回复 8楼tian__xiaa的帖子

您好。
我们在运行您的demo的时候出现了错误,但是我们看了您的代码,并进行了分析。
您的代码主要是从硬件去数据,然后在C1chart展示出来。
我们也使用随机安装示例做了测试,测试示例路径如下:
\Documents\ComponentOne Samples\WPF\C1.WPF.Chart\CS\ChartSamples\Performance\Dynamic

通过将Dynamic.xaml.cs文件中的Interval属性改成:
  1. Interval = TimeSpan.FromSeconds(0.01) };
复制代码

来模拟您的1秒100个数据的频率。

C1Chart通过ItemsSource绑定数据源,但是实际上经过测试,在1秒内根本无法从数据源获取到100个数据,在规定的时间1秒数据源里的数据就没有100个,C1chart只是展示数据源里的数据,因为根本就没有100个数据,自然也无法在1秒展示100个数据。
调查发现,这不是产品问题,推测是计算机硬件或是平台本身的上限导致的。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部