Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB6]Comunicare con porta Comm

    Ciao a tutti,
    premetto che è la prima volta che scrivo su questo forum, spero di trovare l'aiuto che sto cercando visto e considerato che come cercavo cadevo sempre su conversazioni di html.it

    In breve, è la primissima volta che uso VB quindi ho dovuto arrangiarmi parecchio per realizzare un programma che collega al computer tramite porta COM un lettore di badge,

    vi spiego in breve come funziona:

    una volta passata una tessera si rileva il codice dell'utente possessore della tessera
    (se non presente in db si presenta la scheda di aggiunta di un nuovo utente)

    quindi si presenta la scelta del mezzo da prelevare digitando un numero su tastierino numerico
    (la ricezione dei caratteri è inizialmente disattivata ma poi attivata solo se l'utente della tessera è riconosciuto, per poi essere ridisattivata dopo la pressione)

    una volta premuto il tasto corrispondente al mezzo si fa aprire una serratura e si aggiorna il db con i dati e gli orari
    ( attivando un relè presente sul lettore badge)

    quando questo utente sarà ritornato dal suo viaggio e passerà la tessera nel lettore si dovrà aggiornare il database mettendo che il mezzo è nuovamente disponibile e gli orari e la data di ritorno

    Il Problema, questo benedettissimo relè mi funziona soltanto quando chiamo la funzione dentro la funzione aggiungiPartenza, se invece la richiamo dentro aggiungiRitorno mi restituisce errore.... ho provato a collegare a un bottone la funzione apriSerratura e funziona sempre!
    Non sò più dove battere la testa!!

    Ho inserito di seguito il codice delle funzioni apriSerratura, aggiungiPartenza, aggiungiRitorno... se servissero altre funzioni o parti di queste ditemelo pure che le posto senza problemi!


    codice:
    Function apriSerratura()
    
    'MsgBox ("confermare")
    ' per aprire il relè va dato doppio perchè "bistabile"...
    MSComm1.Output = "*/R21"
    Sleep 1000
    MSComm1.Output = "*/R21"
    
    End Function
    
    Function aggiungiPartenza(mezzo As String)
        
       Dim dataOra As Date
       Dim orarioOra As Date
       orarioOra = TimeValue(Now)
       dataOra = DateValue(Now)
        
       stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
       stringa = stringa & "E:............Database.mdb"
    
        Set connessione = New adodb.Connection
        Set recordset = New adodb.recordset
    
        connessione.Open stringa
        recordset.Open "viaggi", connessione, 3, 3
    
        recordset.AddNew
             recordset("codice") = codice.Text
             recordset("mezzo") = mezzo
             recordset("dataPartenza") = dataOra
             recordset("orarioPartenza") = orarioOra
             recordset("dataRitorno") = "no"
             recordset("orarioRitorno") = "no"
             
        recordset.Update
    
    
    ' ora si prova a updare i vari campi
    
    'update del personale
        Set recordset2 = New adodb.recordset
        
        recordset2.Open "SELECT * FROM personale WHERE codice = '" & codice.Text & "'", connessione, 3, 3
        Do Until recordset2.EOF
          recordset2!fuori = "si"
          recordset2.Update
          recordset2.MoveNext
        Loop
        recordset2.Close
    
    
    'update dei mezzi
        Set recordset3 = New adodb.recordset
        
        recordset3.Open "SELECT * FROM mezzi WHERE idMezzo = '" & mezzo & "'", connessione, 3, 3
        Do Until recordset3.EOF
          recordset3!fuori = "si"
          recordset3.Update
          recordset3.MoveNext
        Loop
        recordset3.Close
        
        Dim nomeUtente As String
        nomeUtente = Replace$(titolo.Caption, "Ciao ", "")
        Sleep 3000
        'MsgBox (nomeUtente & " stai partendo con:" & mezzo & " il " & dataOra & " alle " & orarioOra)
    
        Call resetta
        
        Set connessione = Nothing
        Set recordset = Nothing
        Set recordset2 = Nothing
        Set recordset3 = Nothing
        
        Call apriSerratura
    
     
    End Function
    
    Function aggiungiRitorno()
    
       Dim dataOra As Date
       Dim orarioOra As Date
       Dim mezzo As String
       orarioOra = TimeValue(Now)
       dataOra = DateValue(Now)
        
       stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
       stringa = stringa & "E:............Database.mdb"
    
        
        Set connessione = New adodb.Connection
        Set recordset = New adodb.recordset
        
    ' mi prendo il viaggio di questo personale che è tornato e vedo che mezzo è, poi aggiorno il mezzo
        connessione.Open stringa
        recordset.Open "SELECT * FROM viaggi WHERE codice = '" & codice.Text & "' AND dataRitorno = 'no' ", connessione, 3, 3
        Do Until recordset.EOF
          mezzo = recordset("mezzo")
          ' mezzo lo prendo e gli altri due li aggiorno
          recordset!dataRitorno = dataOra
          recordset!orarioRitorno = orarioOra
          recordset.MoveNext
        Loop
        recordset.Close
        
    ' aggiorno il mezzo dicendo che è rientrato
        Set recordset4 = New adodb.recordset
        recordset4.Open "SELECT * FROM mezzi WHERE idMezzo = '" & mezzo & "'", connessione, 3, 3
        Do Until recordset4.EOF
          recordset4!fuori = "no"
          recordset4.MoveNext
        Loop
        recordset4.Close
        
    ' aggiorno il personale dicendo che è rientrato
        Set recordset3 = New adodb.recordset
        recordset3.Open "SELECT * FROM personale WHERE codice = '" & codice.Text & "'", connessione, 3, 3
        Do Until recordset3.EOF
          recordset3!fuori = "no"
          recordset3.MoveNext
        Loop
        recordset3.Close
        
        Dim nomeUtente As String
        nomeUtente = Replace$(titolo.Caption, "Ciao ", "")
        Sleep 3000
        'MsgBox (nomeUtente & " sei tornato con:" & mezzo & " il " & dataOra & " alle " & orarioOra)
    
        Call resetta
        
        Set connessione = Nothing
        Set recordset = Nothing
        Set recordset4 = Nothing
        Set recordset3 = Nothing
    
        Call apriSerratura
    
    
    End Function
    * ho modificato il percorso del file per non far riconoscere il nome del mio cliente ^^
    * ho inserito la versione di VB nel titolo
    www.pgmedia.it - Web - Grafica - Fotografia

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Comunicare con porta Comm

    Originariamente inviato da pgmedia
    ... mi restituisce errore ...
    Quale errore? E in quale linea di codice?


    P.S. Devi inserire la versione di VB nel titolo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Chiedo scusa.. ho provato a editare il titolo ma non so se ho messo bene!..

    Il badge nella modalità in cui lho impostato ogni 500 millisecondi invia la stringa:

    INSERISCI COMANDO

    finchè qualcosa non viene inviato o si passa una tessera:

    MEMORIZZAZIONE CODICE ->10122700<-CODICE GIA' PRESENTE
    INSERISCI COMANDO

    a questo punto so chi è che ha passato la tessera e posso attivare la ricezione di caratteri e faccio scegliere il mezzo, sicchè l'apertura del relè:

    INSERISCI COMANDO
    RELE21*
    INSERISCI COMANDO

    quando questo utente ritorna e si da il comando sull output "*/R21" per attivare il relè numero 2 per un secondo non funziona e mi dice:

    INSERISCI COMANDO
    COMANDO NON VALIDO
    INSERISCI COMANDO

    quando la funzione è la medesima di prima!!!
    www.pgmedia.it - Web - Grafica - Fotografia

  4. #4
    Ciao.
    Non ti ha chiesto di RIspiegare l'obbiettivo ..... ma di indicare il tipo di errore ed in quale riga del programma .... è ovvio che l'errore non sta nella funzione ApriSerratura ma, più probabilmente, nella Sub aggiungiRitorno.
    Facci sapere...
    Ciao

  5. #5
    l'errore non è dato da vb ma dal dispositivo lettore di badge.
    come ti ho scritto, al primo colpo funziona e infatti il relè si apre: RELE21*
    quando l'utente ritorna e ridò la stessa funziona per aprire il relè da errore: COMANDO NON VALIDO

    forse mi sono spiegato male??
    www.pgmedia.it - Web - Grafica - Fotografia

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.