FTPClient, connects to a FTP server

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Gestione networking
  6. FTPClient, connects to a FTP server

Questo blocco funzione permette di gestire la connessione al server FTP definito in FTPServer. Con il comando Connect si forza la connessione al server utilizzando il username definito in User e la password definita in Password, se la connessione và a buon fine si attiva l'uscita Connected. A connessione avvenuta ogni tempo definito in CnAliveTm viene inviato un comando di NOOP per mantenere la connessione. In Timeout è possibile definire il tempo di attesa risposte dal server.

In DBSize occorre definire la dimensione del buffer che l'FB alloca (Con SysRMalloc) per la gestione della richiesta e della ricezione. La dimensione minima è 256 bytes, aumentando la dimensione si aumenta anche la dimensione dei pacchetti TCP velocizzando il trasferimento. E' inutile definire lunghezze superiori al limite del pacchetto TCP 1500 bytes.

Attivando Store il file locale definito in LocalFile viene trasferito nel server FTP con il nome indicato in RemoteFile, terminato il trasferimento si attiva per un loop Done. Attivando Retrieve il file nel server FTP con il nome indicato in RemoteFile viene trasferito in locale con il nome definito in LocalFile, terminato il trasferimento si attiva per un loop Done. Attivando Delete il file nel server FTP con il nome indicato in RemoteFile viene cancellato e si attiva per un loop Done.

In caso di errore il comando termina e si attiva per un loop l'uscita Fault.

Function block
CODESYS: Non disponibile
LogicLab: eLLabNetworkLib

Connect (BOOL) Comando abilitazione connessione al server FTP.

SpyOn (BOOL) Se attivo permette di spiare il funzionamento della FB.

Store (BOOL) Comando trasferimento file da directory locale a server FTP.

Retrieve (BOOL) Comando trasferimento file da server FTP a directory locale.

Delete (BOOL) Comando cancellazione file su server FTP.

DBSize (UINT) Dimensione buffer allocato da FB (Con SysRMalloc). Minimo 256 massimo 1500.

FTPServer (@STRING) Puntatore stringa definizione server FTP.

FTPPort (UINT) Definizione porta connessione a server FTP.

User (@STRING) Puntatore stringa definizione nome utente.

Password (@STRING) Puntatore stringa definizione password.

LocalFile (@STRING) Puntatore stringa definizione nome del file locale.

RemoteFile (@STRING) Puntatore stringa definizione nome del file su server FTP.

CnAliveTm (REAL) Tempo invio comando NOOP al server FTP. Se “0” comando non viene inviato (S).

Timeout (REAL) Tempo attesa risposte da server FTP (S).

Connected (BOOL) Si attiva se connessione al server FTP avvenuta.

Done (BOOL) Si attiva al termine della esecuzione comando. Rimane attivo fino alla disabilitazione di tutti i
comandi, per eseguire un nuovo comando disabilitare e poi riabilitare il comando.

Fault (BOOL) Attivo per un loop se errore esecuzione.

Trigger di spy

Se SpyOn attivo è possibile utilizzare utilizzare la console di spionaggio per verificare il funzionamento della FB. Sono previsti vari livelli di triggers.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.

ST_FTPClient_v2: Viene gestita la connessione ad un server FTP gestendo il comando di Store per inviare un file dalla cartella locale del sistema al server FTP. Il comando Retrieve per trasferire un file dal server FTP alla cartella locale del sistema. Il comando Delete per cancellare il file sul server FTP.

ST_FTPFileTransfer: Esempio di trasferimento di un file da un server FTP ad un'altro, il file viene appoggiato sul disco locale. Nell'esempio come server FTP sono stati utilizzati due terminali Weintek.

