c#多通道波形显示_基于C#波形显示控件升级版

一、概述两个月前制作一个项目,需要用到上位机实时显示波形的功能,说实话,在当时我的水平来看,用上位机进行串口的读写这样的功能没问题,但是一遇见画图之类的功能我就瞬间蛋疼了,于是我就上网搜索相关的源代码,很幸运,我搜到了xf_z1988的波形显示控件,当时我感觉如释重负,终于看到了胜利的曙光。同时他还写了一篇关于这个控件的功能介绍http://www.cnblogs.com/xf_z1988/arc...
摘要由CSDN通过智能技术生成

一、概述

两个月前制作一个项目,需要用到上位机实时显示波形的功能,说实话,在当时我的水平来看,用上位机进行串口的读写这样的功能没问题,但是一遇见画图之类的功能我就瞬间蛋疼了,于是我就上网搜索相关的源代码,很幸运,我搜到了xf_z1988的波形显示控件,当时我感觉如释重负,终于看到了胜利的曙光。同时他还写了一篇关于这个控件的功能介绍http://www.cnblogs.com/xf_z1988/archive/2010/05/11/CSharp_WinForm_Waveform.html

通过仔细拜读,感觉楼主水平果然高超,思维缜密代码清晰,实为我辈学习的对象。里边的功能十分强大,使用十分方便,十分给力。

在项目程序设计的过程中,由于要求比较苛刻,这个波形控件的功能有点不能满足我的需求,于是在一个风雷交加的晚上,我暗暗下定决心,面对这座大山进行代码的修改。到目前为止,我对这个控件做出来了多处修改,具体修改内容如下:

(1)修改了“默认坐标范围”的功能,它现在表示在接收数据的时候,横坐标范围不变,波形图像一直向左平移,且波形的结尾处一直处于波形控件的右边。

(2)简化了放大波形的过程,添加了波形缩小的功能。

(3) 添加了波形拖动的功能,可以很方便的查看历史记录。

(4)添加显示曲线坐标的功能,可以很方便的显示出曲线上某一点的实际坐标,matlab风格的。

(5)添加了截图的功能。

(6) 添加了清屏的按钮。

(7)支持文件内容的读取与显示(由于显示风格比较复杂,没有把波形的储存集成到控件本身,需要用外部的程序进行实现,这段代码在下边会详细介绍,代码很简单,容易实现)。

(8)支持纯链表显示(就是原控件的工作模式),纯文件内容显示,链表和文件混合显示,方便对历史波形进行查看。

(9)在显示波形之前,添加了设置波形显示模式的内容,可以方便不同情况下的显示状况(这一点在下边详细介绍,在这里不做解释)。

(10)优化了部分驱动算法,删除了部分没用的代码(可能是楼主调试的时候忘了删除无用代码吧)。

OK就这些,虽然添加的东西不太多,但是加上之后给人的体验还是蛮不错的。奥对,我把留出来的接口函数里边的ref关键字统统去掉了,只要不是int、double之类的基本类型或者是struct的结构类型,都是可以不用ref关键字的。

175550470_1_20191113092636330.png

二、修改

对于波形的显示功能,我没有做任何修改该,包括标尺、网格、背景颜色设置,这些内容的具体实现方式请看原作者的博文,就是上边的连接,我这里就不再做解释了。

除了这个之外,别的函数我基本上都动过手术刀,你要问我我到底改过什么地方,这些功能是是什么,我只能轻轻的告诉你:我忘了。我现在只能记住一些主要的地方,那些局部细节的修改是在是太多了,我没法一一列举出来,特别是我这里支持对波形文件的读取,那么对数据的处理基本上改了个遍,现在想想都头皮发麻。鉴于此,在这里我按照逻辑顺序,由浅入深把主要的修改内容简单的介绍一下,我尽量保证文章的简单,突出重点。

2.1截图功能

好多内容都是牵一发而动全身的,只有这个截图功能相对比较独立。

关于截图我是把功能放到FuncPrivate中的CutPic函数里边的。只要调用这个函数,在哪个地方都可以截图。

175550470_2_20191113092636705.gifprivate void CutPic()

{

Bitmap bit = new Bitmap(this.Width, this.Height);

Graphics g = Graphics.FromImage(bit);

g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; //设置图像质量g.CopyFromScreen(pictureBoxLeft.PointToScreen(Point.Empty), Point.Empty, this.Size);//截图范围string str = DateTime.Now.ToString("HH_mm_ss") + ".png";//设置路径bit.Save(str); //保存图形pictureBoxGraph.Refresh(); //更新显示panelItemsIN.Refresh(); //刷新按钮显示}

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#上位机中,波形图的显示通常需要以下几个步骤: 1. 创建一个用于显示波形的窗口或控件。在引用\[3\]中的代码中,可以看到通过调用CreateDisplayer()方法来创建波形显示窗口。 2. 在串口接收数据处理函数中,将接收到的数据添加到绘图窗口的数据链表中。在引用\[2\]中的代码中,可以看到通过调用Displayer.AddData(data)方法将接收到的数据添加到绘图窗口的数据链表中。 3. 在需要显示波形的时候,调用相应的按钮事件或方法。在引用\[3\]中的代码中,可以看到通过点击button3按钮来触发显示波形的操作。 需要注意的是,以上代码只是一个示例,具体的实现方式可能会根据项目的需求和具体的控件库而有所不同。你可以根据自己的需求进行相应的修改和调整。 #### 引用[.reference_title] - *1* [c#上位机多通道ADC采样波形显示](https://blog.csdn.net/sinat_23338865/article/details/52850639)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C#上位机(绘制波形)](https://blog.csdn.net/weixin_42536748/article/details/124379352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值