Inviare codice "0A" (hex) a shell

di darioV il
66 risposte

66 Risposte - Pagina 3

  • Punti di vista ... per chi ha a che fare giornalmente con CPU e hardware, è molto più comodo l'esadecimale.
  • 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
  • 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 ???)
  • 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
  • Non sono riuscito a trovare il modo di usare il comando, manca sempre qualche paramentro
  • 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
  • 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
  • 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
  • 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
  • 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
  • Si sono quelle
    forse il protocollo utilizzato è il modbus
  • 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)
  • 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