Questo blocco funzione gestisce la comunicazione su porta seriale, occorre definire in COM la porta da gestire fornendo tutti i parametri di configurazione. Se non sono definiti parametri la porta verrà impostata di default a 19200, e, 8, 1, DTR_AUTO_WO_TIMES.
Attivando il comando Open la porta viene aperta se non ci sono problemi viene attivato Opened e sull’uscita File viene ritornato lo stream da utilizzarsi per lo scambio dati sulla porta. Se ci sono errori nei parametri o con la porta definita viene generato Fault.
Per aggiungere porte seriali ai nostri moduli CPU è possibile utilizzare convertitori USB/Seriale sui moduli basati su Linux e convertitori Ethernet/Seriale sui moduli ARM e Cortex, vedi articolo.
LogicLab (Ptp116, ST_SerialDataReceive) Semplice protocollo seriale
Riportiamo un programma che gestisce un semplice protocollo seriale, viene ricevuta una stringa con 2 valori REAL. I valori ricevuti sono decodificati e ritornati in risposta.
Descrizione
Open (BOOL) Comando apertura porta seriale.
COM (@STRING) Definizione della porta COM da utilizzare (Su CODESYS diventa pCOM).
Baudrate (UDINT) Valore di baud rate porta seriale (da 300 a 115200 baud).
Parity (STRING[1]) Tipo di parità, valori possibili “E” pari, “O” dispari, “N” nessuna.
DataBits (USINT) Numero di bit frame dato, valori possibili 7, 8.
StopBits (USINT)) Numero di bit di stop, valori possibili 1, 2.
DTRManagement (DTR_MODE) Modo di gestione del segnale DTR sulla porta seriale (Definizione).
DTRComplement (BOOL) FALSE: DTR normale, TRUE: DTR complementato.
EchoFlush (BOOL) FALSE: I dati trasmessi sono ritornati in ricezione. TRUE: I dati trasmessi sono ignorati. Questa impostazione è utile nelle comunicazione RS485 per non ricevere in echo i dati trasmessi.
DTROnTime (UINT) Tempo di attesa dopo attivazione segnale DTR prima di trasmissione caratteri (mS).
DTROffTime (UINT) Tempo di attesa dopo trasmissione ultimo dato prima e disattivazione segnale DTR (mS).
FlushTm (UINT) Tempo di flush dati, se non sono caricati dati sullo stream dopo il tempo definito i dati presenti vengono automaticamente inviati (mS) (Impostare 0).
RxSize (UINT) Dimensione buffer ricezione dati.
TxSize (UINT) Dimensione buffer trasmissione dati.
Opened (BOOL) Attivo se porta porta seriale aperta.
Fault (BOOL) Attivo se errore gestione.
File (FILEP) Stream di I/O. Viene valorizzato su apertura porta seriale.

LogicLab, definizione porta COM
La porta da utilizzare và definita nel parametro COM, il valore cambia in funzione del sistema che si stà utilizzando.
SlimLine compact senza ethernet | COM0 (Rs232 su P4), COM2 (Rs485 su P2 se prevista) |
SlimLine compact con ethernet | COM0 (Rs232 su P4) |
SlimLine Cortex M7 | COM0 (Rs232 su P4), COM1 (Rs232 su P5), COM2 (Rs485 su P2 se prevista) |
Netlog III | COM0 (Rs232 su Port A), PCOM0.0 (Rs232 su Port B), COM2 (Rs485 su P9 se prevista) |
SlimLine Raspberry | /dev/ttyAMA0 (Rs485 su P2 se prevista) |
Lo SlimLine basato su Raspberry permette di aumentare il numero di porte connettendo al sistema dei convertitori USB/Seriale. Le porte aggiuntive assumeranno un identificativo assegnato automaticamente (Avremo /dev/ttyUSB0, /dev/ttyUSB1, ecc). Connesso il convertitore al modulo, da console SSH con il comando lsusb è possibile vedere se è stato riconosciuto. Ecco il comando eseguito su di un modulo a cui è stato connesso un convertitore.
lsusb Bus 001 Device 008: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
Per conoscere il nome assegnato alla porta eseguire un listing della directory /dev, ecco il comando:
ls /dev | grep ttyUSB ttyUSB0 ttyUSB1
In questo caso al modulo sono stati connessi 2 convertitori USB/Seriale e le porte sono identificate con /dev/ttyUSB0 e /dev/ttyUSB1.
CODESYS, definizione porta pCOM
Porta seriale RS485
Se il dispositivo SlimLine dispone di porta seriale RS485, la porta è conessa alla porta ttyAMA del modulo CPU Raspberry, per poterla utilizzare dall’ambiente CODESYS identificandola come “1”, occorre nel file /etc/CODESYSControl_User.cfg modificare la voce [SysCom] come indicato di seguito. Nota si specifica device ttyAMA anche se il device è ttyAMA0.
[SysCom] ;Linux.Devicefile=/dev/ttyS Linux.Devicefile=/dev/ttyAMA
Aggiungere porta seriale su USB
Utilizzando moduli USB/Seriale è possibile connettere alla porta USB del modulo porte seriali aggiuntive, nel caso di una porta da utilizzare in alternativa alla ttyAMA identificandola come “1”, occorre modificare la voce [SysCom] come indicato di seguito. Nota si specifica device ttyUSB anche se il device è ttyUSB0.
[SysCom] ;Linux.Devicefile=/dev/ttyS Linux.Devicefile=/dev/ttyUSB
Esempi
Oltre al programma di esempio ST_SerialDataReceive riportato in testa all’articolo rimando al programma ST_WindSonicDriver. Entrambi questi programmi aiutano a capire nel dettaglio come gestire le comunicazioni seriali.Negli esempi seguenti viene aperta una porta di comunicazione seriale e viene eseguito l’echo dei caratteri ricevuti.