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

Опубликовано lamazavr - вс, 10/12/2014 - 18:18
Body

Я уже как то писал о работе с последовательным портом компьютера на языке 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 нужно задать какие-то параметры?

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.