Inviare codice "0A" (hex) a shell

di il
66 risposte

Inviare codice "0A" (hex) a shell

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

66 Risposte

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

    Hai provato con 'A' (al posto di '0A') ?
  • Re: Inviare codice "0A" (hex) a shell

    Ho fatto una prova per curiosità e non funziona con A mentre con 0A accetta 0.

    Funziona solo con i valori numerici da 0 a 9 interpretandoli come hex ma non con i valori da A ad F (neanche minuscoli).

    Mi sembra un bug del tool.
  • Re: Inviare codice "0A" (hex) a shell

    Dalla descrizione stai procedendo con tre successive operazioni:
    Programma Access -> Shell di Windows -> Applicativo usbrelay.exe
    ove possono essere effettuate delle conversioni per accettare i valori esadecimali.
    Io procederei per gradi, mi concentrerei sull'applicativo usbrelay.exe cercando di fornire il valore esadecimale che attivi il decimo relè.
    Per attivare l'applicativo (usbrelay.exe) agire con una semplice interfaccia a linea di comandi (come COMMAND o CMD in Windows) ove si dispone della classica console dei comandi come nel più antico DOS.
    Proverei quindi il comando, fornendo il parametro con varie sintassi, quindi oltre a quanto proposto da Max.Riservo anche:
    
    C:\DB_Access\usbrelay.exe -c:4 -r:1#0x0A
    
    Da tenere in considerare che il parametro della riga di comando è sempre di un tipo stringa/carattere e dipende dal programma, in quanto è questo che accetta il dato (definendone il formato e il tipo previsto quando l'argomento viene accettato).
    Si può ipotizzare che gli sviluppatori dell'applicativo abbiano seguito una sintassi che poteva essere fornita tramite i comandi DOS/Windows e quindi ne ricalchino le modalità.
    Ad esempio nel comando SET i valori numerici sono numeri decimali, a meno che non siano preceduti dal prefisso 0x, che indica i numeri esadecimali, o 0, per i numeri ottali.
    Il valore 0x12 corrisponde quindi al valore decimale 18 e al valore ottale 022 (la notazione ottale può creare confusione: i valori 08 e 09 non sono numeri validi, perché 8 e 9 non sono cifre ottali valide).
    Giusto per dire, un altro comando per accettare i valori di tastiera, in esadecimale, richiede 0x4 per Ctrl-D o 0x6 per Ctrl-F.
    https://docs.microsoft.com/it-it/windows-server/administration/windows-commands/cmd

    Determinato la corretta sintassi per abilitare il decimo rele tramite la console cercherei adattarla alla Shell ed infine porla all'interno di Access.

    Magari leggi questi link che forniscono qualche elemento a corredo:
    https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/format-hex?view=powershell-7
    https://stackoverflow.com/questions/388490/how-to-use-unicode-characters-in-windows-command-line
    https://stackoverflow.com/questions/47750732/write-hex-values-to-file-in-windows-batch
    https://social.msdn.microsoft.com/Forums/windows/en-US/6e7fe1f2-2139-478c-bc71-a463c49f377b/virtual-key-code-mystery-what-am-i-missing-here?forum=vblanguage
  • Re: Inviare codice "0A" (hex) a shell

    darioV ha scritto:


    ... devo comandare da access dei relè su delle schede RS485 da 8 relè cadauna....
    Come fai a comandare il relè n°9?
    Sei sicuro che le schede (RS485) NON abbiano bisogno di essere indirizzate ?
    Nel caso non funzionasse quanto suggerito da Willy puoi provare ad indicare modello delle schede e come queste sono connesse al PC?
  • Re: Inviare codice "0A" (hex) a shell

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

    Sto provando quanto suggerito da willy ma mal momento non ho trovato il modo
  • Re: Inviare codice "0A" (hex) a shell

    Se stiamo parlando di questo prodotto : https://info.kmtronic.com/control-kmtronic-usb-relays-using-command-prompt-bin-files.html
    Hai provato ad usare questi comandi :
    
    FF0101
    
    Per attivare il relè n° 1
    
    FF0100
    
    Per disattivare il relè n° 1
    
    FF0A01
    
    Per attivare il relè n° 10
    e così via ...
  • Re: Inviare codice "0A" (hex) a shell

    Al momento ho trovato questa soluzione, dato che non riesco a trovare la sintassi corretta.
    Utilizzando bei file .bat riesco a pilotare tutti i relè, l'inconveniente è che devo avere 12 file .bat per gestire ON e OFF dei relè da 0A a 0F, ma soprattutto quando richiamo il file si apre e si chiude la finestra terminale, e non è "bellissimo"
    il comando diventa
    file_bat\R10_ON.bat
    e il file è così scritto
    @echo off
    cls
    echo FF0A01>on.txt
    certutil -decodehex off.txt off.bin
    certutil -decodehex on.txt on.bin
    MODE COM4:9600,n,8,1
    copy on.bin \\.\com4 /b
    echo "                          Relay is  ON"
    del on.bin
    del off.bin
    del on.txt
    del off.txt
  • Re: Inviare codice "0A" (hex) a shell

    Bene ... allora vuol dire che ho letto il manuale
    Per curiosità prova :
    
    usbrelay.exe -c:4 -r:FF0A01
    
    per attivare il relè 10.
  • Re: Inviare codice "0A" (hex) a shell

    Oppure :
    
    usbrelay.exe -c:4 -r:FF0A#1
    
  • Re: Inviare codice "0A" (hex) a shell

    max.riservo ha scritto:


    Se stiamo parlando di questo prodotto : https://info.kmtronic.com/control-kmtronic-usb-relays-using-command-prompt-bin-files.html
    si le schede sono quelle
    Hai provato ad usare questi comandi :
    
    FF0101
    
    da cmd il comando FF0101 non produce risultato ma mi mostra l'help che cita
    
    USB Relay commandline utility v1.1
    --------------------------------------------------
    
    Usage: USBRelay.exe [arguments]
    
    Required arguments:
    -c:n         COM to use.
    -r:n#n       Relay number, State. (0=Off, 1=On)
    
    Optional arguments:
    -q           Quiet. No stack trace but 'ERROR' will written to console.
    -b:text      On sucessful broadcast - output this text. (default is nothing)
    -h           This help screen.
    mi pare di capire che non posso passargli FF0101
  • Re: Inviare codice "0A" (hex) a shell

    Non ho altri suggerimenti se non quello di provare a vedere come trasforma il comando che invia alla seriale :
    
    ' crea un file di testo per accendere il relè 10 (0A)
    echo FF0A01>on.txt
    ' trasforma il file di testo nel comando che invia alla seriale
    certutil -decodehex on.txt on.bin
    
    Prova ad analizzare cosa contiene il file on.bin (se vuoi condividi sul forum) ...
  • Re: Inviare codice "0A" (hex) a shell

    Non funziona ne
    
    usbrelay.exe -c:4 -r:FF0A#1
    
    
    usbrelay.exe -c:4 -r:FF0A01
    
    [/quote]
  • Re: Inviare codice "0A" (hex) a shell

    Un attimo ... io ho provato con il tool da linea di comando, saltando shell, vba e altro ...

    La sintassi del comando prevede che lo switch -r la seguente sintassi

    -r:<numero relè>#0 per disattivare
    -r:<numero relè>#1 per attivare

    e ho notato che <numero relè> è inteso in esadecimale ma non accetta altro che cifre (non accetta lettere da A a F).
    Quindi mi sembra che il tool non sia utilizzabile.
Devi accedere o registrarti per scrivere nel forum
66 risposte