Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146

Как определить занятость Serial Port?

11.04.2025, 14:38. Показов 3672. Ответов 30

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Столкнулся с интересной особенностью подключения к Serial Port.

У меня имеется несколько портов:



Если я подключаюсь к порту 3, который занят, то программа зависает. При чем, исключений нет.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.Diagnostics;
using System.IO.Ports;
 
namespace SerialPortTest
{
    internal class Program
    {
        private static SerialPort? _serialPort;
        
        static void Main(string[] args)
        {            
            _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
 
            try
            {
                if (!_serialPort.IsOpen)
                {
                    _serialPort.Open();
                }
            }
            catch (Exception ex)
            {
                _serialPort.Close();
                Console.WriteLine(ex.Message);
            }
 
            _serialPort.WriteLine("One_1");
 
            _serialPort.Close();
        }
   }
}
Если подключаюсь к COM9 виртуальному порту, то все работает.

Вопрос:
Как отлавливать "НЕ ПРАВИЛЬНЫЕ" подключения?

Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.04.2025, 14:38
Ответы с готовыми решениями:

Как засунуть serial port в wpf?
Добрый день! Ну вопрос в уже "озвучен"... как засунуть serial port в wpf? Как это сделать не могу...

Как принять 16 бит через Serial port?
Добрый день. Хочу осуществить следующую задачу: имеется МК, который оцифровывает некий сигнал....

Как отправить инструкцию в serial port?
как можно отправить инструкцию 0х03 в serialport? я отправку и принятие байтов написал. а вот как...

30
2406 / 1938 / 763
Регистрация: 27.07.2012
Сообщений: 5,576
11.04.2025, 16:47
Лучший ответ Сообщение было отмечено Bodden как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
А тут нет ее.. Т.е. сам порт "завис".
Возможно там какие-то хитрые настройки порта нужны. Ну и таймаут на запись можно попробовать установить.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3454 / 2775 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
11.04.2025, 16:54
John Prick, наверное. Тут только сам ТС может пробовать, у меня нет таких блю-туз портов..
Т.е. проблема как-бы не в коде, а в самих устройствах.
1
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146
11.04.2025, 17:16  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Ну и таймаут на запись можно попробовать установить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
using System.Diagnostics;
using System.IO.Ports;
 
namespace SerialPortTest
{
    internal class Program
    {
        private static SerialPort? _serialPort;
 
        static void Main(string[] args)
        {
 
            _serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
            _serialPort.WriteTimeout = 1000;
 
            try
            {
                _serialPort.Open();
                Console.WriteLine($"port {_serialPort.PortName} open!");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"port {_serialPort.PortName} busy!");
                Console.WriteLine(ex.Message);
            }
 
            try
            {
                if (_serialPort.IsOpen)
                {
                    _serialPort.WriteLine("Bro hello!");
                    Console.WriteLine("Write to port successfully!");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка записи в порт...");
            }
 
            Console.ReadLine();
            _serialPort?.Close();
  }
}


Оказалось проще чем думал.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3454 / 2775 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
11.04.2025, 17:24
Bodden, это не решило проблему... Записи то в порт нет.
0
2406 / 1938 / 763
Регистрация: 27.07.2012
Сообщений: 5,576
11.04.2025, 17:37
Bodden, выведите текст исключения, возможно там будет что-то полезное. Ну и само исключение надо посмотреть, нет ли вложенного.
0
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146
11.04.2025, 17:45  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
Bodden, выведите текст исключения, возможно там будет что-то полезное. Ну и само исключение надо посмотреть, нет ли вложенного.
C#
1
2
3
4
catch (Exception ex)
{
    Console.WriteLine("Ошибка записи в порт...", ex.Message, ex.StackTrace);
}
0
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146
11.04.2025, 17:47  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Bodden, это не решило проблему... Записи то в порт нет.
Это меня вполне устраивает, мне надо что бы он проскакивал занятый порт. Сейчас он это делает.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3454 / 2775 / 575
Регистрация: 04.09.2018
Сообщений: 8,734
Записей в блоге: 3
11.04.2025, 19:33
Bodden, если к порту подключился, значит он не занятый. А возникновение ошибки записи говорит уже о другой проблеме. Т.е. этот код не рабочий в целом, вернее, не выполняет возложенные на него функции.
0
2406 / 1938 / 763
Регистрация: 27.07.2012
Сообщений: 5,576
11.04.2025, 21:47
Bodden, так надо
C#
1
2
3
4
catch (Exception ex)
{
    Console.WriteLine("Ошибка записи в порт... {0} {1}", ex.Message, ex.InnerException?.Message);
}
0
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146
12.04.2025, 08:56  [ТС]
Цитата Сообщение от John Prick Посмотреть сообщение
так надо
C#
1
2
3
4
              catch (Exception ex)
            {
                Console.WriteLine("Ошибка записи в порт... {0} {1} {2}", ex.Message, ex.StackTrace, ex.InnerException?.Message);
            }
Таймаут
Миниатюры
Как определить занятость Serial Port?  
0
5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146
12.04.2025, 09:01  [ТС]
Это скрин

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.04.2025, 09:01

serial port
Здравствуйте. Использую стандартные классы .net для работы с ком портом. Работу с портом...

Принимаемые данные с датчика через Serial port преобразовать в RGB
Всем доброго времени суток! Стоит одна задача. Необходимо, получая строки с датчика цвета,...

Прием и передача строки Serial Port
Пишу прогу на подобии терминала серийного порта. Встала делема и похожего варианта кода я не нашел,...

Serial port для приложения под магазин win 8
Не могу найти Serial port при создании приложения под магазин win 8

Serial port. Изменение значений
Здравствуйте! Месяц назад я начал учить C#. Моя задача - считать значения с серийного порта, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru