C# serialport+mschart读取上位机数据绘制实时曲线之进制转换,与mschart数据源绑定
小弟刚刚接触串口,还望各位大哥大姐多多指教。。。、
DBhelper sql = new DBhelper();
#region 变量声明
//定义 SerialPort对象
SerialPort serialPort1 = new SerialPort();
Byte[] vbReceive = new byte[6764];//声明字节型数组,用以存储串口中读取的数据
Byte[] receiveBuffer = new byte[6764];//声明字节型数组,用以存储串口中读取的数据
double[] gDiameter = new double[] { -1, -1, -1, 0.523, 0.542, 0.582, 0.626, 0.673, 0.723, 0.777, 0.835, 0.897, 0.964, 1.036, 1.113, 1.196, 1.286, 1.381, 1.485, 1.595, 1.714, 1.842, 1.98, 2.128, 2.286, 2.457, 2.64, 2.837, 3.052, 3.277, 3.521, 3.784, 4.066, 4.37, 4.696, 5.046, 5.423, 5.828, 6.263, 6.73, 7.232, 7.772, 8.352, 8.975, 9.645, 10.365, 11.138, 11.97, 12.863, 13.823, 14.854, 15.963, 17.154, 18.434, 19.81 }; //用于标识横轴坐标的[55]粒径数组
long[] gDataInDiamete = new long[55];// 每次从串口读取的粒径通道的数据(52个粒径通道)
delegate void ReceivData(byte[] bytes);//声明一个委托用于接收串口数据
serialPort1.ReadBufferSize = 6764; //接收缓冲区大小
#endregion
/// <summary>
/// 串口激发事件
/// </summary>
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
#region 判断接收数据包大小达到6764,并进行相关数据计算
if (serialPort1.ReceivedBytesThreshold >= 6764)
{
serialPort1.Read(vbReceive, 0, 6764);
if (vbReceive[0] == 255 && vbReceive[1] == 1&&vbReceive[6762]=255&&vbReceive[6763]=2)
{
gDataInDiamete[1] = -1;
gDataInDiamete[2] = -1;
gDataInDiamete[3] = -1;
gDataInDiamete[4] =(vbReceive, (2 + 2 * 52 * 64)) * 256;//(vbReceive[2 + 2 * 52 * 64] * 256) + BitConverter.ToInt64(vbReceive[2 + 2 * 52 * 64 + 1]);
dSum += gDataInDiamete[4];
for (int i = 1; i <= 51; i++)
{
gDataInDiamete[i + 4] = vbReceive[2 + 2 * 52 * 64 + 2 * i] * 256 + vbReceive[2 + 2 * 52 * 64 + 2 * i + 1];
dSum += gDataInDiamete[i + 4];
}
//将总浓度的值转换为string并赋值txtTC
txtTC.Text = Convert.ToString(dSum);
//}
#region 将数据实时保存在数据库中
//string strsql;
//strsql = "insert into APS (apsdatetime,sSum,apsTimeInterval,aps1,aps2,aps3,aps4,aps5,aps6,aps7,aps8,aps9,aps10,aps11,aps12,aps13,aps14,aps15,aps16,aps17,aps18,aps19,aps20,aps21,aps22,aps23,aps24,aps25,aps26,aps27,aps28,aps29,aps30,aps31,aps32,aps33,aps34,aps35,aps36,aps37,aps38,aps39,aps40,aps41,aps42,aps43,aps44,aps45,aps46,aps47,aps48,aps49,aps50,aps51,aps52) values ('" + TextBox1.Text + "','" + TextBox3.Text + "','" + + "','" + + "','" + TextBox2.Text + "')";
//BaseClass1.execsql(strsql);
#endregion
serialPort1.DiscardInBuffer();//清空数据缓存器
}
#endregion
}
相关推荐
serialport串口接收数据在mschart上显示
本资源是基于vs2010 winform的C#程序,主要实现serialport串口接收数据,运用timer在msxhart上实时显示。解决了串口收不到数据,serialport辅线程的问题,上传的程序没有问题,希望对需要的人提供帮助。(环境vs2010 C#)
C# 实时数据展示入门与MSChart控件应用
在本章中,我们将探索Microsoft Chart控件的基础知识,为后续章节中讨论更高级的功能打下坚实的基础。MSChart是一个功能强大的图表库,允许开发者在Windows窗体应用程序中轻松地绘制各种类型的图表。它提供了丰富的配置选项,可以用来展示数据的统计和分析结果。在某些情况下,我们可能需要将非标准的数据集合绑定到MSChart控件。要实现这一点,我们需要创建一个能够被MSChart识别的数据适配器。这通常涉及到继承并实现类中的接口。
C#上位机+MySQL:实现工业数据存储与历史曲线查询
直接用CSV存储,数据量大后查询卡顿;MySQL表设计不合理,插入/查询效率低;历史曲线绘制时UI卡顿,大数据量加载超时;无数据备份/异常处理,数据易丢失。本文基于C# WinForm + MySQL打造的方案,解决“存储稳定性、查询高性能、可视化流畅性”三大问题,适配90%的工业数据采集场景。存储稳:批量插入+事务+本地缓存,数据不丢失;查询快:索引+分页+降采样,大数据量也流畅;可视化优:异步加载+曲线优化,UI不卡顿;工程化:备份+异常处理+部署优化,适配7×24小时运行。
MSChart绘制两条折线,可以随数据实时变化,效果不错
MSChart绘制两条折线,可以随数据实时变化,效果不错 分别从两个串口读取数据,然后绘制成两条曲线,非常好
绘制波形图,随时间向前不断移动
绘制波形图,随时间向前不断移动,曲线可以另存为, 绘制动态曲线 数据采集 通讯


图表区
