GSM модемът не отговаря 30 секунди (приложение за SMS)

Разработих приложение за SMS (изпращане/получаване на SMS чрез GSM модем), използвайки тази библиотека - http://www.scampers.org/steve/sms/libraries.htm

Имам таймер, който проверява получените съобщения на всеки 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 - четенето спира и обратното.

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

РЕДАКТИРАНЕ: Ако има някаква помощ, в момента, когато се случи грешка, dllhost.exe - COM сурогат се появява скоро в процесите.


person Alex    schedule 15.12.2011    source източник
comment
foreach (ShortMessage msg в съобщения) ... SMSPDULib.SMS sms = нов SMSPDULib.SMS(); ... SMSPDULib.SMS.Fetch(sms, реф съобщение); ... phoneNo = sms.PhoneNumber;   -  person Alex    schedule 10.12.2014


Отговори (1)


Модемът отговаря, че това е грешка в софтуера на Mr. Scampers. Използвахме софтуера GSMComm за изпращане на sms съобщения и преди, но поради тази причина написахме наша собствена gsm реализация. Което не мога да споделя, съжалявам за това. Пренесохме pygsm и оттогава не сме имали нито веднъж изчакване.

person albertjan    schedule 16.12.2011
comment
Благодаря за отговора, може да си прав. Изглежда, че все още не се поддържат всички устройства. Моят код работи добре със стар телефон Sony-Ericsson. Въпреки това, когато използвах по-стара версия на библиотеката (мисля, че 1.14 или 1.15) с устройството SE, се появи същият проблем, докато не актуализирах до по-нова библиотека. Сега имам GSM модем на Siemens и отново получавам тези грешки (с най-новата версия на библиотеката) и всички промени в изходния код, които правя, изглежда не помагат. Единственото нещо, което е объркващо е, че този пример работи добре codeproject.com/KB/cs/ SMS.aspx и кодът е много, много подобен на моя! - person Alex; 16.12.2011
comment
Ако никой друг не ми даде бързо заобиколно решение/намек/решение на моя проблем, ще трябва да започна от нулата :( - и ще маркирам това като приет отговор... - person Alex; 16.12.2011
comment
Вероятно се дължи на несъвместимостта с модема на Siemens. Ние също ги използваме. Странно е, че кодовият проект наистина работи. Виждали сме и много нестабилни резултати, при които 1 инструментът работеше през повечето време, а при 2 други не работеше изобщо. Може би защото codeproject-project използва .net версия 1. Може би можете да опитате да използвате pygsm в .net с ironpython. - person albertjan; 16.12.2011