Condividi tramite

Problema con bilancia

Anonimo
2012-01-31T22:18:52+00:00

Salve a tutti, avrei un problema da risolvere:

ho la necessità di visualizzare il peso di una bilancia, in modo continuo, in una casella di testo di una maschera di Access.

Ho scaricato e provato l'esempio messo in pratica in db di G.Rancati http://www.riolab.org/index.php?option=com_content&view=article&id=140:comunicazione-con-la-porta-seriale-rs232&catid=46:access&Itemid=69. con il quale riesco a comunicare con la bilancia.

Queste le prove fatte:

seleziono la porta nell'apposita casella (COM1);

digito il comando "READ" nella casella TX;

premo il tasto "send" e nella casella RX di ricezione ricevo i seguenti dati:

ST,GS, 0,0 Kg     (questo a bilancia vuota)

US,GS, 59,0 Kg (ovviamente con un peso da Kg. 59)

PROBLEMA:

  1. Come faccio a vedere il peso nella casella  di ricezione in modo continuo senza premere pulsanti o scrivere del testo in casella? (attenzione, devo vedere il peso in tempo reale, o in refresh di qualche secondo, non una serie di pesi su multilinea!)
  2. E' possibile eliminare le scritte prima del peso? ( ST,GS,    -   US,GS,) e magari anche l'unità di misura (Kg.)?

Grazie in anticipo!

Cappuccio Domenico

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2012-02-03T09:10:41+00:00

Ciao Domenico,

il codice originale che scriveva il peso nella casella di testo Rx era questo:


Private Sub Form_Timer()

  txtReceive = txtReceive & Comm.Rx

End Sub


In sostanza la casella di testo txReceive, nell'evento Timer, impostato al caricamento della maschera a 300 millisecondi veniva valorizzata con il suo valore precedente + il valore ricevuto dalla risposta della bilancia

La modifica che ti ho proposto è questa:


Private Sub Form_Timer()

    Comm.Tx "Read" & vbCrLf

    txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

End Sub


Ovvero ho inserito l'invio del messaggio Read che precedentemente veniva fatto tramite l'evento click del pulsante P_Send, prima della valorizzazione della casella di testo (Comm.Tx "Read" & vbCrLf) e poi ho modificato la valorizzazione stessa in modo da eliminare il riferimento alle precedenti pesate ed estraendo dalla stringa ricevuta solo il peso (txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

Non ho modo di provare il codice ma sinceramente mi sembra strano che mantenga le pesate precedenti in quanto l'istruzione

txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

sovrascrive ogni volta il contenuto della casella di testo txtReceive.

Se proprio vuoi essere sicuro potresti fare così:


Private Sub Form_Timer()

    txtReceive = ""

    Comm.Tx "Read" & vbCrLf

    txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

End Sub

--- 

David

La risposta è stata utile?

0 commenti Nessun commento

9 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2012-02-07T21:16:03+00:00

    Salve David,

    ho provato la tua soluzione ma senza successo.

    Con questo codice funziona bene ma mi escono tutti i caratteri con il peso

    Private Sub Form_Timer()

         txtReceive = ""

        Comm.Tx "Read" & vbCrLf

        txtReceive = txtReceive & Comm.Rx

    End Sub

    Mentre con il codice da te postato mi va in errore di run time e se faccio il Debug mi esce la parte di codice

    txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

    evidenziato. Forse un problema nel conteggio dei caratteri non voluti nell'estrazione del peso?

    Non ho avuto la possibilità di verificare l'esatto numero di caratteri e di spazi contenuti nella stringa, come faccio a modificare, eventualmente,la parte di codice che mi fa l'estrazione del peso?

    Un'altra domanda:

    Ammesso che non si riesca ad estrarre il peso, visto che è l'unico elemento numerico, è possibile separare i caratteri alfabetici da quelli numerici e visualizzare solo quest'ultimi nella casella di testo?

    Grazie di tutto

    Cappuccio Domenico

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2012-02-02T22:42:54+00:00

    Ciao David

    ti volevo ringraziare per la risposta!

    Ti sarei grato se il codice fosse commentato perché, essendo io neofita di Access, mi piacerebbe capire ciò che faccio. Inoltre sembra che funzioni ma persiste il fatto che le pesate vengono accodate continuamente nella casella di testo. La mia esigenza è quella di vedere solo  l'ultima pesata effettuata. In pratica io invio il comando "READ" e nella casella RX ricevo il peso, al successivo invio del comando, deve prima svuotare la casella RX e poi visualizzare il peso e così via!

    Nella speranza che sia stato abbastanza chiaro ti saluto e ringrazio.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2012-02-01T09:30:37+00:00

    Ciao Domenico,

    non ho modo di provare quel file, ma vedendo il codice penso che puoi risolvere modificando l'evento Timer della maschera presente nell'esempio in questo modo:


    Private Sub Form_Timer()

        Comm.Tx "Read" & vbCrLf

        txtReceive = CInt(Mid(Comm.Rx, 7, Len(Comm.Rx) - 8))

    End Sub


    David

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2012-02-01T07:58:37+00:00

    Ciao Domenico,

    forse risolveresti con la gestione del timer?

    Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento