Inviare codice "0A" (hex) a shell

di il
66 risposte

66 Risposte - Pagina 2

  • Re: Inviare codice "0A" (hex) a shell

    A me rimane un dubbio.
    I moduli sono da 8 canali, RS485 (almeno così pare), quindi ciascun modulo dovrebbe avere un suo indirizzo (nella documentazione effettivamente compaiono i dip switch per configurarlo).
    Io continuo a non comprendere come mai NON sia presente (necessario) l'indirizzo del modulo nel comando .....
  • Re: Inviare codice "0A" (hex) a shell

    darioV ha scritto:


    Ciao a tutti, devo comandare da access dei relè su delle schede RS485 da 8 relè cadauna.
    la gestione dei singoli relè in realtà viene fatta dal programma usbrelay.exe al quale invio tramite shell la seguente stringa
    Shell("C:\DB_Access\usbrelay.exe -c:4 -r:1#0")

    dove il numero del relè è identificato dal paramentro -r:x dove x è il numero esadecimale del relè
    I relè vengono attivati/disattivati correttamente fino al n° 9 ma quando devo comandare il relè 10 ovviamente mi attiva/disattiva il n° 16.
    Dovrei passargli come numero "0A" ma se lo faccio non ottengo errori ma il relè non viene comandato.
    Sapete indicarmi come passare quel parametro alla shell?
    Grazie
    Hai provato ad aggiungere "&H0A" dove lo Zero può anche essere soppresso... perchè ho il dubbio che il programma usbrelay.exe non riesca a capire il VarType da applicare... se gli anteponi il [&H] forse dovrebbe/potrebbe capire che è un HEX...? (ovviamente il linguaggio di sviluppo condiziona questa ipotesi) magari basta la [HA]... prova un po.

    Da quanto ho capito il 1° è il Numero del Relè forse da apassare in HEX, il secondo lo Stato (0/1)
    
    -r:HA#1
    ...
    -r:&HA#1
  • Re: Inviare codice "0A" (hex) a shell

    Al momento ho aggirato il problema utilizzando i file .bat lanciati da WshShell così da non far comparire la finestra della riga di comando.
    Set WshShell = CreateObject("WScript.Shell")
    WshShell.Run Chr(34) & "C:\DB_Access\file_bat\R10_ON.bat" & Chr(34), 0
    Set WshShell = Nothing
    il file R10_ON.bat
    @echo off
    cls
    echo FF0A00>off.txt
    certutil -decodehex off.txt off.bin
    certutil -decodehex on.txt on.bin
    MODE COM4:9600,n,8,1
    copy off.bin \\.\com4/b
    echo "                          Relay is OFF"
    del on.bin
    del off.bin
    del on.txt
    del off.txt
    
    Se non troviamo il modo per inviare 0A alla scheda userò questo sistema
  • Re: Inviare codice "0A" (hex) a shell

    Hai provato ad aggiungere "&H0A" dove lo Zero può anche essere soppresso... perchè ho il dubbio che il programma usbrelay.exe non riesca a capire il VarType da applicare... se gli anteponi il [&H] forse dovrebbe/potrebbe capire che è un HEX...? (ovviamente il linguaggio di sviluppo condiziona questa ipotesi) magari basta la [HA]... prova un po.

    Da quanto ho capito il 1° è il Numero del Relè forse da apassare in HEX, il secondo lo Stato (0/1)
    
    -r:HA#1
    ...
    -r:&HA#1
    dunque ho provato con
    
    -r:&H0A#1
    -r:H0A@1
    -r:HA#1
    
    senza risultato
  • Re: Inviare codice "0A" (hex) a shell

    Apparentemente questa non da errore, che poi funzioni è tutto da vedere
    
    C:\Users\Desktop\USBRelay\USBRelay.exe -c:5 -r:0A#0
  • Re: Inviare codice "0A" (hex) a shell

    @Alex ha scritto:


    Apparentemente questa non da errore, che poi funzioni è tutto da vedere
    
    C:\Users\Desktop\USBRelay\USBRelay.exe -c:5 -r:0A#0
    purtroppo non funziona
  • Re: Inviare codice "0A" (hex) a shell

    Dato che il tool ha un bug prova da VBA con
    
    Open "COM4:9600,N,8,1" For Binary As #1
       Put #1, , Chr(&HFF) & Chr(&H0A) & Chr(&H01)
    Close #1
    
  • Re: Inviare codice "0A" (hex) a shell

    oregon ha scritto:


    Dato che il tool ha un bug prova da VBA con
    
    Open "COM4:9600,N,8,1" For Binary As #1
       Put #1, , Chr(&HFF) & Chr(&H0A) & Chr(&H01)
    Close #1
    
    FUNZIONA!!!!!!

    E' anche molto più veloce rispetto alla soluzione che avevo trovato

    grazie
  • Re: Inviare codice "0A" (hex) a shell

    darioV ha scritto:


    oregon ha scritto:


    Dato che il tool ha un bug prova da VBA con
    
    Open "COM4:9600,N,8,1" For Binary As #1
       Put #1, , Chr(&HFF) & Chr(&H0A) & Chr(&H01)
    Close #1
    
    grazie
    Di nulla
  • Re: Inviare codice "0A" (hex) a shell

    Ciao riattivo la discussione per un problema che si manifesta con la comunicazione con la porta COM4.
    Il DB di Access deve essere attivo 24 su 24, 7 su 7 per gestire delle luci e delle resistenze.
    In base al variare di parametri da parte dell'utente, vengono comandati i relè delle luci e delle resistenze.
    I relè delle resistenze però vengono anche comandati automaticamente in base a un ciclo perpetuo di controllo dell'orario ogni x minuti
    Ho riscontrato durante questi giorni di test che a volte, dopo alcune ore senza eseguire nessuna variazione di alcun parametro le schede a volte non rispondono più all'invio dei comandi.
    Se lancio un tool per la comunicazione con la porta, la apro e la chiudo, le schede riprendono a rispondere.

    Altra cosa; è possibile leggere lo stato dei relè delle varie schede per sapere quali sono attivati?
    da terminale il comando
    FF A1 00 (A2,A3)
    che produce esempio
    FF A1 00 01 00 00 00 01 00 00 
    grazie
  • Re: Inviare codice "0A" (hex) a shell

    darioV ha scritto:


    Ho riscontrato durante questi giorni di test che a volte, dopo alcune ore senza eseguire nessuna variazione di alcun parametro le schede a volte non rispondono più all'invio dei comandi.
    al momento ho risolto richiamando il programma usbrelay.exe all'attivazione di una particolare maschera inviando il comando di apertura e chiusura del relè 1
    Shell ("C:\DB_Access\usbrelay.exe -c:4 -r:1#1")
    Shell ("C:\DB_Access\usbrelay.exe -c:4 -r:1#0")

    oregon ha scritto:


    Dato che il tool ha un bug prova da VBA con
    
    Open "COM4:9600,N,8,1" For Binary As #1
       Put #1, , Chr(&HFF) & Chr(&H0A) & Chr(&H01)
    Close #1
    
    Quanto suggerito da Oregon è possibile renderlo "dinamico"?
    intendo riuscire a inviare il comando a n relè il cui numero posso recuperarlo da un recordset tramite un ciclo for - next tipo
    
    Open "COM4:9600,N,8,1" For Binary As #1
    Do
    For i = 1 To 14
    	If i = rst(0) Then
                    Debug.Print rst(0) & " acceso"
                    Put #1, , Chr(&HFF) & Chr(&H & rst(0)) & Chr(&H1)
                    rst.MoveNext
            Else
                    Debug.Print i & " spento"
                    Put #1, , Chr(&HFF) & Chr(&H & rst(0)) & Chr(&H0)
    	End If
    Next i
    Loop Until rstRLOFF.EOF
    esempio il recordset conterrà 2,7,11 quindi dovrei inviare &H2, &H7 e &H11 ma non trovo il modo per farlo, ho provato con apici e virgolette in vari modi ma senza risultato
  • Re: Inviare codice "0A" (hex) a shell

    Il valore va bene anche in decimale ... l'esadecimale è solo una rappresentazione e l'avevo usato per la costante ma non è necessario

    Chr(rst(0))
  • Re: Inviare codice "0A" (hex) a shell

    oregon ha scritto:


    Il valore va bene anche in decimale ... l'esadecimale è solo una rappresentazione e l'avevo usato per la costante ma non è necessario

    Chr(rst(0))
    perfetto funziona, grazie
  • Re: Inviare codice "0A" (hex) a shell

    Se non vuoi usare l'esadecimale puoi scrivere

    Put #1, , Chr(255) & Chr(rst(0)) & Chr(1)
  • Re: Inviare codice "0A" (hex) a shell

    oregon ha scritto:


    Se non vuoi usare l'esadecimale puoi scrivere

    Put #1, , Chr(255) & Chr(rst(0)) & Chr(1)
    direi che è più comodo
Devi accedere o registrarti per scrivere nel forum
66 risposte