FTPClient, conecta-se a um servidor FTP

Lista

Esta página faz parte do Manual de Programação IEC 61131-3. Acesse o índice.

Este bloco de função de executar na tarefa Voltar, permite gerenciar a conexão com o servidor FTP definido em FTPServer com nome de usuário definido em User e senha definida em Password.

ativador Store o arquivo local definido em LocalFile é transferido para o servidor FTP com o nome indicado em RemoteFile, uma vez concluída a transferência, a saída é ativada Done que permanece ativo até que o comando seja desabilitado.

ativador Retrieve o arquivo no servidor FTP com o nome indicado em RemoteFile é transferido localmente com o nome definido em LocalFile, uma vez concluída a transferência, a saída é ativada Done que permanece ativo até que o comando seja desabilitado.

ativador Delete o arquivo no servidor FTP com o nome indicado em RemoteFile é apagado e a saída é ativada Done que permanece ativo até que o comando seja desabilitado.

Em caso de erro, a execução do comando termina e a saída é ativada para um loop Fault e a saída é ativada Done que permanece ativo até que o comando seja desabilitado.

Lista de atualização

Cliente FTP_v4

Parâmetro removido Timeout, parâmetros adicionados TRatio, ETime e CRetry, saída. Gerenciamento de retomada aprimorado em comandos Store e Retrieve.

Datalogger com transferência automática de arquivos no servidor FTP

O programa FTPDataLogger (Baixar) realiza a aquisição de 2 entradas analógicas e a cada minuto armazena os valores em um arquivo no formato CSV, a cada hora o arquivo de log é automaticamente transferido para um servidor FTP remoto na nuvem.

O programa pode ser modificado para atender às suas necessidades, adquirindo um maior número de entradas analógicas ou via FB ModbusMaster aquisição de valores de instrumentos com protocolo Modbus. Uma característica especial do programa é o uso do FB FIFOFile que armazena os dados no log FIFO durante a transferência do arquivo de log para o servidor FTP remoto para não perder os logs.

Dar uma olhada no programa fonte é útil para aprender não apenas como usar o FB FTPClient mas também para entender como gerenciar o sistema de arquivos do sistema gravando arquivos no formato CSV.

Círculo de Informação

Bloqueio de função

CoDeSys: Indisponível

Laboratório de lógica: eLLabNetworkLib

descrição

Store (BOOL) Comando de transferência de arquivos do diretório local para o servidor FTP.
Retrieve (BOOL) Comando de transferência de arquivos do servidor FTP para o diretório local.
Delete (BOOL) Comando de exclusão de arquivo no servidor FTP.
SpyOn (BOOL) Se ativo, permite que você espione o funcionamento do FB.
FTPServer (@STRING) Ponteiro de string de definição de servidor FTP.
FTPPort (UINT) Definição de porta para conexão ao servidor FTP.
User (@STRING) Ponteiro de string de definição de nome de usuário.
Password (@STRING) Ponteiro de string de definição de senha.
LocalFile (@STRING) Ponteiro de string de definição de nome de arquivo local.
RemoteFile (@STRING) Ponteiro de string de definição de nome de arquivo no servidor FTP. Se as pastas forem definidas no nome (Exemplo /DirA/DirB/File.txt), o FB os criará.
Done (BOOL) É ativado ao final da execução do comando. Ele permanece ativo até que todos os comandos sejam desativados, para executar um novo comando, desative e reative o comando.
Culpa (BOOL) Ativo para um loop se houver erro de execução.
Tratamento (REAL) Porcentagem de transferência realizada.
Etime (TIME) Retorna o tempo gasto para executar o comando.
CRTentar novamente (UDINT) Número de tentativas feitas.
Errors (UDINT) Contador de erros de execução.

Imagem de FB FTPClient_v4

Operação espionagem

Se SpyOn ativo, você pode usar o console espião para verificar o funcionamento do FB. Existem vários níveis de gatilhos.

Gatilhos de espionagem
16 00000001 #Tx: Comandos enviados para o servidor FTP.
16 00000002 #Rx: Estados de resposta do servidor FTP.
16 10000000 #LG: Mensagens de registro de operação.
16 40000000 #Ele: Erros de execução.

Analisar as mensagens exibidas no console de espionagem ajuda você a entender quaisquer erros nas sequências.

Mensagens de espionagem
Messaggi di connessione al server validi per tutti comandi.

| FTPClient:Rx|[0010] 227 Entering Passive Mode (81,88,52,106,222,229)          Apertura connessione passiva
| FTPClient:Lg|[0010] PASV port:57061                                           Porta per connessione passiva
| FTPClient:Lg|[0022] Server do not allows the resume command                   Server non supporta il comando di resume
| FTPClient:Lg|[0022] Server allows the resume command                          Server supporta il comando di resume
| FTPClient:Lg|[0100] User logged in                                            Client connesso al server

Messaggi del comando di store.

| FTPClient:Lg|[1000] Send file: Local file => Remote file                      Informazioni sul file locale e remoto
| FTPClient:Lg|[1000] File to send length: xxxxxxx                              Dimensione file locale da inviare in bytes
| FTPClient:Tx|[1305] ABOR                                                      Abortita sequenza in corso segue un resume
| FTPClient:Lg|[1405] xxxxxxx bytes has been transferred, xx.xxx KB/S           Dimensione file inviato e velocità di invio
| FTPClient:Lg|--------------------------------------[Store end, xxx.xxx (S)]-- Fine comando e durata

Messaggi del comando di retrieve.

