C# Chart 波形显示,动态数据滑动显示方法

首先还是感谢网上的大神们,在参考了你们到博客后,我在这里也总结,C# chart 波形显示的方法,如果有问题请留言,谢谢;

步骤:

1、添加Chart控件;

2、开一个定时器定期刷新数;

3、串口收到数据后传送到Chart显示控件;

操作方法:

1、添加Chart控件;

 

 

        /// <summary>
        /// 波形显示数据定义
        /// </summary>
        int[] array_display1 = new int[150];         //波形显示数据1
        int[] array_display2 = new int[150];         //波形显示数据2
        int[] array_display3 = new int[150];         //波形显示数据3,数据显示太多,先屏蔽数据3
        int data_display1;                           //显示更新数据1,最后只需要修改全局变量即可,内部自动更新波形
        int data_display2;                           //显示更新数据2
        int data_display3;                           //显示更新数据3
        int data_displayEnable;                     //收到更新数据事件,置位标志:1,未收到更新数据值:0

 

                  else if ((rxbuff[0] == 0xBB) && (rxbuff[1] == 0x01) && (rxbuff[8] == 0xBB) && (rxbuff[9] == 0xBB))  //波形显示
                    {

                        data_display1 = rxbuff[2]*256 + rxbuff[3];                        //显示更新数据1,最后只需要修改全局变量即可,内部自动更新波形
                        data_display2 = rxbuff[4] * 256 + rxbuff[5];                      //显示更新数据2
                        data_display3 = rxbuff[6] * 256 + rxbuff[7];                      //显示更新数据3
                        data_displayEnable = 1;                                           //收到更新数据事件,置位标志:1,未收到更新数据值:0

                        textBox1_DataDebug.Text += "\r\n 收到波形显示数据\r\n";
                        Console.WriteLine("收到波形显示数据");                 //调试软件后台打印
                    }

2、定时器配置:

 

 


        #region 波形显示,定时器中断
        /// <summary>
        ///  波形显示,定时器中断 
        /// </summary>
        /// <param name="rxbuff"></param>

        static int startUp = 0; //波形显示上电先显示零零,保证波形显示框显示出来

        private void timer_displayInterrupt(object sender, EventArgs e)
        {
            try 
            {
                int countX;
                int LengthX = 50;                   //X轴显示长度,长度不能大于 array_display1 数组长度,最大140
                Random rd = new Random();           //产生随机函数
                
                if(startUp == 0)                     //上电第一次显示波形零,让波形表格呈现出来,只执行一次
                {
                    startUp = 1;
                    for (countX = 1; countX < LengthX; countX++)
                    {
                        chart1.Series[0].Points.AddXY(0, 99);        //X0~50,Y99,先勾画出框图表格
                        chart1.Series[1].Points.AddXY(0, 99);
                        chart1.Series[2].Points.AddXY(0, 99);       
                    }
                }


                //data_displayEnable = 1;                  //模拟始终更新数据,串口显示时屏蔽此处
                if (data_displayEnable == 1)                //更新数据标志为1 更新数据,数据为0不更新数据
                {

                    //原始显示方法
                    //chart1.Series[0].Points.AddXY(countX + 1, rd.Next(1, 100));
                    //chart1.Series[1].Points.AddXY(countX + 1, rd.Next(1, 100));

                    //串口接收数据显示
                    //data_display1 = rd.Next(1, 100);                   //内部产生随机值,模拟数据
                    //data_display2 = rd.Next(1, 100);
                    //data_display3 = rd.Next(1, 100);

                    data_displayEnable = 0;                             //清零标志,串口收到数据后再更新数据
                    chart1.Series[0].Points.Clear();                    //清除显示点,数组重新滑动后显示
                    chart1.Series[1].Points.Clear();
                    chart1.Series[2].Points.Clear();

                    array_display1[LengthX - 1] = data_display1;        //将数据复制到显示数组中
                    array_display2[LengthX - 1] = data_display2;
                    array_display3[LengthX - 1] = data_display3;      

                    for (countX = 0; countX < LengthX; countX++)
                    {
                        array_display1[countX] = array_display1[countX + 1];
                        array_display2[countX] = array_display2[countX + 1];
                        array_display3[countX] = array_display3[countX + 1];      
                    }
                    for (countX = 1; countX < LengthX; countX++)
                    {
                        chart1.Series[0].Points.AddXY(countX, array_display1[countX]);
                        chart1.Series[1].Points.AddXY(countX, array_display2[countX]);
                        chart1.Series[2].Points.AddXY(countX, array_display3[countX]);         
                    }

                }
                
            }
            catch (Exception)
            {
                Console.WriteLine("波形显示错误!");                 //调试软件后台打印
                return;
            }


        }
        #endregion


效果展示:

源码: 

链接:https://pan.baidu.com/s/1WYxc9Ug9TEn1EYrC6Kwq5Q 
提取码:sewu

  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值