Inviare codice "0A" (hex) a shell

di il
66 risposte

66 Risposte - Pagina 3

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

    Punti di vista ... per chi ha a che fare giornalmente con CPU e hardware, è molto più comodo l'esadecimale.
  • Re: Inviare codice "0A" (hex) a shell

    Ciao a tutti, proseguo con un'evoluzione.
    Vorrei riuscire a leggere lo stato dei relè della scheda per sapere quali relè sono ON.
    Con un programmino test.exe fornito dal produttore della scheda invio il comando
    FF A1 00
    e ottengo in risposta lo stato dei relè scritto così
    FF A1 00 00 00 00 00 00 00 00 00 
    (i relè in quel momento sono tutti OFF)
    Come posso fare per memorizzare questa risposta?
    grazie
  • 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
    
    Oregon ti ha fornito lo spunto per scrivere direttamente sulla seriale (Put)
    Magari, dopo che hai scritto e se il dispositivo DEVE rispondere potresti provare a leggere dalla seriale (Get ???)
  • Re: Inviare codice "0A" (hex) a shell

    Quanto suggerito da Oregon funziona benissimo.
    Magari, dopo che hai scritto e se il dispositivo DEVE rispondere potresti provare a leggere dalla seriale (Get ???)
    Il dispositivo risponde al comando
    FF A1 00
    perchè vedo il led Tx sulla scheda che fa un lampeggio dopo aver ricevuto il comando (Rx)
    Penso anch'io che invece di Put bisognerebbe usare Get ma non sono riuscito a trovare il modo
  • Re: Inviare codice "0A" (hex) a shell

    Non sono riuscito a trovare il modo di usare il comando, manca sempre qualche paramentro
  • Re: Inviare codice "0A" (hex) a shell

    Google : quickbasic get command -> https://www.qbasic.net/en/reference/qb11/Statement/GET-001.htm

    Non dire che non capisci l'inglese però
  • Re: Inviare codice "0A" (hex) a shell

    Ho dato un'occhiata all'esempio e al momento non ci ho capito molto.
    Domani che avrò la possibilità di testarlo sul PC collegato alle schede provo
  • Re: Inviare codice "0A" (hex) a shell

    DarioV,
    se vuoi capirci di più, sulla sintassi e l'impiego della istruzione GET, per il file COM, applicabile in VBA (ma presente sin dalle prime versioni del Basic, con il DOS) puoi esaminare la documentazione della versione da te impiegata ed al contempo dare una occhiata alle varianti che si sono susseguite dal linguaggio originale.
    Ti cito alcuni esempi:
    https://stackoverflow.com/questions/569698/what-is-the-best-way-to-access-a-serial-port-from-vba
    https://www.tek-tips.com/viewthread.cfm?qid=119896

    https://archive.org/details/IBMBASICAV1.10Manual/page/n163/mode/2up
    http://chiclassiccomp.org/docs/content/computing/Microsoft/Microsoft_Basic_8086Xenix_Reference.pdf
  • Re: Inviare codice "0A" (hex) a shell

    max.riservo ha scritto:


    Google : quickbasic get command -> https://www.qbasic.net/en/reference/qb11/Statement/GET-001.htm
    Da quello che capisco, non avendo mai studiato l'inglese, è che nel comando
    GET #1, 1, MyClass
    MyClass contiene la risposta mentre il secondo parametro(, 1,) con accesso "For Binary" non serve
    ho provato ad interpretare scrivendo
    
    Sub qqq()
    Dim MyClass As String 'TestRecord
    Open "COM4: 9600,N,8,1" For Binary As #1
    Get #1, , MyClass
    Debug.Print "myclass "; MyClass
    Close #1
    End Sub
    non ottengo nessun risultato
  • Re: Inviare codice "0A" (hex) a shell

    Ma ce l'hai una documentazione sul protocollo? Quanti byte ti dovrebbe restituire e in base a quali byte inviati? Possibile andare a casaccio?

    In ogni caso quel codice devi correggerlo ... inizializzazione la stringa

    Dim rec As String
    rec=Space$(11)

    e poi non puoi usare una semplice print per i dati binari perché non vedresti nulla. Devi prendere byte per byte e trasformare i valori ascii in valori hex visualizzabili
  • Re: Inviare codice "0A" (hex) a shell

    Ti ringrazio della risposta.
    Ma ce l'hai una documentazione sul protocollo? Quanti byte ti dovrebbe restituire e in base a quali byte inviati? Possibile andare a casaccio?
    non ho nulla
    Devi prendere byte per byte e trasformare i valori ascii in valori hex visualizzabili
    non ho la più pallida idea di cosa stai parlando
  • Re: Inviare codice "0A" (hex) a shell

    Andiamo bene... sono queste le informazioni sulla scheda che usi

    https://info.kmtronic.com/kmtronic-rs485-relays-commands.html

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

    Si sono quelle
    forse il protocollo utilizzato è il modbus
  • Re: Inviare codice "0A" (hex) a shell

    Intendo il protocollo applicativo.

    Quindi per ottenere lo status tu dovresti inviare il comando

    FF A1 00

    e ricevere

    FF A1 xx xx xx xx xx xx xx xx

    in cui xx può essere 00 per relè OFF e 01 per relé ON (8 valori non 9 come avevi detto prima tu)
  • Re: Inviare codice "0A" (hex) a shell

    Direi di provare con questo codice
    
        Dim i As Integer
        Dim res As String
        
        Open "COM4:9600,N,8,1" For Binary As #1
        Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H1)
        res = String$(10, 0)
        Get #1, , res
        Close #1
        For i = 1 To Len(res)
            Print Hex$(Asc(Mid(res, i, 1))); " ";
        Next i
        Print
    
Devi accedere o registrarti per scrivere nel forum
66 risposte