5 / 4 / 3
Регистрация: 22.11.2022
Сообщений: 146

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

11.04.2025, 14:38. Показов 3769. Ответов 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
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
11.04.2025, 16:47
Лучший ответ Сообщение было отмечено Bodden как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от wizard41 Посмотреть сообщение
А тут нет ее.. Т.е. сам порт "завис".
Возможно там какие-то хитрые настройки порта нужны. Ну и таймаут на запись можно попробовать установить.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 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
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
11.04.2025, 17:24
Bodden, это не решило проблему... Записи то в порт нет.
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
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
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
11.04.2025, 19:33
Bodden, если к порту подключился, значит он не занятый. А возникновение ошибки записи говорит уже о другой проблеме. Т.е. этот код не рабочий в целом, вернее, не выполняет возложенные на него функции.
0
2410 / 1942 / 764
Регистрация: 27.07.2012
Сообщений: 5,578
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru