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