Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VB2005: controllo modem

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

VB2005: controllo modem

Postdi maxmula » 25/05/08 15:20

Ciao a tutti,
sto scrivendo un piccolo programma che dovrebbe inviare comandi ad un modem, leggendo poi le risposte dalla porta seriale.

Il codice che fa questo è il seguente:

Codice: Seleziona tutto
        Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort("COM3", 115200, IO.Ports.Parity.None, 8, 1)
             com1.Write(COMANDO & vbCrLf)

            ESITO = ""
            N = 0
            TEMPO = TIMEOUT
            While N = 0 And TEMPO > 0
                WAIT(1)
                N = com1.BytesToRead
                TEMPO = TEMPO - 1
            End While

             For X = 1 To N
                ESITO = ESITO & Chr(com1.ReadByte)
            Next
            com1.Dispose
        End Using


Se uso questo programma con un modem che ho in ufficio (Siemens MC35) funziona alla grande: ESITO contiene l'eco del comando, i due caratteri di ritorno a capo (0D/0A) e la stringa con la risposta del modem.

Se provo ad usarlo per comandare il modem di casa (USR Sportster 56K)... ESITO contiene solo l'eco del comando ed i caratteri 0D/0A... e nulla più.
Naturalmente, se provo ad utilizzare HyperTerminal, tutto funziona regolarmente su entrambi i modem.

Secondo voi cosa ho dimenticato?

Grazie in anticipo,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Sponsor
 

Re: VB2005: controllo modem

Postdi hydra » 27/05/08 07:05

Hai da qualche parte il protocollo usato per la comunicazione? Se con HT va deve andare anche con VB, se non hai i dati sperati allora mi viene da pensare che la stringa che invii non è corretta.
Avatar utente
hydra
Moderatore
 
Post: 7002
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Re: VB2005: controllo modem

Postdi maxmula » 27/05/08 22:30

Il comando al moden dovrebbe essere corretto: anche il più semplice "AT" (con ritorno a capo) mi viene riconosciuto dal Siemens e non dallo USR...

Mi viene da pensare che la differenza stia nei settaggi dell'emulazione: in HT vedo che l'emulazione è impostata su automatica (ANSI) con A Capo automatico nelle impostazioni ASCII.
In VB, però, non ho visto niente che mi faccia agire su questo...

Grazie per la risposta,
MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34

Re: VB2005: controllo modem

Postdi hydra » 28/05/08 07:37

Se non ricordo male di default la proprietà NewLine del serialport è impostata a #10 e mi pare che lo invii automaticamente a ogni write (almeno così dice MSDN e mi pare di aver avuto problemi del genere in passato). Prova a inviare solamente #13 come finestringa, magari un modem gli passa sopra invece l'altro no.
Avatar utente
hydra
Moderatore
 
Post: 7002
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Re: VB2005: controllo modem

Postdi maxmula » 27/07/08 00:06

RIspolvero questo ormai antico post per aggiornare la situazione: dopo mesi di "fare altro" sono finalmente riuscito a tornare a questo mio piccolo progetto e... sono finalmente riuscito a comporre il numero.

Non dall'USR, in realtà (non l'ho qui con me), ma dal modem integrato nel mio portatile (un "Agere Softmodem"), che però presentava gli stessi sintomi.

Ebbene, dopo aver fatto un po' di indagini ed essermi munito del programma Free Serial Port Monitor (http://www.serial-port-monitor.com/Download/free-serial-port-monitor.exe) ho potuto afferrare i seguenti due concetti:

1) per chiamare via telefono bisogna mettere il modem in modo DTR (cosa che ovviamente Hyperterminal fa...)
La cosa è facilmente risolvibile:

Codice: Seleziona tutto
            Using com1 As IO.Ports.SerialPort = My.Computer.Ports.OpenSerialPort(PARAMS(0), 115200, IO.Ports.Parity.None, 8, 1)
                    com1.DtrEnable = True


2) Il Siemens che ho in ufficio è un modem GSM/GPRS, invece l'USR a l'Agere sono modem analogici. Se a questi ultimi mando il comando ATD... non sanno che farsene! Loro hanno bisogno di sapere se la chiamata deve avvenite a toni o ad impulsi...

Col seguente comando tutto funziona:
Codice: Seleziona tutto
ATDT(NUMERO)


Beh, è già un passo avanti... :) mi sa che presto mi risentirete per un altro quesito... La strada è ancora lunga!


MAx
Avatar utente
maxmula
Utente Senior
 
Post: 965
Iscritto il: 18/08/04 18:28
Località: N44°59'45 E09°00'34


Torna a Programmazione


Topic correlati a "VB2005: controllo modem":


Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti

cron