首先还是感谢网上的大神们,在参考了你们到博客后,我在这里也总结,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