Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Gestire risposte provenienti da Modem GSM

    Ciao a tutti.
    Sto creando un piccolo programmino in Visual Basic, utilizzando Visual Studio 2010, che dialoga con un modem gsm via porta seriale.
    La connessione funziona, riesco anche a dialogare correttamente con il modem e riesco anche a inviare gli sms ed mms.. però non riesco a gestirmi le risposte del modem... mi spiego meglio
    se io invio un comando tipo AT+CSQ il modem mi risponde con +CSQ 22,0 questo comando mi da come risposta il valore del segnale su una scala 0-30... ecco io riesco a visualizzare a video (in una console dedicata) la risposta però vorrei gestirla nel senso che vorrei fare una cosa del genere
    [
    codice:
    IF (risposta = "+CSQ 22,0") Then 
    label1.text = "Segnale buono"
    ELSE
     label1.text = "Segnale schifo"
     END IF
    E' solo un esempio ma è per farvi capire qual'è il mio intento... spero di essere stato chiaro
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  2. #2
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537

    Re: Gestire risposte provenienti da Modem GSM

    Originariamente inviato da ClaudioMalorgio
    Ciao a tutti.
    Sto creando un piccolo programmino in Visual Basic, utilizzando Visual Studio 2010, che dialoga con un modem gsm via porta seriale.
    La connessione funziona, riesco anche a dialogare correttamente con il modem e riesco anche a inviare gli sms ed mms.. però non riesco a gestirmi le risposte del modem... mi spiego meglio
    se io invio un comando tipo AT+CSQ il modem mi risponde con +CSQ 22,0 questo comando mi da come risposta il valore del segnale su una scala 0-30... ecco io riesco a visualizzare a video (in una console dedicata) la risposta però vorrei gestirla nel senso che vorrei fare una cosa del genere
    [
    codice:
    IF (risposta = "+CSQ 22,0") Then 
    label1.text = "Segnale buono"
    ELSE
     label1.text = "Segnale schifo"
     END IF
    E' solo un esempio ma è per farvi capire qual'è il mio intento... spero di essere stato chiaro

    se vuoi fare una cosa molto "light" usa l'evento DataReceived della porta.

  3. #3
    Cioè dentro l'evento scrivo il mio codice, per esempio quello di controllo del segnale?
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  4. #4
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Originariamente inviato da ClaudioMalorgio
    Cioè dentro l'evento scrivo il mio codice, per esempio quello di controllo del segnale?
    quell'evento ti avvisa quando il device scrive dati sulla porta, poi li leggi e li usi come meglio credi.

    se tu scrivi sulla porta un comando AT, il device ti risponde, a quel punto scatta l'evento e tu leggi dalla porta la risposta.

  5. #5
    UTilizzo già l'evento per scrivere in console, però come potrei fare per gestirlo questo è il codice
    codice:
    Private Sub Main_srlport_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Main_srlport.DataReceived
    ReceivedText(Main_srlport.ReadExisting()) 
    End Sub
    Dove receivedtext è questa
    codice:
    Public Sub ReceivedText(ByVal [text] As String) 
    If Me.Console_rtbox.InvokeRequired Then 
    Dim x As New SetTextCallback(AddressOf ReceivedText) 
    Me.Invoke(x, New Object() {(text)}) 
    Else 
    Me.Console_rtbox.Text &= [text]
    End If 
    End Sub
    Ma se io appunto ora volessi, per esempio, creare un icona che varia in base allo stato del segnale?
    Cioè creo un background worker con un loop di comandi "AT+CSQ" e cosi in base alla risposta cambia lo stato del segnale visibile all'utente...
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  6. #6
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Originariamente inviato da ClaudioMalorgio
    UTilizzo già l'evento per scrivere in console, però come potrei fare per gestirlo questo è il codice
    codice:
    Private Sub Main_srlport_DataReceived(sender As System.Object, e As System.IO.Ports.SerialDataReceivedEventArgs) Handles Main_srlport.DataReceived
    ReceivedText(Main_srlport.ReadExisting()) 
    End Sub
    Dove receivedtext è questa
    codice:
    Public Sub ReceivedText(ByVal [text] As String) 
    If Me.Console_rtbox.InvokeRequired Then 
    Dim x As New SetTextCallback(AddressOf ReceivedText) 
    Me.Invoke(x, New Object() {(text)}) 
    Else 
    Me.Console_rtbox.Text &= [text]
    End If 
    End Sub
    Ma se io appunto ora volessi, per esempio, creare un icona che varia in base allo stato del segnale?
    Cioè creo un background worker con un loop di comandi "AT+CSQ" e cosi in base alla risposta cambia lo stato del segnale visibile all'utente...
    credo che a questo punto che il problema non abbia nulla a che vedere con il titolo del post, nel senso che a te serve sapere come, data una certa stringa piuttosto che un'altra, cambi un immagine (o uno stato).

    comunque... se ti arriva una risposta come quella postata (potrebbe cambiare da device a device ma immaginiamo "+CSQ 22,0"), estrai il valore (22,0) e lo confronti con dei range di valori, i quali ognuno stabilisce un immagine (immagina 5 immagini che indicano da 0 tacchette fino a 4), una volta localizzato il renge corretto, mostri l'immagine relativa.

  7. #7
    Si appunto, utilizzo un modem digicom e i suoi comandi AT, quello del segnale è solo un esempio..
    per ora ho cambiato la funzione ReceivedText in modo tale da avere un return del testo che mi arriva dalla seriale, ora mi manca solo il tassello del confronto ... cioè ho tutta la stringa di risposta (per esempio "AT+CSQ +CSQ 22,0 OK") è solo che ora devo capire come gestirla nel senso che il primo pezzo posso ignorarlo "AT+CSQ" il secondo mi serve il "22,0" e il terzo pezzo "OK" mi serve per stabilire se il dialogo è avvenuto correttamente ...
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  8. #8
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,537
    Originariamente inviato da ClaudioMalorgio
    Si appunto, utilizzo un modem digicom e i suoi comandi AT, quello del segnale è solo un esempio..
    per ora ho cambiato la funzione ReceivedText in modo tale da avere un return del testo che mi arriva dalla seriale, ora mi manca solo il tassello del confronto ... cioè ho tutta la stringa di risposta (per esempio "AT+CSQ +CSQ 22,0 OK") è solo che ora devo capire come gestirla nel senso che il primo pezzo posso ignorarlo "AT+CSQ" il secondo mi serve il "22,0" e il terzo pezzo "OK" mi serve per stabilire se il dialogo è avvenuto correttamente ...
    splitti li spazi...
    ma il problema è che vuoi implementare tanti comandi?
    se si tratta di pochi comandi potresti pensare di elaborarli singolarmente trattoli in maniera specifica uno per uno, tipo in questo caso facendo uno split degli spazi ecc., facendo così il codice si allunga (scrivi in maniera "procedurale"), ma è semplice implementarli nel codice, se invece si tratta di tanti comandi, magari che possono cambiare (tipo da device a device) e che magari devono essere lanciati da diverse fonti simultaneamente (tipo web o servizio windows ecc.) allora il discorso cambia... diventerebbe ingestibile, quindi dovresti incominciare a pensarlo diversamente.

    in un mio progetto, i comandi li ho resi indipendenti, nel senso che svolgevano il loro compito per la quale erano stati progettati (accodandosi), indipendemente dal codice che li lanciava (come capsule sparate, facevano botta e risposta da soli ), restituendo o chiamando una specifica funzione di risposta quando terminato.

    ad esempio in questo caso, una capsula avrebbe aperto la porta, scritto il comando, ottenuto la risposta, gestito eventuali errori, elaborato la funzione, e, in maniera asincrona, fornito il nome dell'immagine corretta al codice che ha lanciato il comando, tutto senza che il codice che la lancia interagisca con la com.

    ma forse non ho ancora capito quale sia il tuo problema in questo caso mi scuso e ti chiedo lumi...

  9. #9
    Il tuo metodo è molto più comodo da utilizzare... il problema è che è il mio primo progetto che dialoga con porte seriali
    principalmente dovrei poter mandare sms, mms, controllare lo stato del segnale poi se mi viene in mente qualcosa da aggiungere lo posso fare. E' un progetto personale perciò posso aggiornarlo come e quando mi pare. Solo che non ho idea di come fare .. per ora riesco solo a stampare a video le risposte e ad inviare un sms.. utilizzo un buttone che al click fa un serialport.write("comando") ... niente di che
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

  10. #10
    Potrei vedere le tue capsule e rilanciare con dei background worker?
    Programmatore - Consulenza informatica -
    Web Design - Professionista I.T.
    ---------------------------------------
    http://www.malorgio.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.