LogicLab (Ptp119)
PROGRAM ST_FTPClient_v2
VAR
    Store : BOOL; (* FTP store command *)
    Retrieve : BOOL; (* FTP retrieve command *)
    Delete : BOOL; (* FTP delete command *)
    CaseNr : USINT; (* Program case *)
    FTP : FTPClient_v2; (* FTP client *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_FTPClient_v2"
// *****************************************************************************
// This program connects to a FTP server and allows to transfer file from local
// directory to FTP server and viceversa.
// -----------------------------------------------------------------------------

    // -------------------------------------------------------------------------
    // INITIALIZATION
    // -------------------------------------------------------------------------
    // Program initializations.

    IF (SysFirstLoop) THEN
        FTP.SpyOn:=TRUE; //Spy active
        FTP.DBSize:=512; //Data buffer size
        FTP.FTPServer:=ADR('192.168.1.144'); //Server FTP
        FTP.FTPPort:=21; //Server port
        FTP.User:=ADR('user'); //User
        FTP.Password:=ADR('password'); //Password
        FTP.Timeout:=5.0; //Timeout (S)
        FTP.CnAliveTm:=10.0; //Connection alive time (S)
    END_IF;

    // -------------------------------------------------------------------------
    // FTP CLIENT
    // -------------------------------------------------------------------------
    // Executs the FTP client and resets the commands on execution fault.

    FTP(); //FTP client
    IF (FTP.Fault) THEN
        FTP.Store:=FALSE; //Store command
        FTP.Retrieve:=FALSE; //Retrieve command
        FTP.Delete:=FALSE; //Delete command
        CaseNr:=0; //Program case
    END_IF;

    // -------------------------------------------------------------------------
    // PROGRAM CASES
    // -------------------------------------------------------------------------
    // Program cases management.

    CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // MANAGES THE COMMAND
        // ---------------------------------------------------------------------
        // Checks commands.

        0:
        FTP.Connect:=FALSE; //Connect command
        IF (Store) THEN Store:=FALSE; CaseNr:=10; RETURN; END_IF;
        IF (Retrieve) THEN Retrieve:=FALSE; CaseNr:=20; RETURN; END_IF;
        IF (Delete) THEN Delete:=FALSE; CaseNr:=30; RETURN; END_IF;

        // ---------------------------------------------------------------------
        // STORE COMMAND
        // ---------------------------------------------------------------------
        // Connects to FTP serever.

        10:
        FTP.Connect:=TRUE; //Connect to server
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Server connection waiting.

        11:
        IF NOT(FTP.Connected) THEN RETURN; END_IF;
        FTP.LocalFile:=ADR('C:/System/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('/Logs.txt'); //Remote file definition
        FTP.Store:=TRUE; //Store command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Command end waiting.

        12:
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Store:=FALSE; //Store command
        CaseNr:=0; //Program case

        // ---------------------------------------------------------------------
        // RETRIEVE COMMAND
        // ---------------------------------------------------------------------
        // Connects to FTP serever.

        20:
        FTP.Connect:=TRUE; //Connect to server
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Server connection waiting.

        21:
        IF NOT(FTP.Connected) THEN RETURN; END_IF;
        FTP.LocalFile:=ADR('D:/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('/Logs.txt'); //Remote file definition
        FTP.Retrieve:=TRUE; //Retrieve command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Command end waiting.

        22:
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Retrieve:=FALSE; //Retrieve command
        CaseNr:=0; //Program case

        // ---------------------------------------------------------------------
        // DELETE COMMAND
        // ---------------------------------------------------------------------
        // Connects to FTP serever.

        30:
        FTP.Connect:=TRUE; //Connect to server
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Server connection waiting.

        31:
        IF NOT(FTP.Connected) THEN RETURN; END_IF;
        FTP.LocalFile:=NULL; //Local file definition
        FTP.RemoteFile:=ADR('/Logs.txt'); //Remote file definition
        FTP.Delete:=TRUE; //Delete command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Command end waiting.

        32:
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Delete:=FALSE; //Delete command
        CaseNr:=0; //Program case
    END_CASE;

// [End of file]
LogicLab (Ptp119)

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 11 Gennaio 2021