Pergunta

Eu tenho um modem Wavecom Supremo GSM. Eu escrevi um aplicativo simples que se comunica com o modem e lê mensagens de texto recebidas.

Meu aplicativo consulta o modem para obter informações sobre o número de mensagens que armazena em sua memória e se o número for maior que 0, ele lê as mensagens de excluí-los da memória do modem. Eu consultar o modem dessa forma a cada poucos segundos.

Infelizmente, porém, a trava do modem a cada poucos minutos e não responde a qualquer comandos AT I enviar a ele. A única solução que eu vim com para desbloquear a comunicação é fechar a porta serial e abri-lo novamente. Então está tudo bem para próximos minutos após o qual porta serial tem de ser reaberto novamente quando os trava do modem.

Ele pode, naturalmente, ser culpa do modem, mas eu estou querendo saber se a maneira como me comunicar com ele é OK.

Firs de todos, eu abro a porta serial do modem para operações assíncronas. Então eu definir a estrutura DCB da seguinte forma:

GetCommState(PortHandle, DCB);
DCB.BaudRate := 115200;
DCB.ByteSize := 8;
DCB.Parity := NOPARITY;
DCB.StopBits := ONESTOPBIT;
DCB.EvtChar := #13;
SetCommState(PortHandle, DCB);
SetCommMask(PortHandle, EV_RXFLAG);

//the modem does not respond without setting these:
EscapeCommFunction(PortHandle, SETDTR);
EscapeCommFunction(PortHandle, SETRTS);

E, em seguida, tudo que faço é enviar comandos AT e esperar pela resposta de modem. Eu não uso qualquer controle de fluxo. Tudo o que faço é esperar para o evento comm, ler os dados a partir da fila da porta serial quando as responde modem e escrever alguns comandos AT seguido pelo caractere # 13 para consultar o modem para mensagens.

Eu acho que pode ter definido a estrutura DCB indevidamente, pois, como você pode ver, eu não modificar alguns de seus campos. Porque o meu conhecimento na porta serial não é o suficiente, eu não sei como definir o controle RTS e DTR (ativado / desativado / aperto de mão / alternar).

Se você notou alguns erros óbvios desta forma de lidar com modem, eu ficaria muito grato se você me explicou o que eu tinha feito de errado. Se está tudo bem, por outro lado, talvez você tem uma idéia do porquê os trava modem?

Agradecemos antecipadamente.

Foi útil?

Solução

Normalmente as configurações DCB são as primeiras coisas que você deve verificar. A documentação do modem deve mencionar as configurações da porta serial. Se não busca on-line com o número do modelo do seu modem.

Outras dicas

Certifique-se o controle de fluxo no Gerenciador de dispositivos, o modem, eo programa está tudo pronto a mesma. Eu não sei Delphi, mas acho que a DCB deve ter um campo "Flags". Tente defini-lo a 24 para o controle de fluxo de hardware.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top