Newsgroup: it.comp.lang.visual-basic
Titolo: MSCOMM

Ciao a tutti.
Devo utilizzae il controllo MSCOMM con un modem GSM.
A volte i comandi AT inviati alla porta arrivano "sporchi" e naturalmente
non vengono accettati e questo manda a monte la chiamata.
Come posso controllare l'uscita corretta del comando sulla porta e/o la
corretta interpretazione da parte del modem?
Grazie
Alessandro

Alex ha scritto nel messaggio ...

Vi sono solo 2 cause per avere dei comandi 'SPORCHI'.
1) Usi un cavo seriale PC-MODEM troppo lungo e/o che passa vicino a linee di
alta tensione.
2) La seriale non è impostata correttamente (strano, i modem capiscono da
soli come impostarsi)
Ne deduco che quanto ti accade è strano.
Il fatto è che sei tu che deduci che il modem riceve dati sporchi, solo
perchè magari non li interpreta.
Io penso che il modem li riceva correttamente, ma che sia lento ad
interpretare i comandi.
Prova a mettere una pausa di 1 - 2 secondi tra un comando ed il seguente, e
magari separarli, evitando di farli tutti in un solo comando AT.
Sempre il Mes
Ettore Maronese
http://www.maronese.com/mes
Sito Comune
http://www.murialdo.it/it_lang_vb

 wrote in message
8pqbfu$d8l$1...@pegasus.tiscalinet.it...

Ho già messo un timer per separare i vari comandi e dare il tempo al modem
per rispondere.
Ho settato la porta COm 9600,8,n,1 come segnalato dal manuale del modem GSM.
Volevo sapere se può avere senso provare ad intercettare le risposte del
modem (OK o ERROR)[e in che modo farlo!!!] prima di inviare il comando
successivo (impostando un timeout di attesa della risposta)
Grazie

successivo (impostando un timeout di attesa della risposta)
emmmm....
Svista mia, pensavo che già aspettavi la risposta del modem.
Si probabilmente è proprio quello, devi aspettare l'OK (o error) del modem
prima di
inviare altri comandi, e comunque, per sicurezza, attendete ancora (con una
pausa appunto di circa 1 secondo)  prima di inviare il comando successivo.
Modem GSM sul mercato non ce ne sono molti, io ho usato quello SIEMENS, usi
anche te quello?
Come strutturare il programma ? bhe io farei cosi':
Creerei un vettore con tutti i comandi da inviare al modem.
abiliterei un timer che processa i comandi, con cadenza di 500mSec.
Nel timer creerei un 'Automa' di questo tipo:
Dim vettore$()
Dim Stato$
Dim Indice%
dim RispostaModem$
sub AvviaModem()
    dim vettore$(3)
    Indice%=0
    RispostaModem$=""
    vettore$(0)="ATprimo"
    vettore$(1)="ATsecondo"
    vettore$(2)="ATterzo"
    vettore$(3)="ATquarto"
    Timer1.enabled = true
end sub
sub Timer1_timer()
    static cAttesa%
    select case Stato$
    case "Next"
        if indice=ubound( vettore ) then
            ' FINE
            Timer1.enabled = false
        else
            Seriale.output = vettore( indice )
            Stato$ = "AttesaRisposta"
        endif
    case "AttesaRisposta"
        If instr( RxModem$,"OK" & vbcrlf ) then
           RispostaModem$=""
           Stato$ = "AttesaNext"
           cAttesa% = 0
       endif
        If instr( RxModem$,"OK" & vbcrlf ) then
           Timer1.enabled = false
            msgbox "Errore!"
        endif
    case "AttesaNext"
        cAttesa%=cAttesa%+1
        if cAttesa%=2 then
            ' Avanti col prossimo comando
            indice=indice+1
            Stato$ = "Next"
       end if
    end select
end sub
sub mscomm1_OnComm()
    RispostaModem$=mscomm1.input
end sub
Ricordati di impostare la proprietà di mscomm  RThreshold=1 che non guasta
mai.
Questo è solo un esempio scritto AL VOLO, non sperare che con un
Copia-Incolla funzioni!



Lo sto usando anche io, cosa intendi per modem gsm???? cosa stai usando???
io ho potuto lavorare con i modem nokia gsm e in base ai modelli devi
impostare velocità diverse della com ex:
51xx/61xx usano 9600
7110 devi impostarlo come 19200 anche se realmente va a 14400
per altri che non ti sto qua ad elencare vedi le specifiche del prodotto
e cmq se vuoi intercettare Ok o error basta che richiami MSCOMM.Input
MSComm1.PortOpen = True
MSComm1.Output = Text1.Text & Chr(13)
Call Sleep(1000) <----------------- questa qui ti serve per diciamo ricevere
in modo pulito l'input della com
MsgBox MSComm1.Input
MSComm1.PortOpen = False
fammi sapere...