#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с. А вообще, в подобных ситуациях, когда не получается опросить устройство по СОМ порту и у вас есть родная программа опроса, запускать снифер СОМ-порта и смотреть какие основные и дополнительные параметры порта устанавливает эта программа.
Комментариев нет:
Отправить комментарий