Работа с COM портом средствами C#

Я уже как то писал о работе с последовательным портом компьютера на языке C++. И не то чтобы я не любил этот язык, или мне было лень написать на пару строк больше кода.. но стал посматривать в сторону C#. Есть устойчивое впечатление, что язык станет развиваться семимильными шагами.

Решил написать утилиту, которая будет мониторить регистры устройства на Modbus линии. А для этого конечно нужно наладить связь с этим самым устройством.
Решено было писать на C#.

Для работы понадобиться указать, что будем использовать класс для работы с портами.

using System.IO.Ports;

Теперь можно использовать класс SerialPort. Писать будем прямо в Main созданный нам средой.
Сразу же посмотрим какие есть порты в системе и предложим выбрать.

                        SerialPort port;
                        // получаем список доступных портов 
                        string[] ports = SerialPort.GetPortNames();

                        Console.WriteLine("Выберите порт:");

                        // выводим список портов
                        for (int i=0; i<ports.Length;i++)
                        {
                                Console.WriteLine("[" + i.ToString() + "] "+ports[i].ToString());
                        }

Создаем объект порта и считываем с консоли номер, который выбрал пользователь.

                        port = new SerialPort ();

                        // читаем номер из консоли
                        string n = Console.ReadLine ();
                        int num = int.Parse (n);

Наполняем класс работы с com портом настройками и пытаемся открыть.

try
{
        // настройки порта
        port.PortName = ports [num];
        port.BaudRate = 256000;
        port.DataBits = 8;
        port.Parity = System.IO.Ports.Parity.None;
        port.StopBits = System.IO.Ports.StopBits.One;
        port.ReadTimeout = 1000;
        port.WriteTimeout = 1000;
        port.Open ();
} catch(Exception e) {
        Console.WriteLine ("ERROR: невозможно открыть порт:" + e.ToString ());
        return;
}

Пишем в порт строку и закрываем порт.

port.Write ("Hello from C#");

port.Close ();

Получается вот так:

Для чтения можно пользоваться методом Read(), который принимает в качестве параметров буфер и количество данных, которые нужно принять.
Вот собственно и все. Есть еще сигналы о наличии данных и прочие плюшки. Хорошая справка по этому поводу на msdn.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. Никита

    Здравствуйте. Сделал все как в статье, почему-то в Terminal порт не выдает сообщение "Hello from C#". Подскажите, что я делаю не так. Может быть в настройке Terminal нужно задать какие-то параметры?

    Ответить