Inviare codice "0A" (hex) a shell

di il
66 risposte

66 Risposte - Pagina 4

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

    Ok dopodomani torno dove sono le schede e provo
    Grazie
  • Re: Inviare codice "0A" (hex) a shell

    Ciao ho provato il codice
    ho dovuto sostituire i Print con Debug.Print perché mi generava un "errore di compilazione - Metodo non valido senza un oggetto adatto"
    quando do Esegui all'istruzione
    Get #1, , res
    access si pianta e non risponde più, devo terminare Access per sbloccare la situazione
  • Re: Inviare codice "0A" (hex) a shell

    In questo https://stackoverflow.com/questions/569698/what-is-the-best-way-to-access-a-serial-port-from-vba trovi un esempio di scrittura / lettura dalla seriale tramite VBA.
    Temo purtroppo che non ti aiuterà però (è in inglese e probabilmente prevede un minimo di conoscenza/capacità di programmazione).
  • Re: Inviare codice "0A" (hex) a shell

    darioV ha scritto:


    ho dovuto sostituire i Print con Debug.Print perché mi generava un "errore di compilazione - Metodo non valido senza un oggetto adatto"
    Certo ... io provavo da un Form (di VB6) ... puoi mettere Debug o visualizzare in un qualsiasi Textbox
    quando do Esegui all'istruzione
    Get #1, , res
    access si pianta e non risponde più, devo terminare Access per sbloccare la situazione
    Questo succede perché la scheda non trasmettere tutti i dati richiesti o ne trasmette in numero inferiore.
    Forse trasmette solamente gli 8 byte di status, senza i due byte di header, quindi riprova con

    res = String$(8, 0)

    Se ancora non va, prova a leggere un solo byte con

    res = String$(1, 0)
  • Re: Inviare codice "0A" (hex) a shell

    Ho provato a leggere 1 solo byte
    res = String$(1, 0)
    il cursore gira, gira, gira e... unica uscita termina processo
  • Re: Inviare codice "0A" (hex) a shell

    Allora la scheda non ti sta trasmettendo nulla o i parametri impostati sonosbagliati
  • Re: Inviare codice "0A" (hex) a shell

    Ho provato con questo codice
    
    Open "COM4: 9600,N,8,1" For Binary As #1
    Put #1, , Chr(&HFF) & Chr(&H1) & Chr(&H1)
    Put #1, , Chr(&HFF) & Chr(&H1) & Chr(&H0)
    res = String$(1, 0)
    Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H0)
    res = String$(1, 0)
    Get #1, , res
    Debug.Print "risposta " & res
    Close #1
    
    quando si arriva all'istruzione
    Get #1, , res
    ottengo l'errore run-time 458 "La variabile utilizza un tipo di automazione non supportato i VisualBasic"
    con l'invio di un'istruzione Put sulla scheda lampeggia il led RX
    Quando viene processata l'istruzione
    Get #1, ,res
    il led TX della scheda fa un lampeggio, quindi presumo che la scheda invii una risposta
  • Re: Inviare codice "0A" (hex) a shell

    DarioV,
    puoi cercare di acquisire un byte alla volta (al fine di individuare anche quale sia la sequenza di start e stop gestita dalla seriale).
    Ti allego un semplice codice estratto dal link di esempio, citato da Max_Riservo e da me precedentemente:
    
    Public Sub SerialeTrasmettiRicevi()
    Dim COM_Byte As Byte
        Open "COM4:9600,N,8,1" For Random As #1 Len = 1
        Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H0)  ' Invio dati alla COM
    
        Do  ' Fase ciclo acquisizione sequenza dati (byte per byte)
            Get #1, , COM_Byte
            If COM_Byte Then ' Da valutare in base allo start
                Debug.Print Hex$(COM_Byte)
            End If
            DoEvents
            ' Gestire uscita dal ciclo in base allo stop della sequenza
        Loop
        Close
    End Sub
    
  • Re: Inviare codice "0A" (hex) a shell

    OK, lunedì vado dove le schede sono montate e provo
    Grazie
  • Re: Inviare codice "0A" (hex) a shell

    Ma non puoi dare la URL con la pagina del device?

    E' questo?
    https://info.kmtronic.com/modbus-relays.htm

    O questo?
    https://info.kmtronic.com/control-kmtronic-relays-via-excel.html

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

    https://info.kmtronic.com/rs485-8-channel-relay-controller.html

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

    https://info.kmtronic.com/usb-one-channel-relay-box.html
  • Re: Inviare codice "0A" (hex) a shell

    Ma quindi lo status si chiede con il comando 03 e si ottiene su 3 byte

    Prova
    
        Dim i As Integer
        Dim res As String
        
        Open "COM4:9600,N,8,1" For Binary As #1
        Put #1, , Chr(&HFF) & Chr(&H01) & Chr(&H03)
        res = String$(3, 0)
        Get #1, , res
        Close #1
        For i = 1 To Len(res)
            Debug.Print Hex$(Asc(Mid(res, i, 1))); " ";
        Next i
        Debug.Print
    
  • Re: Inviare codice "0A" (hex) a shell

    Ciao ho provato la prima routine
    
    Public Sub SerialeTrasmettiRicevi()
    Dim COM_Byte As Byte
        Open "COM4:9600,N,8,1" For Random As #1 Len = 1
        Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H0)  ' Invio dati alla COM
    
        Do  ' Fase ciclo acquisizione sequenza dati (byte per byte)
            Get #1, , COM_Byte
            If COM_Byte Then ' Da valutare in base allo start
                Debug.Print Hex$(COM_Byte)
            End If
            DoEvents
            ' Gestire uscita dal ciclo in base allo stop della sequenza
        Loop
        Close
    End Sub
    
    ma su
     Put #1, , Chr(&HFF) & Chr(&HA1) & Chr(&H0)
    ottengo errore run-time 59 -Lunghezza del record non valida

    poi ho provato il secondo
    Dim i As Integer
        Dim res As String
        
        Open "COM4:9600,N,8,1" For Binary As #1
        Put #1, , Chr(&HFF) & Chr(&H1) & Chr(&H3)
        res = String$(3, 0)
        Get #1, , res
        Close #1
        For i = 1 To Len(res)
            Debug.Print Hex$(Asc(Mid(res, i, 1))); " ";
        Next i
        Debug.Print
    e su
    Get #1, , res
    l'applicazione si blocca
  • Re: Inviare codice "0A" (hex) a shell

    Che dire, senza il dispositivo diventa difficile fare debug.
    Tu non sembri molto preparato per fare il debug, dove hai comprato il dispositivo credo non esista assistenza ...
    Magari questo spiega perché esistono in commercio prodotti (probabilmente) più cari : l'ingegnerizzazione e l'assistenza hanno un costo che spesso NON siamo disposti a riconoscere.
  • Re: Inviare codice "0A" (hex) a shell

    Aggioramento.
    Ho richiesto assistenza al produttore che il giorno seguente mi ha inviato un file di Excel comprendente il codice VBA per scrivere e leggere ( ) sulla porta COMM, con il quale, adattandolo, ho risolto il mio problema
Devi accedere o registrarti per scrivere nel forum
66 risposte