SysSerialPort, manage serial port

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Streams di comunicazione
  6. SysSerialPort, manage serial port

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.

Function block
CODESYS: Non disponibile
LogicLab: eLLabXUnified12Lib

Open (BOOL) Comando apertura porta seriale

COM (@STRING) Definizione della porta COM da utilizzare.

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 (Impostare 0).

TxSize (UINT) Dimensione buffer trasmissione dati (Impostare 0).

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.

Errori

In caso di errore si attiva l'uscita Fault, eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

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)
SlimLine Raspberry /dev/ttyAMA0 (Rs485 su P2 se prevista) (Nota 1)
Netlog III COM0 (Rs232 su Port A), COM1 (Rs232 su Port B), COM2 (Rs485 su P9 se prevista)

Esempi

Come utilizzare gli esempi.
Nell'esempio seguente viene aperta una porta di comunicazione seriale e viene eseguito l'echo dei caratteri ricevuti.

LogicLab (Ptp116)
PROGRAM ST_SysSerialPort
VAR
    Ch : INT; (* Auxiliary variable *)
    Sp: SysSerialPort; (* Serial port management *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SysSerialPort"
// *****************************************************************************
// This program echoes the characters received by the serial line.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------

    IF (SysFirstLoop) THEN
        Sp.COM:=ADR('COM0'); //COM port definition
//      Sp.COM:=ADR('/dev/ttyAMA0'); //COM port definition
//      Sp.COM:=ADR('/dev/ttyUSB0'); //COM port definition
        Sp.Baudrate:=19200; //Baudrate
        Sp.Parity:='E'; //Parity
        Sp.DataBits:=8; //Data bits
        Sp.StopBits:=1; //Stop bits
        Sp.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management
        Sp.DTRComplement:=FALSE; //DTR complement
        Sp.EchoFlush:=FALSE; //Received echo flush
        Sp.DTROnTime:=0; //DTR On time delay (mS)
        Sp.DTROffTime:=0; //DTR Off time delay (mS)
        Sp.FlushTm:=0; //Flush time (mS)
        Sp.RxSize:=0; //Rx buffer size
        Sp.TxSize:=0; //Tx buffer size
    END_IF;

    // -------------------------------------------------------------------------
    // ECHOES CHARACTERS
    // -------------------------------------------------------------------------
    // Here the received characters are echoed back.

    Sp(Open:=TRUE); //Serial port management
    IF (Sp.Opened) THEN
        IF (TO_BOOL(SysGetOSpace(Sp.File)) AND TO_BOOL(SysGetIChars(Sp.File))) THEN
            Ch:=Sysfgetc(Sp.File); //Get input character
            Ch:=Sysfputc(Ch, Sp.File); //Put input character
        END_IF;
    END_IF;

// [End of File]
LogicLab (Ptp116)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 26 Ottobre 2019