На сегодняшний день популярными портами в новых компьютерах стали USB, а СОМ – порт почти полностью вышел из эксплуатации. Тем не менее, устройства использующие СОМ – порт не остались в стороне. Они поддерживаются производителями и не потеряли популярности на производствах. Где нужен обмен информацией между различными современными устройствами (сбор информации, контроль управления).
В недалеком прошлом для работы с последовательными портами (COM) в среде .Net 1.1, необходимо было использовать либо «Windows API», либо управление из сторонних библиотек. В среде .Net 2.0 (и в более поздних версиях .NET) компания Microsoft реализовала весь необходимый функционал для работы с последовательным портом включением класса «SerialPort» как части пространства имен «System.IO.Ports».
Для получения списка всех COM-портов компьютера можно воспользоваться статическим методом «GetPortNames» класса «SerialPort» и оператора «foreach». Этот оператор обрабатывает все элементы массива имен последовательных портов для текущего компьютера в том порядке, в котором его возвращает метод «GetPortNames».
foreach (string str in System.IO.Ports.SerialPort.GetPortNames())
В результате этого вызова при обработке массива в переменной «str» будет содержаться имя COM-порта локальной машины. Перед проверкой конкретного COM-порта нужно сначала создать объект класса SerialPort с указанием имени порта.
System.IO.Ports.SerialPort Port; Port = new System.IO.Ports.SerialPort(str);
Для проверки состояния порта, необходимо воспользоваться методом «SerialPort.Open», данный метод открывает новое соединение последовательного порта. После открытия нового соединения необходимо воспользоваться свойством «SerialPort.IsOpen», возвращающее значение, указывающее состояние объекта SerialPort — открыт или закрыт. После проверки состояния необходимо закрыть соединение, вызвав метод «Close».
Port.Close();
Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта следующие элементы управления:
- System.Windows.Forms.Button button1 – элемент управления для запуска процесса поиска открытых портов;
- System.Windows.Forms.ListBox listBox1 – элемент управления для вывода имен открытых портов.
У вас получится приведенный ниже пример.
Сделайте двойной клик левой клавишей мыши по элементу управления «button1». Вы перейдете в редактор кода с автоматической установкой курсора в созданном методе «button1_Click», события «Click», возникающего при нажатии на кнопку. Добавьте в тело данного метода приведенный ниже листинг, вызова метода проверки открытых портов компьютера.
//Выполняем очистку listBox1
listBox1.Items.Clear();
//Если порты найдены, то
//программа выдаст сообщение
if (IsPortOpen())
MessageBox.Show("Найдены открытые порты!",
"Сканирование портов",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
else
MessageBox.Show("Открытые порты не найдены!",
"Сканирование портов",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
Так же добавьте в листинг главной формы сам метод.
public bool IsPortOpen()
{
//Создаем переменную для возврата
//состояния получения портов.
//true в случае успешного получения
//false если порты не найдены.
bool available = false;
//Представляет ресурс последовательного порта.
System.IO.Ports.SerialPort Port;
//Выполняем проход по массиву имен
//последовательных портов для текущего компьютера
//которые возвращает функция SerialPort.GetPortNames().
foreach (string str in System.IO.Ports.SerialPort.GetPortNames())
{
try
{
Port = new System.IO.Ports.SerialPort(str);
//Открываем новое соединение последовательного порта.
Port.Open();
//Выполняем проверку полученного порта
//true, если последовательный порт открыт, в противном случае — false.
//Значение по умолчанию — false.
if (Port.IsOpen)
{
//Если порт открыт то добавляем его в listBox
listBox1.Items.Add(str);
//Уничтожаем внутренний объект System.IO.Stream.
Port.Close();
//возвращаем состояние получения портов
available = true;
}
}
//Ловим все ошибки и отображаем, что открытых портов не найдено
catch (Exception ex)
{
MessageBox.Show(ex.ToString(), "Ошибка при сканировании!",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//возвращаем состояние получения портов
return available;
}
Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма вашего проекта, нажмите кнопку «Сканировать». После завершения сканирования, вы получите сообщение с информацией о результате, а так же список открытых портов, если такие были найдены.
В случае если COM-порт уже используется другим процессом, то при попытке его открыть вы получите исключение: Невозможно открыть com порт. Чтобы определить, кто именно держит порт, нужно воспользоваться утилитой для мониторинга ресурсов процессов.
0.00 (0%) 0 votes









