设为首页 - 加入收藏 - 网站地图 我爱嵌入式(www.52embed.com),专注嵌入式开发技术!
当前位置:主页 > 应用软件 > 正文

使用Teechart控件实现动态加点

时间:2017-05-21 14:27 来源:未知 作者:admin 阅读:
TeeChart控件可以满足绘制优美的曲线、饼图、柱状图,在本项目中使用到了动态加点和去点的方法,完成最大值的获取。
加点时采用以下的代码:

 tChart1.Series(1).AddXY(x, datas[x], x.ToString(), 0);   

减点时需要采用以下代码:

tChart1.Series(1).Delete(x);                  //减去第x个点
 











源码如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
//using System.Linq;
using System.Text;
using System.Windows.Forms;
 
 
namespace PWMControl
{
 
    public partial class Form2 : Form
    {
        int x;   //set default x axis
       // double  y;
 
        double[] datas = new double[46] {0,1.865987645,3.731944052,5.597856845,7.463709292,9.32947886,11.19513533,13.06063828,14.92593387
,16.79095048
,18.65559316
,20.51973622
,22.38321372
,24.24580688
,26.10722778
,27.9670981
,29.82492147
,31.68004747
,33.5316249
,35.37854109
,37.21934316
,39.05213591
,40.87444955
,42.68306838
,44.47380904
,46.24123368
,47.97827915
,49.67577776
,51.32183831
,52.90104696
,54.39343591
,55.77315315
,57.00674706
,58.05095543
,58.84985668
,59.33120062
,59.40168405
,58.94086987
,57.7933626
,55.75874359
,52.57862828
,47.92002729
,41.35396196
,32.32798802
,20.1309014
,3.847413084
};                          //功率与电压关系数组
 
 
 
 double[] datasI = new double[46] {
1.865987645,
1.865987645,
1.865972026,
1.865952282,
1.865927323,
1.865895772,
1.865855888,
1.865805469,
1.865741734,
1.865661165,
1.865559316,
1.865430566,
1.86526781,
1.865062068,
1.864801984,
1.864473206,
1.864057592,
1.863532204,
1.86286805,
1.862028479,
1.860967158,
1.85962552,
1.857929525,
1.855785582,
1.853075377,
1.849649347,
1.845318429,
1.839843621,
1.832922797,
1.824174033,
1.81311453,
1.799133973,
1.781460846,
1.759119861,
1.730878138,
1.695177161,
1.650046779,
1.592996483,
1.520877963,
1.429711374,
1.314465707,
1.168781153,
0.984618142,
0.751813675,
0.457520486,
0.085498069
 
    };
 
        double  step ;
 
        int interval,startVltg;
 
        int k = 0;
 
        double P = 0,dtP=0;
 
        int flag;
 
       int poitNum;
 
       double tanA, tanB;
 
          
 
 
        public Form2()
        {
            InitializeComponent();
        }
 
        private void axTChart1_OnAfterDraw(object sender, EventArgs e)
        {
 
        }
 
