Auto connect to COM port

190
18 октября 2018, 06:30

Есть вот такой код для автоматического подключение к Com порту. На Com порт подаются 16 битные числа с заголовком, я проверяю, если имеется нужный мне заголовок, то это мой порт. Но что-то не работает.

    namespace _645747
{
    public partial class MainWindow : Window
    {
        SerialPort serialPort1 = new SerialPort();
        string foundCOM_PORT { set; get; }

        public MainWindow()
        {
            InitializeComponent();
            serialPort1.StopBits = StopBits.One;
            serialPort1.DataBits = 8;
            serialPort1.BaudRate = 19200;
            serialPort1.Parity = Parity.None;
        }
        void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            var port = (SerialPort)sender;
            int buferSize = port.BytesToRead;
            foreach (string portname in SerialPort.GetPortNames())//цикл, диапазон = все ком порты подключенные к компу
            {
                try
                {
                    Console.WriteLine("Operation - " + portname + " OPEN");
                    this.serialPort1.PortName = portname;//берём название порта
                    this.serialPort1.Open();//открываем его
                    for (int i = 0; i < buferSize; ++i)
                    {
                        //  читаем по одному байту
                        byte bt = (byte)port.ReadByte();
                        //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
                        if (0x20 == bt)
                        {
                            MessageBox.Show("oooooooo");
                            foundCOM_PORT = portname;//сохраняем порт
                        }
                        System.Threading.Thread.Sleep(1000);//останавливаем поток программы
                        if (foundCOM_PORT != null)//если нашли порт, то выходим из цикла
                            break;
                    }
                }
                catch//если мы не смогли открыть порт(порт занят и мы словили ошибку) цикл continue
                {
                    continue;
                }
                finally
                {
                    //при любом событии (ошибки или нашли порт) закрыть порт
                    //далее в основном потоке используя foundCOM_PORT программа зайдёт в порт (иначе порт будет занят и получим ошибку)
                    this.serialPort1.Close();
                }
            }

        }
    }
}
Answer 1
namespace _645747
{
public partial class MainWindow : Window
{
    SerialPort serialPort1 = new SerialPort();
    string foundCOM_PORT { set; get; }
    public static bool F = false;

    public MainWindow()
    {
        InitializeComponent();
        serialPort1.StopBits = StopBits.One;
        serialPort1.DataBits = 8;
        serialPort1.BaudRate = 19200;
        serialPort1.Parity = Parity.None;
        serialPort1.DataReceived+= SerialPort_DataReceived;
    }
    private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        var port = (SerialPort)sender;
        int buferSize = port.BytesToRead;
        for (int i = 0; i < buferSize; ++i)
        {
            //  читаем по одному байту
            byte bt = (byte)port.ReadByte();
            //  если встретили начало кадра (0xFF) - начинаем запись в _bufer
            if (0x20 == bt)
            {
                F = true;
                MessageBox.Show("oooooooo");
            }
        }
    }
    private void Buf(object sender, RoutedEventArgs e)
    {
        foreach (string portname in SerialPort.GetPortNames())//цикл, диапазон = все ком порты подключенные к компу
        {
            try
            {
                Console.WriteLine("Operation - " + portname + " OPEN");
                this.serialPort1.PortName = portname;//берём название порта
                this.serialPort1.Open();//открываем его
                System.Threading.Thread.Sleep(1000);//останавливаем поток программы
                if (F == true)
                {
                    foundCOM_PORT = portname;//сохраняем порт
                }
                if (foundCOM_PORT != null)//если нашли порт, то выходим из цикла
                    break;
            }
            catch//если мы не смогли открыть порт(порт занят и мы словили ошибку) цикл continue
            {
                continue;
            }
            finally
            {
                //при любом событии (ошибки или нашли порт) закрыть порт
                //далее в основном потоке используя foundCOM_PORT программа зайдёт в порт (иначе порт будет занят и получим ошибку)
                this.serialPort1.Close();
            }
        }
    }
}
}
READ ALSO
Локализация сообщений DataAnnotations по умолчанию

Локализация сообщений DataAnnotations по умолчанию

Как заменить сообщения DataAnnotations по умолчанию

179
Как перезаписать посты в кастомном типа записей в обратном порядке?

Как перезаписать посты в кастомном типа записей в обратном порядке?

Мне необходимо перезаписать записи из кастомного типа записей в обратном порядкеЯ пробовал добавить такой код в файл functions

178
php download file не записывая его на сервер

php download file не записывая его на сервер

Можно ли сделать так, чтобы PHP сформировал содержимое небольшого файла ( к примеру CSV) массивом или просто строкой, но не записывал его на диск...

146
Установка и начало работы с DOCTRINE 2

Установка и начало работы с DOCTRINE 2

Установил я через compouser doctrine 2

153