Member 13806674 Ответов: 1

Считывание нескольких значений данных из последовательного порта с помощью C#


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;
using System.IO.Ports;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        string[] portlar = SerialPort.GetPortNames();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (string port in portlar)
            {
                comboBox1.Items.Add(port);
                comboBox1.SelectedIndex = 0;

            }
            comboBox2.Items.Add("4800");
            comboBox2.Items.Add("9600");
            comboBox2.SelectedIndex = 1;
            label2.Text = "Not connected";


        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                string sonuc = serialPort1.ReadLine();
                string[] pot = sonuc.Split(',');
                label2.Text = sonuc + " ";
                textBox1.Text = pot[0];
                textBox2.Text = pot[1];
                textBox3.Text = pot[2];
               textBox4.Text = pot[3];
                serialPort1.DiscardInBuffer();

                int b;
                int d;
                int f;
                int g;

                bool result = Int32.TryParse(pot[0], out b);
                bool answer = Int32.TryParse(pot[1], out d);
                bool result1 = Int32.TryParse(pot[2], out f);
                bool answer1 = Int32.TryParse(pot[3], out g);

               
                if (result)
                {
                    if (b < 224)
                    {

                        button3.BackColor = Color.Red;
                        label6.Text = " OCCUPIED";
                       
                    }
                    else
                    {
                        button3.BackColor = Color.Lime;
                        label6.Text = " AVAILABLE";
                    }
                }

                if (answer)
                {
                    if (d < 224)
                    {

                        button4.BackColor = Color.Red;
                        label8.Text = " OCCUPIED";
                        
                    }
                    else
                    {
                        button4.BackColor = Color.Lime;
                        label8.Text = " AVAILABLE";
                        
                    }
                }
                if (result1)
                {
                    if (f < 400)
                    {

                        button5.BackColor = Color.Red;
                        label10.Text = " OCCUPIED";
                    }
                    else
                    {
                        button5.BackColor = Color.Lime;
                        label10.Text = " AVAILABLE";

                    }
                }

               if (answer1)
                {
                    if (g < 400)
                    {

                        button6.BackColor = Color.Red;
                        label12.Text = " OCCUPIED";

                    }
                    else
                    {
                        button6.BackColor = Color.Lime;
                        label12.Text = "AVAILABLE";

                    }
                }

            }


            catch (Exception ex) {
                MessageBox.Show(ex.Message);
                timer1.Stop();

                
            
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
            if (serialPort1.IsOpen == false) {
                if(comboBox1.Text==" ")

                return;
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt16(comboBox2.Text);
                try
                {
                    serialPort1.Open();
                    label2.Text = "baglanti acik ";


                }
                catch (Exception hata) { 
                
                    MessageBox.Show("Hata:"+ hata.Message);
                     }
            }

          


            else
            {
                label2.Text = "baglanti kapali";

            }

            }

        private void button2_Click(object sender, EventArgs e)
        {
        timer1.Stop();
        serialPort1.DiscardInBuffer();

            if (serialPort1.IsOpen==true)

            {
            serialPort1.Close();
            label2.Text="baglanti kapali";
            
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (serialPort1.IsOpen == true)
            {
                serialPort1.Close();
                

            }

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void label4_Click(object sender, EventArgs e)
        {

        }

        private void button6_Click(object sender, EventArgs e)
        {

        }
        }
    }


Что я уже пробовал:

я написал свой код на C#, и у меня возникли проблемы, потому что он очень медленно реагирует на считывание значений с датчиков для использования в моем проекте c#.Когда я выполняю свой код, он очень медленный, и если я пытаюсь остановить его с помощью кнопки 2, он не работает.Есть ли способ, которым я могу улучшить свою руку кода скорость

0x01AA

Остановите чтение последовательного порта с помощью таймера. Вы можете посмотреть здесь: Последовательная связь в C# для начинающих[^]

Кстати: сравнение булевых значений типа "thisBool == true" или "thisBool == false" выглядит как недостаток знаний о том, что такое булевые значения ;)

Member 13806674

Большое вам спасибо, что это сработало.

0x01AA

Добро пожаловать, рад, что это помогло

1 Ответов

Рейтинг:
4

OriginalGriff

Ответ только для удаления из очереди без ответа: решается OP / 0x01AA


0x01AA

Спасибо за уборку ;)