dmitya
Client
- Регистрация
- 10.08.2013
- Сообщения
- 179
- Благодарностей
- 78
- Баллы
- 28
Актуально!Все юсб свистки работают через АТ команды.
Не занимайтесь извратом с интерфейсами, процессами и прочим...
Вся работа c USB модемами только через АТ команды и ком порт !!!
Через C# снипет пробую отправить АТ команду в порт, команда уходит, но такое ощущение, что поток не завершился, поэтому порт не дает ответ.
При повторной посылке команды, она добавляется к предыдущей строчке и опять тишина. Такое ощущение, что порту не хватает какого-то ПИНКА, чтобы НАЧАТЬ обработку АТ команды.
Каждая АТ команда завершается "\r\n".
Потоки на COM-порт перехватываю прогой Free Device Monitoring Studio.
При этом, если запустить родную "управляющую" программу для модема, то все AT команды уходят в порт как надо, доходят до модема и приходит ответ.
Что делать и как все починить?
Тестируемый код:
Код:
// Инициализируем COM порт по-умолчанию ----
SerialPort serial_port = new SerialPort();
serial_port.BaudRate =9600;
serial_port.DataBits = 8;
serial_port.StopBits = StopBits.One;
serial_port.Parity = Parity.None;
serial_port.Handshake = Handshake.None;
serial_port.RtsEnable = true;
serial_port.ReadTimeout = 500;
serial_port.WriteTimeout = 500;
// ----
string response = String.Empty;
serial_port.PortName = "COM14"; //назначаем конкретный COM порт
if (!serial_port.IsOpen) { //если порт НЕ открыт, то...
try {
serial_port.Open(); //... пробуем его открыть
}
catch (Exception e) {return "упс!";}
if (serial_port.IsOpen) { //если всё окейно, то работаем
System.Threading.Thread.Sleep(1000); //па-ааауза
serial_port.Write("AT\r\n"); //отправляем простейшую AT команду
System.Threading.Thread.Sleep(1000);
try {
response = serial_port.ReadExisting(); //пробуем читать ответ порта
}
catch (Exception e) {return "упс №2"; }
if (response != String.Empty) {
project.Variables["response"].Value = response; //если ответ не нулевой, то передаем его в проект
}
serial_port.Close(); //закрываем порт
}
}