#c_sharp #com_порт
На столе лежит Gsm модуль RX 101 от "Телеофис", хочу пообщаться с ним из кода, но
не получается.
Так же есть две программы для диагностики модуля, которые успешно связываются с модулем
и успешно общаются по AT протоколу. То есть модуль рабочий.
А теперь что происходит когда я пытаюсь обратиться к модулю из кода - ничего!
То есть лампочка RX мигает, но ответа нет. При чем после закрытия программы которая
успешно общалась с модулем, я могу из кода обращаться и модуль отвечает. Вот такая
магия. Я полагаю что программы открывают порт с какими-то параметрами которые я не
указываю в коде, но понятия не имею какие.
Вот код который пытается связаться с модулем:
using System;
using System.IO.Ports;
using System.Threading;
namespace ConsoleApplication
{
internal class Program
{
private static void Main( string[] args )
{
var comPort = new SerialPort( "COM4", 115200, Parity.None, 8, StopBits.One );
comPort.Open();
if ( !comPort.IsOpen ) throw new Exception();
comPort.DataReceived += ComPortOnDataReceived; //событие, кстати, тоже
не генерируется
comPort.WriteLine( "AT \r\n" );
Thread.Sleep( 3000 );
var response = comPort.ReadExisting();
Console.WriteLine( string.IsNullOrWhiteSpace( response ) ? "null" : response );
comPort.DataReceived -= ComPortOnDataReceived;
comPort.Close();
}
private static void ComPortOnDataReceived( object sender,
SerialDataReceivedEventArgs serialDataReceivedEventArgs )
{
Console.WriteLine( "received" );
}
}
}
Ответы
Ответ 1
В данном случае необходимо установить кроме основных параметров инициализации СОМ порта еще и дополнительные comPort.Handshake = Handshake.XOnXOff; так как по умолчанию этот параметр установлен в None. Более детально про этот параметр можно посмотреть здесь. Так же иногда могут возникать ситуации когда устройство долго отвечает на запрос(дольше стандартных значений). В таких случаях нужно изменять время ответа (искать в документации или экспериментировать с увеличением значений) comPort.ReadTimeout = 500; Я встречал устройства у которых время ответа по умолчанию равнялось 10с. А вообще, в подобных ситуациях, когда не получается опросить устройство по СОМ порту и у вас есть родная программа опроса, запускать снифер СОМ-порта и смотреть какие основные и дополнительные параметры порта устанавливает эта программа.
Комментариев нет:
Отправить комментарий