Invio e ricezione dati da porta seriale

di il
6 risposte

Invio e ricezione dati da porta seriale

Ciao a tutti!

Ho un problema con uno strumento collegato via Rs232 alla mia macchina, lo strumento in questione é una bilancia che se interrogata con la sequenza
STX N EOT
ritorna una stringa con i vari valori.
Via terminale tutto a posto, la bilancia viene interrogata risponde, ho scritto un piccolo script python usando pyserial che scrive sulla porta e rimane in ascolto con una readline sulla stessa ma non leggo niente dalla porta...

import serial

with serial.serial('COM6', timeout=1) as s:
s.dtr = False
s.write('STX N EOT')
s.read(20)
s.dtr = True
s.write(serial.to_bytes(range(256)))
s.read(400)
s.send_break()

with open('test.txt') as f:
print(f.read())

Grazie a tutti in anticipo.

6 Risposte

  • Re: Invio e ricezione dati da porta seriale

    La domanda che mi sorge spontanea è: usi gli stessi parametri di linea? Intendo baudrate, bytesize, parità, stop bits. Inoltre hai attivato controlli come RTS/CTS?
  • Re: Invio e ricezione dati da porta seriale

    Ciao candaluar! Si i parametri sono corretti, i controlli RTS/CTS non so cosa sono :/
  • Re: Invio e ricezione dati da porta seriale

    Guarda bene tutti i parametri della connessione che hai utilizzato con hyperterminal (o altro programma) e riportali tutti nel programma; l'eventuale Rts/Cts dovresti trovarlo come 'controllo di flusso'. Eventualmente riporta qui tutti questi parametri che li controlliamo insieme se sono correttamente riportati nel programma.
    Perché nel tuo programma setti Dtr?
  • Re: Invio e ricezione dati da porta seriale

    Attenzione poi che come hai composto la stringa non stai spedendo il carattere STX ma i caratteri "STX" ; stesso discorso per EOT...
  • Re: Invio e ricezione dati da porta seriale

    Ciao, grazie ancora per il tuo supporto
    Allora i parametri sono corretti, se imposto la bilancia in modalità di trasmissione continua riesco ad aprire la porta, leggere i byte che mi servono e chiudere la porta (già un bel passo avanti!).
    Il problema è che vorrei fare in modo di inviare il comando con una write e leggere la risposta.
    Con realterm ho notato che se invio la stringa
    STX N EOT
    La bilancia non risponde. Mentre se invio
    02 78 04 (il decimale)
    Mi risponde correttamente. Al che ho provato a fare una
    Write della stringa '0220782004', i dati vengono inviati ma lanciando una read alla riga successiva la bilancia non mi ritorna niente
  • Re: Invio e ricezione dati da porta seriale

    Prova a spedire i dati in questo modo:
    command=b"\x02\x4E\x04"
    s.write(command)
    ho trovato questa discussione che spiega la questione https://stackoverflow.com/questions/17589942/using-pyserial-to-send-binary-data
Devi accedere o registrarti per scrivere nel forum
6 risposte