91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用C#實現串口示波器

發布時間:2022-02-17 13:41:58 來源:億速云 閱讀:194 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“如何使用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<int> DealData(string datas, Regex r, string split) 
        {
            if (string.IsNullOrEmpty(datas))
            {
                throw new ArgumentException($"“{nameof(datas)}”不能是 Null 或為空。", nameof(datas));
            }
           
            List<int> list1=new List<int> { };
            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<d.Length;i++)            //將數字存入列表
            {
                list1.Add( int.Parse(d[i]));
            }

            //測試畫圖用的數據是否解析正確
            if (split.Equals("LP4:"))
            {
                foreach (int m in list1)
                {
                    textBox3.AppendText(m + "\r\n");
                }
            }
            return list1;
        } 

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
        private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            
                serialPort1.BaudRate = int.Parse(comboBox2.SelectedItem.ToString());
        }

        private void searchPort()
        {
            string Buffer;
            comboBox1.Items.Clear();
            for (int i = 1; i < 20; i++)
            {
                try
                {
                    Buffer = "COM" + i.ToString();
                    serialPort1.PortName = Buffer;
                    serialPort1.Open();
                    comboBox1.Items.Add(Buffer);
                    comboBox1.SelectedItem = Buffer;
                    serialPort1.Close();
                }
                catch
                { }
            }
        }
        private void getDatas() 
        {
            System.Text.RegularExpressions.Regex r1 = new System.Text.RegularExpressions.Regex("LP1:(-?)\\d+");
            System.Text.RegularExpressions.Regex r2 = new System.Text.RegularExpressions.Regex("LP2:(-?)\\d+");
            System.Text.RegularExpressions.Regex r3 = new System.Text.RegularExpressions.Regex("LP3:(-?)\\d+");
            System.Text.RegularExpressions.Regex r4 = new System.Text.RegularExpressions.Regex("LP4:(-?)\\d+");
            System.Text.RegularExpressions.Regex r5 = new System.Text.RegularExpressions.Regex("LP5:(-?)\\d+");
            System.Text.RegularExpressions.Regex r6 = new System.Text.RegularExpressions.Regex("CC1:(-?)\\d+");
            System.Text.RegularExpressions.Regex r7 = new System.Text.RegularExpressions.Regex("CC2:(-?)\\d+");
            System.Text.RegularExpressions.Regex r8 = new System.Text.RegularExpressions.Regex("CC3:(-?)\\d+");
            System.Text.RegularExpressions.Regex r9 = new System.Text.RegularExpressions.Regex("CC4:(-?)\\d+");
            System.Text.RegularExpressions.Regex r10 = new System.Text.RegularExpressions.Regex("CC5:(-?)\\d+");

            byte[] inbuffer = null;

            //Queue<int> q1 = new Queue<int>();
            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#實現串口示波器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五家渠市| 娄烦县| 黔西县| 石台县| 永顺县| 逊克县| 镇赉县| 罗田县| 杨浦区| 兰西县| 乌鲁木齐市| 白河县| 晴隆县| 鸡西市| 武鸣县| 沁源县| 嘉荫县| 缙云县| 中宁县| 虎林市| 泰安市| 越西县| 华宁县| 鄯善县| 九龙城区| 乐都县| 西贡区| 饶河县| 东宁县| 海安县| 怀来县| 鄂托克前旗| 华容县| 彭泽县| 科技| 玛沁县| 榆树市| 秦安县| 丽水市| 富宁县| 辽宁省|