| FTPClient:Lg|[2002] File to receive length: xxxxxx                            Dimensione file da scaricare in bytes (Se resume)
| FTPClient:Lg|[2203] Data reception restart                                    Non si ricevono dati per 80% di Timeout, eseguo resume
| FTPClient:Lg|[2203] Server timeout restart                                    Prima di timeout server eseguo resume (Timeout*2)
| FTPClient:Tx|[2205] ABOR                                                      Abortita sequenza in corso segue un resume
| FTPClient:Lg|[2302] xxxxxxx bytes has been transferred, xx.xxx KB/S           Dimensione file ricevuto e velocità di invio
| FTPClient:Lg|-----------------------------------[Retrieve end, xxx.xxx (S)]-- Fine comando e durata

Exemplos

Como usar os exemplos.

ST_FTPClient: A conexão com um servidor FTP é gerenciada gerenciando o comando Store para enviar um arquivo da pasta local do sistema para o servidor FTP. O comando Retrieve para transferir um arquivo do servidor FTP para a pasta local do sistema. O comando Delete para excluir o arquivo no servidor FTP.

ST_FTPFileTransfer: Exemplo de transferência de um arquivo de um servidor FTP para outro, o arquivo é colocado no disco local. No exemplo, dois terminais Weintek foram usados ​​como um servidor FTP.

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

// *****************************************************************************
// PROGRAM "ST_FTPClient"
// *****************************************************************************
// This program connects to the SlimLine 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.FTPServer:=ADR('192.168.0.230'); //Server FTP
        FTP.FTPPort:=21; //Server FTP
        FTP.User:=ADR('Admin'); //User
        FTP.Password:=ADR('Admin'); //Password
    END_IF;

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

    FTP(); //FTP client
    IF (FTP.Fault) THEN CaseNr:=0; END_IF;

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

    CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // MANAGES THE COMMAND
        // ---------------------------------------------------------------------
        // Reset commands.

        0:
        FTP.Store:=FALSE; //Store command
        FTP.Retrieve:=FALSE; //Retrieve command
        FTP.Delete:=FALSE; //Delete command

        // Check commands.

        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
        // ---------------------------------------------------------------------
        // Command execution.

        10:
        FTP.Store:=TRUE; //Store command
        FTP.LocalFile:=ADR('C:/System/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('D:/Logs.txt'); //Remote file definition
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Store:=FALSE; //Store command
        CaseNr:=0; //Program case

        // ---------------------------------------------------------------------
        // RETRIEVE COMMAND
        // ---------------------------------------------------------------------
        // Command execution.

        20:
        FTP.Retrieve:=TRUE; //Retrieve command
        FTP.LocalFile:=ADR('D:/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('C:/System/Logs.txt'); //Remote file definition
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Retrieve:=FALSE; //Retrieve command
        CaseNr:=0; //Program case

        // ---------------------------------------------------------------------
        // DELETE COMMAND
        // ---------------------------------------------------------------------
        // Command execution.

        30:
        FTP.Delete:=TRUE; //Delete command
        FTP.LocalFile:=eNULL; //Local file definition
        FTP.RemoteFile:=ADR('D:/Logs.txt'); //Remote file definition
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Delete:=FALSE; //Delete command
        CaseNr:=0; //Program case
    END_CASE;

// [End of file]
LogicLab (Ptp119)
PROGRAM ST_FTPFileTransfer
VAR
    DTransfer : BOOL; (* Data transfer command *)
    CaseNr : USINT; (* Program case *)
    FTP : FTPClient_v4; (* FTP client *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_FTPFileTransfer"
// *****************************************************************************
// This program transfers a file from one FTP server to another.
// -----------------------------------------------------------------------------

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

    IF (SysFirstLoop) THEN
        FTP.SpyOn:=TRUE; //Spy active
    END_IF;

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

    FTP(); //FTP client
    IF (FTP.Fault) THEN CaseNr:=0; END_IF;

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

    CASE (CaseNr) OF

        // ---------------------------------------------------------------------
        // TRANSFER FILE
        // ---------------------------------------------------------------------
        // Wait for the command.

        0:
        IF (DTransfer) THEN DTransfer:=FALSE; CaseNr:=10; RETURN; END_IF;

        // ---------------------------------------------------------------------
        // READ FILE FROM THE SERVER AND DELETE IT
        // ---------------------------------------------------------------------
        // Define server credential and connects to it.

        10:
        FTP.FTPServer:=ADR('192.168.0.234'); //Server FTP
        FTP.FTPPort:=21; //Server port
        FTP.User:=ADR('uploadhis'); //User
        FTP.Password:=ADR('111111'); //Password
        FTP.LocalFile:=ADR('D:/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('datalog/Logs.txt'); //Remote file definition
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Retrieve command execution.

        11:
        FTP.Retrieve:=TRUE; //Retrieve command
        IF NOT(FTP.Done) THEN RETURN; END_IF;
        FTP.Retrieve:=FALSE; //Retrieve command
        CaseNr:=CaseNr+1; //Program case

        // ---------------------------------------------------------------------
        // Delete command execution.

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

        // ---------------------------------------------------------------------
        // STORE FILE TO THE SERVER
        // ---------------------------------------------------------------------
        // Define server credential and connects to it.

        20:
        FTP.FTPServer:=ADR('192.168.0.216'); //Server FTP
        FTP.FTPPort:=21; //Server port
        FTP.User:=ADR('uploadhis'); //User
        FTP.Password:=ADR('111111'); //Password
        FTP.LocalFile:=ADR('D:/Logs.txt'); //Local file definition
        FTP.RemoteFile:=ADR('datalog/Logs.txt'); //Remote file definition
        CaseNr:=CaseNr+1; //Program case

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

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

// [End of file]
Esse artigo foi útil?