2011-12-15 2 views
3

Я разработал SMS приложение (отправка/получение SMS с помощью GSM модема) с помощью этой библиотеки - http://www.scampers.org/steve/sms/libraries.htmGSM модем не отвечает 30сек (SMS приложение)

У меня есть таймер, который проверяет полученные сообщения каждые 3 секунды. Проблема заключается в том, что каждые несколько минут я получаю эту ошибку:

*** 
at GsmComm.GsmCommunication.GsmPhone.GsmComm.GsmCommunication.IProtocol.ReceiveAnything(String pattern) 
at GsmComm.GsmCommunication.GsmPhone.GsmComm.GsmCommunication.IProtocol.ReceiveMultiple() 
at GsmComm.GsmCommunication.GsmPhone.GsmComm.GsmCommunication.IProtocol.ExecAndReceiveMultiple(String command) 
at GsmComm.GsmCommunication.GsmPhone.ListMessages(PhoneMessageStatus status) 
at GsmComm.GsmCommunication.GsmCommMain.ReadMessages(PhoneMessageStatus status, String storage) 
at SMS.BL.TimerCalls_rec.recProcessTimerEvent(Object sender, EventArgs e) in D:\Csharp\SMS GSM\SMS\BL\TimerCalls_rec.cs:line 57++++++++No data received from phone after waiting for 30000 ms. 

Это является частью этого кода:

try 
{ 
    // Read all SMS messages from the storage 
    if (CommSetting.comm.IsConnected()) 
    { 
     DecodedShortMessage[] messages = CommSetting.comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Phone); 

     foreach (DecodedShortMessage message in messages) 
     { 
      ReadMessage(message.Data); 

      //delete message 
      indexP = message.Index; 
      CommSetting.comm.DeleteMessage(indexP, PhoneStorageType.Phone); 
     } 
    } 
} 
catch (Exception err) 
{ 
    RIWL.log(err.StackTrace + "++++++++" + err.Message, "Error: "); 
} 

Это линия, где происходит ошибка:

DecodedShortMessage[] messages = CommSetting.comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Phone); 

Любые идеи, почему время от времени модем не отвечает? Отправка/получение сообщений выполняется отдельно. При отправке SMS - чтение остановлено, а наоборот.

Могу ли я сделать что-нибудь еще, чтобы проверить, занят ли последовательный порт?

EDIT: Если это какая-либо помощь, в момент возникновения ошибки dllhost.exe - COM Surrogate появляется вскоре в процессах.

+1

foreach (ShortMessage msg в сообщениях) ... SMSPDULib.SMS sms = новый SMSPDULib.SMS(); ... SMSPDULib.SMS.Fetch (sms, ref message); ... phoneNo = sms.PhoneNumber; – Alex

+0

Большое спасибо – fnc12

+0

приветствую вас ... – Alex

ответ

1

Модем отвечает, что это ошибка в программном обеспечении Mr. Scampers. Мы использовали программное обеспечение GSMComm для отправки сообщений sms раньше, но по этой причине мы написали собственную реализацию gsm. Который я не могу поделиться, я сожалею об этом. Мы портировали pygsm, и с тех пор у нас не было одного таймаута.

+0

Спасибо за ваш ответ, вы можете быть правы. Кажется, что не все устройства поддерживаются. Мой код отлично работает со старым телефоном Sony-Ericsson. Однако, когда я использовал более старую версию библиотеки (я думаю, 1.14 или 1.15) с устройством SE, возникла такая же проблема, пока я не обновился до новой библиотеки. Теперь у меня есть модем Siemens GSM, и я снова получаю эти ошибки (используя последнюю версию библиотеки), и все изменения исходного кода, которые я делаю, похоже, не помогают. Единственное, что сбивает с толку, это то, что этот пример работает отлично http://www.codeproject.com/KB/cs/SMS.aspx, и код очень, очень похож на мой! – Alex

+0

Если никто другой не дает мне быстрого обходного пути/подсказки/решения моей проблемы, мне придется начинать с нуля :(- и я отмечу это как принятый ответ ... – Alex

+0

Возможно, это связано с несовместимостью с Siemens Modem. Мы также используем их. Странно, что работа codeproject действительно работает. Мы также видели очень слабые результаты, которые у нас были 1, где инструмент работал большую часть времени, а на 2 других он вообще не работал. это потому, что проект codeproject использует .net версию 1. Возможно, вы можете попробовать использовать pygsm в .net с помощью ironpython. – albertjan