        private void Form2_Load(object sender, EventArgs e)
        {
           
            
            x = 0;   // initial x
 
            textBox1.Text = "0";
 
            textBox2.Text = "100";
 
            radioButton1.Checked = true;
 
            startVltg = 0;
 
 
            poitNum = 46;
           
 
            tChart1.Series(0).AddArray(46,datas,null);    //初始化理论功率曲线
 
 
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
 
 
            if (radioButton1.Checked == true)  //功率法
            {
 
                dtP = datas[x] - datas[x - 1];    //开始MPP算法
 
 
                if (dtP > 0)
                {
                    flag = 1;
 
 
                    x = x + flag * 1;
 
                    poitNum++;
 
                    tChart1.Series(1).AddXY(x, datas[x], x.ToString(), 0);   //show the bigger point
                }
                else
                {
                    flag = -1;
 
 
 
                    tChart1.Series(1).Delete(poitNum);     //del the litter point
 
                    //tChart1.Series(1).Delete(     //del the litter point
 
                    x = x + flag * 1;
 
                    poitNum--;
 
 
                }
            }
            else if(radioButton2.Checked == true)  //电导增量法
            {
 
           
 
                tanA = datasI[x] / x;    //  I/U
 
                tanB = -(datasI[x] - datasI[x - 1]);
 
                if (tanA > tanB)
                {
 
                    x++;             
                    
                    tChart1.Series(1).AddXY(x, datasI[x], x.ToString(), 0);   //show the bigger point
 
                   
 
 
 
                }
                else if(tanA == tanB)
                {
                   //tChart1.Series(1).Color = 1;
 
                   tChart1.Series(1).AddXY(x, datasI[x], x.ToString(), 0);   //show the bigger point
 
                }
                else if (tanA < tanB)
                {
 
                    tChart1.Series(1).Delete(x-1);     //del the litter point
 
                    x--;
 
                }
 
 
 
 
            }
 
        }
 
 
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            timer1.Start();        //start the timer,start regulation
 
            radioButton1.Enabled = false;
 
            radioButton2.Enabled = false;
 
            button1.Enabled = false;
 
            button3.Enabled = true;
 
            tChart1.Series(1).Clear();//clear the point in the chart
 
            if (radioButton1.Checked == true)  //功率法
            {
                x = startVltg;
 
                poitNum = x - startVltg;
 
                P = 0;
                dtP = 0;   //initial the parameters
 
                tChart1.Series(1).AddXY(x, datas[x], x.ToString(), 0);    //add the fist point
 
                x++;
 
                poitNum++;
 
                tChart1.Series(1).AddXY(x, datas[x], x.ToString(), 0); //and the second point
            }
            else if (radioButton2.Checked == true)
            {
                x = 1;
 
                tChart1.Series(1).AddXY(x, datasI[x], x.ToString(), 0);    //add the fist point
 
                x++;  //start adapt from x=2;
 
                tChart1.Series(1).AddXY(x, datasI[x], x.ToString(), 0);   //show the bigger point
 
            }
 
            
 
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                
                
                startVltg = int.Parse(textBox1.Text);    //set the default parameters
 
                if (startVltg >= 46 || startVltg < 0)
                {
                    startVltg = 0;
                }
   
                interval = int.Parse(textBox2.Text);
 
                if ( interval < 0)
                {
                    startVltg = 0;
                }
 
                //step = double.Parse(textBox3.Text);
 
                timer1.Interval = interval;          //set timer's interval as the new parameter
 
                MessageBox.Show("设置成功!","提示");
 
            }
            catch
            {
                MessageBox.Show("Error");
            }
 
 
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Stop();   //stop the timer
 
            radioButton1.Enabled = true;
 
            radioButton2.Enabled = true;
 
            button1.Enabled = true;
 
            button3.Enabled = false;
 
 
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit();    //close the application
 
            this.Dispose();       
        }
 
        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton2.Checked == true)
            {
                tChart1.Axis.Left.Maximum = 2;
 
                tChart1.Axis.Left.Minimum = -1;
 
                tChart1.Axis.Left.Title.Caption = "电流I/A" ;
 
 
 
                tChart1.Series(0).AddArray(46, datasI, null);    //初始化理论功率曲线
 
                tChart1.Series(1).Clear();
            }
 
        }
 
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                tChart1.Axis.Left.Maximum = 80;
 
                tChart1.Axis.Left.Minimum = -1;
 
                tChart1.Axis.Left.Title.Caption = "功率P/W";
 
 
 
                tChart1.Series(0).AddArray(46, datas, null);    //初始化理论功率曲线
 
 
                tChart1.Series(1).Clear();
 
 
 
            }
 
        }
    }
}
 

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
上一篇:射频工程师计算器
下一篇:没有了
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。