Последовательный порт и GSM роутер - C#
Формулировка задачи:
Приветствую всех!, помогите пожалуйста с такой проблемой.
Имеется GSM роутер, соединенный с ПК через COMпорт 3.
Необходимо сделать так, чтобы по прибытии SMS сообщения на GSM роутер, оно сразу же считывалось ПК.
Была идея сделать подобную функцию через таймер:
таймер каждую секунду генерирует событие, которое обрабатывается путем инициализации чтения памяти GSM роутера. К сожалению практика показала, что такой подход серьезно отнимает ресурсы ПК, медленный и неэффективный. Поэтому, возникла здравая мысль запускать процедуру чтения памяти только когда GSM роутер подает соответствующую команду о прибытии нового СМС.
Возникла идея реализовать этот простой механизм через цикл:
По факту функция просто не выводит информацию.
В Hyperterminale данная процедура сработала правильно:
Скажите, возможно ли как-то решить эту проблему без применения таймера?
Заранее спасибо!
public string ListenModem(SerialPort sPort) { string sText = null; do { System.Threading.Thread.Sleep(100); sText = ReadPort(sPort); } while (sText == null); return sText; } private string ReadPort(SerialPort sPort) { //подождем 150 милисекунд System.Threading.Thread.Sleep(150); string res = sPort.ReadExisting(); return res; }
Решение задачи: «Последовательный порт и GSM роутер»
textual
Листинг программы
private void button1_Click(object sender, EventArgs e) { GSMRouter Modem = new GSMRouter(); serialPort.BaudRate = 9600; serialPort.Parity = Parity.None; serialPort.PortName = "COM3"; serialPort.StopBits = StopBits.One; serialPort.DataBits = 8; serialPort.Open(); Modem.TuneRouter(serialPort); textSignal.Text = Modem.ListenModem(serialPort); } Class GSMRouter { public string ListenModem(SerialPort sPort) { if (sPort.IsOpen) { string Res = ReadPort(sPort); ; while (Res == null) { System.Threading.Thread.Sleep(100); Res = ReadPort(sPort); } return Res; } else { return "Ошибка открытия порта"; } } private string ReadPort(SerialPort sPort) { //подождем 500 милисекунд System.Threading.Thread.Sleep(150); string res = sPort.ReadExisting(); if (res.Length != 0) { return res; } else return null; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д