千家信息网

如何使用C#实现串口示波器

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家展示了"如何使用C#实现串口示波器",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用C#实现串口示波器"这篇文章吧。具体内容如下开发
千家信息网最后更新 2026年11月04日如何使用C#实现串口示波器

这篇文章主要为大家展示了"如何使用C#实现串口示波器",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何使用C#实现串口示波器"这篇文章吧。

具体内容如下

开发工具

  • visual studio2019

C#串口示波器,实时刷新端口号,动态绘制多条折线,获取串口数据并输出到文本框
之前用Java实现串口示波器对我来说还是比较困难的,而且实现的效果不尽如人意,就用C#开发了。
C#可以自由布置界面,在工具栏直接拖拽控件到窗体,然后双击控件就能添加事件了,很方便
最终效果是实现了,但是有个数据丢失的问题

数据处理到绘图分三个步骤:

1、获取串口发送的数据
2、把数据按需要提取到中间容器集合list1中
3、从集合中提取绘图的y值

测试得出的结果就是数据放进集合前不存在丢失,从集合中拿出数据这一过程也没问题。所以问题就出在第二步了,已解决(按需提取数据的规则要尽可能设置的详细一点就行)。

代码:

namespace CommPortsDesigner{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void Form1_Load(object sender, EventArgs e) //窗体运行完成即为加载,加载完成会触发事件        {        }        //传入原始数据datas及需要匹配的字符串r,得到需要的数据列表list        private List DealData(string datas, Regex r, string split)         {            if (string.IsNullOrEmpty(datas))            {                throw new ArgumentException($""{nameof(datas)}"不能是 Null 或为空。", nameof(datas));            }                       List list1=new List { };            string s1="";            MatchCollection mc = r.Matches(datas);  //提取符合要求的字符串            for (int i = 0; i < mc.Count; i++)            {                textBox2.AppendText(mc[i].Value + "\r\n");    //测试数据是否正确输出                s1 = s1 + mc[i].Value;            }            string[] d = s1.Split( new string[]{split}, StringSplitOptions.RemoveEmptyEntries);            for (int i=0;i q1 = new Queue();            if (serialPort1.IsOpen && serialPort1.BytesToRead > 0)            {                chart1.ChartAreas[0].AxisX.LabelStyle.Format = "hh:mm:ss.ff";                chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Milliseconds;                chart1.ChartAreas[0].AxisX.MajorGrid.IntervalType = DateTimeIntervalType.Milliseconds;                try                {                    inbuffer = new byte[serialPort1.BytesToRead];                    serialPort1.Read(inbuffer, 0, serialPort1.BytesToRead);                    string strRaad = ASCIIEncoding.ASCII.GetString(inbuffer, 0, inbuffer.Length);                    textBox1.AppendText(strRaad);                    chart1.ChartAreas[0].AxisX.Minimum = DateTime.Now.AddSeconds(-5).ToOADate();                    chart1.ChartAreas[0].AxisX.Maximum = DateTime.Now.ToOADate();                    chart1.ChartAreas[0].AxisX.Interval = 500;                    if (btn_start.Text.Equals("停止"))                    {                        //LP1                        if (checkBox2.Checked)                        {                            foreach (int y in DealData(strRaad, r2, "LP2:"))                            {                                chart1.Series[1].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count2 = count2 + 5;                            }                        }                        else                        {                            chart1.Series[1].Points.Clear();                        }                                                //LP2                        if (checkBox2.Checked)                        {                            foreach (int y in DealData(strRaad, r2, "LP2:"))                            {                                chart1.Series[1].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count2 = count2 + 5;                            }                        }                        else                        {                            chart1.Series[1].Points.Clear();                        }                        //LP3                        if (checkBox3.Checked)                        {                            foreach (int y in DealData(strRaad, r3, "LP3:"))                            {                                chart1.Series[2].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count3 = count3 + 5;                            }                        }                        else                        {                            chart1.Series[2].Points.Clear();                        }                        //LP4                        if (checkBox4.Checked)                        {                            foreach (int y in DealData(strRaad, r4, "LP4:"))                            {                                chart1.Series[3].Points.AddXY(DateTime.Now.ToOADate(), y);                               //count4 = count4 + 5;                            }                        }                        else                        {                            chart1.Series[3].Points.Clear();                        }                        //LP5                        if (checkBox5.Checked)                        {                            foreach (int y in DealData(strRaad, r5, "LP5:"))                            {                                chart1.Series[4].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count5 = count5 + 5;                            }                        }                        else                        {                            chart1.Series[4].Points.Clear();                        }                        //CC1                        if (checkBox6.Checked)                        {                            foreach (int y in DealData(strRaad, r6, "CC1:"))                            {                                chart1.Series[5].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count6 = count6 + 5;                            }                        }                        else                        {                            chart1.Series[5].Points.Clear();                        }                        //CC2                        if (checkBox7.Checked)                        {                            foreach (int y in DealData(strRaad, r7, "CC2:"))                            {                                chart1.Series[6].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count7 = count7 + 5;                            }                        }                        else                        {                            chart1.Series[6].Points.Clear();                        }                        //CC3                        if (checkBox8.Checked)                        {                            foreach (int y in DealData(strRaad, r8, "CC3:"))                            {                                chart1.Series[7].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count8 = count8 + 5;                            }                        }                        else                        {                            chart1.Series[8].Points.Clear();                        }                        //CC4                        if (checkBox9.Checked)                        {                            foreach (int y in DealData(strRaad, r9, "CC4:"))                            {                                chart1.Series[8].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count9 = count9 + 5;}                        }                        else                        {                            chart1.Series[8].Points.Clear();                        }                        //CC5                        if (checkBox10.Checked)                        {                            foreach (int y in DealData(strRaad, r10, "CC5:"))                            {                                chart1.Series[9].Points.AddXY(DateTime.Now.ToOADate(), y);                                //count10 = count10 + 5;                            }                        }                        else                        {                            chart1.Series[9].Points.Clear();                        }                    }                }                catch                {                }            }        }               private void btn_open_Click(object sender, EventArgs e)        {            if (serialPort1.IsOpen||btn_open.Text.Equals("关闭"))            {                try                {                    serialPort1.Close();                    btn_open.Text = "打开";                }                catch                { }            }            else            {                try                {                    serialPort1.PortName = comboBox1.Text;                    serialPort1.Open();                    btn_open.Text = "关闭";                }                catch                {                    MessageBox.Show("串口打开失败!", "错误");                }            }                    }        private void timer1_Tick(object sender, EventArgs e)        {            if (!serialPort1.IsOpen)            {                searchPort();            }            else{}                        getDatas();        }        private void btn_clear_Click(object sender, EventArgs e)        {             textBox1.Clear();        }        private void btn_save_Click(object sender, EventArgs e)        {            if (this.textBox1.TextLength > 0)            {                string path = "D:\\log.txt";                using (StreamWriter sw = new StreamWriter(path, true))                {                    String time = DateTime.Now.ToLocalTime().ToString();                    sw.WriteLine("\n" + time);                    sw.Write(this.textBox1.Text);                }                MessageBox.Show("已保存到 D:\\log.txt!");            }        }        private void btn_start_Click(object sender, EventArgs e)        {            if (serialPort1.IsOpen)            {                if (btn_start.Text.Equals("开始"))                {                    try                    {                        btn_start.Text = "停止";                    }                    catch                    { }                }                else                {                    try                    {                        btn_start.Text = "开始";                    }                    catch                    {                    }                }            }            else             {                if (btn_start.Text.Equals("停止"))                {                    try                    {                        btn_start.Text = "开始";                    }                    catch                    { }                }                else                 {                    MessageBox.Show("串口未打开!");                }            }        }    }}

因为第一次开发,所以要实现的功能代码都放在一个类里了,大家将就着看吧

最终实现的效果

以上是"如何使用C#实现串口示波器"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

数据 串口 示波器 C# 内容 效果 篇文章 问题 开发 测试 事件 代码 字符 字符串 工具 控件 窗体 学习 帮助 绘图 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 保险科技 互联网保险 互联网新科技 上海睿民互联网科技有限公司 新华互联网科技学校 互联网与新科技 互联网科技视频 狮子座互联网科技有限公司 互联网科技汛 互联网科技生活的内容 安控科技rtu产品工业互联网 成都互联网科技公司工作好不好 亳州好赞互联网科技有限公司 想开互联网科技公司怎么样 互联网金融科技名词解释 工业互联网展湾科技股份有限公司 山东星卡互联网科技有限公司官网 广州富喜互联网络科技 厦门江牛科技互联网 广州燕处互联网科技有限公司 西安互联网科技 互联网 的科技创新 互联网科技美容 北京大学互联网科技怎么样 互联网教育科技公司vipkid 互联网企业和科技型企业 互联网科技革命什么开始 深圳市优智互联网科技有限公司 从那以后互联网科技有限公司 杭州融税互联网科技有限公司
0