PDA

View Full Version : Connessione Modem GSM - RS232 per trasferimento dati


wort85
22-02-2007, 14:27
Salve. mi rivolgo a tutta la comunity per cercare di risolvere il mio problema

Ho 2 bilance industriali dotate di RS232 vorrei trasferire i dati riguardanti le pesature (un file txt) attraverso un modem gsm (sempre con interfaccia rs232)
1 su ogni bilancia e uno a casa (totale 3 modem). Dove stanno le bilance non ce copertura telefonica (ecco perche affidarmi al gsm) la bilancia mi manda i dati appena gli invio il codice esadecimale 40H.

la domanda è questa. come faccio da visual basic ad effettuare la connessione prima ad una e poi all'altra e trasferire i dati?? questa operazione la dovrei fare ogni 12 ore...


la bilancia è inerte. ti manda un file txt solo se gli invii l'esadecimale 40H. io da casa attraverso il mio modem gsm vorrei connettermi al modem gsm che sta vicino alla bilancia e attraverso la porta seriale ke va dal modem alla bilancia inviargli 40H e la bilancia dovrebbe mandarmelo facendo il percorso opposto.

in poche parole vorrei usare questi due modem gsm come un "prolungamento virtuale" del cavo seriale. perchè sono diversi km lontano da queste bilance e non posso più recarmi sul posto a prendere i dati col mio portatile. capito il problema??? :mc:

per piacere aiutatemi!!! :muro:

grazie anticipatamente per eventuali risposte...

sottovento
23-02-2007, 00:51
Ciao,
premetto: non conosco il Visual Basic.
Cmq quello che farei e', per prima cosa (ancor prima di scrivere una riga di codice) verificare se tutto e' possibile e come procedere per scrivere il suddetto codice.

Per fare questo, utilizzerei Hyperterminal (Start->Accessori->Comunicazioni->Hyperterminal).
Per inciso, questa applicazione e' semplicemente una console che si premura si spedire via seriale/modem quanto tu scrivi sulla tastiera e scrive su schermo quanto ricevuto. E' il tool ideale per le tue prove.

Inoltre hai bisogno dei manuali dei dispositivi in gioco, o quanto meno dei comandi AT dei modem che intendi usare. Ebbene si, anche i modem GSM accettano i comandi AT.
La lista dei comandi AT (sia quelli standard che quelli adatti solo al modem in tuo possesso) li trovi sul manuale, oppure li puoi trovare in rete, googlando.

A questo punto, usando Hyperterminal, apri la PORTA SERIALE (please, non il modem), imposti i parametri di connessione (baud rate, bit di parita', bit di stop, lunghezza dati, handshake) cosi' come te li riporta il manuale. Nel caso tu non abbia i manuali, i parametri sono (quasi) facilmente ricavabili con un po' di tentativi.
Ricorda che alcuni modem hanno l'echo dei caratteri, altri no. Per echo dei caratteri si intende che quanto scrivi verra' rispedito indietro e pertanto lo vedrai comparire sullo schermo. In caso che l'echo sia disattivato, non vedrai comparire a schermo quello che scrivi.
Fortunatamente Hyperterminal ha la possibilita' di settare l'echo per conto suo, per cui puoi utilizzarlo nel caso intenda verificare quanto scrivi.

Una volta che hai visto il modem risponderti (con l'echo, ti basta digitare dei caratteri, altrimenti digita un comando AT che ti visualizzi, per esempio, lo stato del modem) puoi digitare il comando di connessione, in modo che il modem effetti il numero di telefono della bilancia.

Se tutto e' OK, allora ti troverai connesso. Una volta che sei connesso, digita il carattere avente il codice ascii 40H (decimale=64, corrisponde al carattere @ ) e, se tutto e' ok, nella finestra di hyperterminal vedrai comparire la lista delle pesate.
Puoi chiudere la connessione. Siccome, nel frattempo, avrai scritto tutti i passaggi ed i comandi ed i parametri su un foglietto di dimensioni A5 o inferiori, potrai utilizzare suddetto foglietto per scrivere l'applicazione con il linguaggio di tuo gradimento.

Come ti dicevo, non conosco Visual Basic, ma il controllo della porta seriale attraverso questo linguaggio e' un argomento che e' gia' stato discusso in questo forum. Probabilmente qualcuno ne sa qualcosa di piu'.

Ad ogni modo si rende necessario l'utilizzo di una DLL, che puoi scrivere in C/C++ e che probabilmente e' gia' presente in Internet, per avere a disposizione le primitive necessarie a pilotare la linea seriale.

Ultimo suggerimento: ricorda che le operazioni di connessione/richiesta/cancellazione:
- possono essere lente
- possono fallire
La tua interfaccia utente non deve rimanere bloccata fino al termine delle operazioni (i.e. usa i thread o un'architettura client/server o qualsiasi altro sistema che permetta quanto meno all'utente di premere un bottone "Cancella") e controlla sempre l'esito di tutto quello che fai. Scegli poi una buona strategia per tenere informato l'utente su quanto succede, poiche' magari e' necessario il suo intervento per sbloccare la situazione (per es. modem spento, numero occupato, impossibile raggiungere la bilancia e tutto il resto).

Spero ti possa essere d'aiuto