05.10.2019 Views

BRESIMAR(asaTek)-Beckhoff-Nota Aplicação TwinCAT 2-15 MFiles

BECKHOFF - TwinCAT 2 Nota de Aplicação Técnica - 15 Memorias em ficheiro (v1.0/2018) Da empresa BRESIMAR AUTOMAÇÃO (Aveiro / Portugal) Autoria: asaTek / Jorge Andril

BECKHOFF - TwinCAT 2
Nota de Aplicação Técnica - 15 Memorias em ficheiro (v1.0/2018)
Da empresa BRESIMAR AUTOMAÇÃO (Aveiro / Portugal)
Autoria: asaTek / Jorge Andril

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Beckhoff</strong> <strong>TwinCAT</strong><br />

The Windows Control and Automation Technology<br />

NOTA DE APLICAÇÃO <strong>15</strong><br />

Funções Bloco de manuseamento de ficheiros em CX<br />

e IPC com <strong>TwinCAT</strong> PLC<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>)<br />

e-mail j.andril@bresimar.pt<br />

B-NA<strong>15</strong>(v1.0)<br />

Novembro/2018


Bresimar Automação, S.A.<br />

Geral (Sede)<br />

Quinta do Simão - EN109 - Esgueira<br />

Apartado 3080<br />

3801-101 Aveiro<br />

PORTUGAL<br />

Telf . +351 234 303 320 Telm . +351 939 992 222<br />

Fax +351 234 303 328/9<br />

e-mail bresimar@bresimar.pt


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

Índice<br />

1. Introdução 2<br />

2. Livraria “TcSystem.lib”<br />

2.1. Criar/abrir ficheiro (“FB_FileOpen”) 3<br />

2.2. Escrever/guardar em ficheiro (“FB_FileWrite”) 5<br />

2.3. Fechar ficheiro (“FB_FileClose”) 7<br />

2.4. Outras FB´s de manuseamento de ficheiros 9<br />

3. Programa exemplo de acesso a ficheiros<br />

3.1. 1º exemplo – Copia de ficheiros de dados 12<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 1 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

1 – Introdução<br />

O software <strong>TwinCAT</strong> PLC é um sistema que permite criar um PLC “virtual” a<br />

correr em IPC´s ou em PC´s “embbeded” com o sistema operativo Windows 2000, XP,<br />

Vista, 7(32 bit) (a partir da versão 2.11) ou Windows CE (CX “embedded PC”) e que<br />

pode ser programado utilizando a norma “standard” IEC 61131-3.<br />

Este documento técnico irá descrever de uma maneira simples os princípios<br />

básicos de como:<br />

- Utilização da livraria “TcSystem.lib“ (é colocada na pasta “<strong>TwinCAT</strong>\PLC\Lib”<br />

quando da instalação do <strong>TwinCAT</strong>, não necessitando de licença) e explicação do<br />

modo de funcionamento das suas Funções Bloco principais.<br />

- Criar programas de automatismo, utilizando o <strong>TwinCAT</strong> PLC, que permita<br />

o manuseamento de ficheiros de dados para guardar ou ler parâmetros de máquina ou<br />

outros dados permanentes.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 2 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2 – Livraria “TcSystem.lib” com FB´s de manuseamento de dados<br />

2.1 – Função Bloco de criar/abrir ficheiros (“FB_FileOpen”)<br />

Com esta função bloco um novo ficheiro pode ser criado, ou um ficheiro já<br />

existente e fechado pode ser aberto para posterior processamento.<br />

VAR_INPUT<br />

sNetId: É uma string contendo o endereço AMS do PC em que se encontram os<br />

ficheiros e para a qual os comandos ADS serão dirigidos. T_AmsNetId é do tipo<br />

de dados STRING(23) e que levará o endereço AMS (ex. 172.16.17.1.1.1) . Caso<br />

esta variável esteja vazia ou não declarada, por defeito, o sistema assume o PC<br />

local onde está a correr o soft PLC.<br />

sPathName: Contem o caminho e o nome do ficheiro a ser aberto. O caminho só<br />

pode apontar para ficheiros pertencentes ao PC local. Isto significa que aqui não<br />

podemos colocar o caminho, de um outro PC, colocado numa rede.<br />

nMode: Contem o modo em que o ficheiro é aberto. Existem diversos códigos,<br />

predefinidos como constantes na libraria, para os variados modos de abertura.<br />

“r” - FOPEN_MODEREAD – Abre ficheiro para leitura. Caso não exista ou o<br />

ficheiro não é encontrado a chamada falha e dará um erro.<br />

“w” - FOPEN_MODEWRITE - Abre ficheiro vazio para escrita. Caso exista o<br />

ficheiro o seu conteúdo será apagado.<br />

“a” - FAOPEN_MODEAPPEND – Abre ficheiro para adicionar mais dados.<br />

Serão escritos a partir do EOF(End Of File) sem o apagar. Cria um ficheiro novo caso<br />

ele não exista.<br />

“r+” - FOPEN_MODEREAD OR FOPEN_MODEPLUS - Abre ficheiro já<br />

existente para leitura e escrita.<br />

“w+” - FOPEN_MODEWRITE OR FOPEN_MODEPLUS - Abre ficheiro vazio<br />

para leitura e escrita. Se o ficheiro já existe o seu conteúdo será destruído.<br />

“a+” - FOPEN_MODEAPPEND OR FOPEN_MODEPLUS - Abre ficheiro para<br />

leitura e adicionar novos dados. Será primeiro apagado o comando EOF, depois são<br />

escritos os novos dados e no fim é colocado o comando EOF. Se o ficheiro não existe<br />

será criado um novo. Quando o ficheiro é aberto com o comando “a” ou “a+” toda a<br />

escrita ocorre a partir do comando EOF. O ponteiro do ficheiro pode ser reposicionado<br />

(com FB_FileSeek) mas ele está sempre apontado para o final do ficheiro antes da<br />

escrita. Assim evita-se a escrita sobre os dados anteriores já existentes.<br />

“b” - FOPEN_MODEBINARY - Abre ficheiro em modo binário (não legível).<br />

“t” - FOPEN_MODETEXT - Abre ficheiro em modo texto (legível).<br />

ePath: Contem um caminho genérico ou de um outro PC, com o <strong>TwinCAT</strong>,<br />

colocado na rede.<br />

bExecute: Ordem de execução FB com a transição de flanco positiva da variável.<br />

tTimeout: Tempo (timeout) máximo para executar a tarefa (antes ser cancelada)<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 3 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

VAR_OUTPUT<br />

bBusy: Esta saída permanece a TRUE até a FB completar a execução da tarefa<br />

(durante o tempo máximo do timeout). Enquanto esta variável estiver a TRUE não<br />

é aceite uma nova ordem de execução da FB.<br />

bError: Esta saída é posta a TRUE se ocorrer um erro durante a execução do<br />

comando. O tipo de erro é indicado com um código em “nErrId”.<br />

nErrId: Contem o tipo de erro ADS ocorrido.<br />

0x703<br />

0x70c<br />

0x716<br />

- Desconhecido ou invalido “nMode” ou “ePath”.<br />

- Ficheiro não encontrado. Caminho ou nome do ficheiro invalido.<br />

- Não existem mais ficheiros livres manuseados.<br />

hFile: Contem informação do endereço (ponteiro) do ficheiro aberto com sucesso.<br />

Exemplo:<br />

Neste exemplo é criado um ficheiro novo (ou abre um já existente) com o nome<br />

“TestFile2.txt”, que está localizado no PC local no directório raiz “C:\” .<br />

NOTA: Podemos usar na variável de entrada da FB “nMode” a combinação de diversos modos funcionais<br />

No máximo 3 como por exemplo:<br />

Mode = [P1] OR [P2] OR [P3]<br />

P1: FOPEN_MODEREAD ou FOPEN_MODEWRITE ou FOPEN_MODEAPPEND<br />

P2: FOPEN_MODEPLUS<br />

P3: FOPEN_MODEBINARY ou FOPEN_MODETEXT<br />

Se não configurado, em modo de texto ou binário. o ficheiro é aberto no modo configurado no sistema. Na<br />

maior parte dos casos é aberto em modo texto.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 4 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2.2 – Função Bloco de escrever / guardar ficheiros (“FB_FileWrite”)<br />

Com esta função bloco podemos escrever e guardar dados num ficheiro. O<br />

ficheiro deverá ter sido criado previamente.<br />

VAR_INPUT<br />

sNetId: É uma string contendo o endereço AMS do PC em que se encontram os<br />

ficheiros e para a qual os comandos ADS serão dirigidos. T_AmsNetId é do tipo<br />

de dados STRING(23) e que levará o endereço AMS (ex. 172.16.17.1.1.1) . Caso<br />

esta variável esteja vazia ou não declarada, por defeito, o sistema assume o PC<br />

local onde está a correr o soft PLC.<br />

hFile: Contem informação do ficheiro anteriormente criada (“file handle”) pela<br />

função bloco “FB_FileOpen”.<br />

pWriteBuff: Contem o endereço do buffer com os dados a serem guardados /<br />

escritos no ficheiro. O buffer pode ser uma simples variável array cujo endereço<br />

pode ser encontrado com o comando ADR.<br />

cbWriteLen: Contem o número de bytes a serem escritos no ficheiro.<br />

bExecute: Ordem de execução da FB com a transição de flanco + da variável.<br />

tTimeout: Tempo de timeout (tempo máximo para executar a tarefa).<br />

VAR_OUTPUT<br />

bBusy: Esta saída permanece a TRUE até a FB completar a tarefa (tempo<br />

máximo de timeout). Enquanto esta variável estiver a TRUE não é aceite uma<br />

nova ordem de execução da FB.<br />

bError: Esta saída é posta a TRUE, se ocorrer um erro durante a execução do<br />

comando. O tipo de erro é indicado com um código em “nErrId”.<br />

nErrId : Contem o tipo de erro ADS que ocorreu .<br />

0x703<br />

0x70E<br />

- Desconhecido ou informação (“file handle”) invalida.<br />

- Ficheiro aberto com método errado.<br />

cbWrite: Contem o nº de bytes escritos com sucesso.<br />

NOTA: Erros de escrita podem ocorrer por diversos motivos e não são assinalados nas variáveis<br />

de saída “bError” e “nErrID”. Se ocorrer um erro de escrita o ponteiro dos dados interno do<br />

ficheiro está em uma posição indefinida.<br />

Destaco, entre outros, os seguintes:<br />

- O nº de bytes de dados escritos com sucesso é menor do que o comprimento indicado<br />

(“cbWriteLen”) ou é zero.<br />

- O meio físico (HD, flash memory) onde vão ser escritos os dados encontra-se cheio.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 5 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

Exemplo:<br />

Neste exemplo é guardado / escrito no ficheiro, aberto anteriormente com a<br />

“FB_FileOpen”, 10 bytes do array FILEDATA.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 6 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2.3 – Função Bloco de fechar ficheiro (“FB_FileClose”)<br />

Com esta função bloco fechamos um ficheiro de dados. Só depois deste<br />

procedimento é que podermos manuseá-lo com outras aplicações informáticas.<br />

VAR_INPUT<br />

sNetId : É uma string contendo o endereço AMS do PC em que se encontram os<br />

ficheiros e para a qual os comandos ADS serão dirigidos. T_AmsNetId é do tipo<br />

de dados STRING(23) e que levará o endereço AMS (ex. 172.16.17.1.1.1) . Caso<br />

esta variável esteja vazia ou não declarada, por defeito, o sistema assume o PC<br />

local onde está a correr o soft PLC.<br />

hFile: Contem informação do ficheiro anteriormente criada (“ file handle”) pela<br />

função bloco “FB_FileOpen”.<br />

bExecute: Ordem de execução da FB com a transição de flanco + da variável.<br />

tTimeout: Tempo de timeout (tempo máximo para executar a tarefa).<br />

VAR_OUTPUT<br />

bBusy: Esta saída permanece a TRUE até a FB completar a tarefa (tempo<br />

máximo de timeout). Enquanto esta variável estiver a TRUE não é aceite uma<br />

nova ordem de execução da FB<br />

bError: Esta saída é posta a TRUE se ocorrer um erro durante a execução do<br />

comando . O tipo de erro é indicado com um código em “nErrId”.<br />

nErrId: Contem o tipo de erro ADS ocorrido.<br />

0x703<br />

0x70E<br />

- Desconhecido ou informação (“file handle”) invalida.<br />

- Ficheiro aberto com método errado (ex. com a FB obsoleta FILEOPEN).<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 7 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

Exemplo:<br />

Neste exemplo, o ficheiro de dados associado à variável de entrada “hFile” (“file<br />

handle”) e anteriormente aberto com “FB_FileOpen” , é fechado .<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 8 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2.4 – Outras Funções Bloco de manuseamento de ficheiros<br />

2.4.1 – “FB_FileRead”<br />

Com esta função bloco lemos os dados de um ficheiro , já anteriormente<br />

aberto .<br />

2.4.2 – “FB_FileRename”<br />

Com esta função bloco renomeamos o nome de um ficheiro já existente.<br />

2.4.3 – “FB_FileDelete”<br />

Com esta função bloco apagamos um ficheiro já existente.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 9 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2.4.4 – “FB_EOF”<br />

Verifica a existência no ficheiro do comando EOF (“End Of File”) .<br />

2.4.5 – “FB_FileGets”<br />

Esta função bloco lê , num ficheiro de texto anteriormente aberto , os<br />

dados até encontrar uma string com um comando (ex. “Line feed”, “EOF”<br />

ou um nº máximo de caracteres da string definida em “sLine” ) .<br />

2.4.6 – “FB_FilePuts”<br />

Esta função bloco permite escrever uma string num ficheiro de texto<br />

aberto . O comando de términos da string ($00) não será escrita no ficheiro.<br />

2.4.7 – “FB_FileSeek”<br />

Com esta função bloco o ponteiro (“pointer”) dos dados no ficheiro aberto,<br />

pode ser posicionado em outro endereço pelo programador .<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 10 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2.4.8 – “FB_FileTell”<br />

Com esta função bloco obtemos a posição atual do ponteiro (“pointer”) de<br />

dados do ficheiro aberto. Essa posição é um offset em relação á posição inicial.<br />

2.4.9 – “FB_CreateDir”<br />

Com esta função bloco criamos um novo diretório de ficheiros.<br />

2.4.10 – “FB_RemoveDir”<br />

Esta função bloco apaga um diretório de ficheiros. Não poderá conter<br />

ficheiros ( o directório deverá estar vazio ) .<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 11 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

3 – Programa exemplo de acesso a ficheiros através de PLC<br />

Este exemplo ilustra o uso de diversas funções Bloco, de manuseamento de<br />

ficheiros de dados, da livraria “TcSystem.lib”. Será usada uma instancia da FB<br />

“FB_FileCopy” criada para copiar ficheiros de dados, em binário, existentes em um PC<br />

local ou PC remoto e guarda-los no PC local. Esta Funções Bloco não pode ser usada no<br />

acesso a ficheiros de dados existentes em drives localizados na rede.<br />

3.1 – 1º Exemplo – Programa que copia ficheiros de dados<br />

A sequência do automatismo da copia de dados é despoletado pela transição<br />

positiva da variável boolena “bExecute” e é a seguinte:<br />

a) Abertura dos ficheiros fonte e destino.<br />

b) Leitura do ficheiro fonte e colocação dos dados no buffer.<br />

c) Escrita dos bytes de dados, que foram lidos do buffer, no ficheiro destino.<br />

d) Verifica se o “fim” do ficheiro fonte foi executado. Se não foi, terá de se<br />

repetir os passos b) e c). Se sim salta para o passo e).<br />

e) Fecho dos ficheiros fonte e destino.<br />

O ficheiro é copiado em 1 segmento de cada vez. Neste exemplo, o tamanho do<br />

buffer foi dimensionado para 100 bytes mas poderá ser alterado para outro valor.<br />

3.1.1 - Programa principal (“MAIN”)<br />

Neste exemplo o ficheiro origem “Settings.txt” é copiado do diretório “Temp” do<br />

PC remoto (tem o <strong>TwinCAT</strong> instalado, com o endereço AMS “172.16.2.209.1.1”) para o<br />

ficheiro destino, com o nome “NewSettings.txt”, localizado no diretório “C:\Twincat\” do<br />

PC local.<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 12 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

3.1.2 - Função Bloco (“FB_FileCopy”)<br />

Declaração das variáveis locais (“VAR_INPUT”,”VAR_OUTPUT”,”VAR”)<br />

Implementação do programa em ST - Structured Text .<br />

1º Bloco funcional do programa: Trigger de inicio da sequência das tarefas de<br />

manuseamento de ficheiros, a executar dentro da instrução CASE .<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 13 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

2º Bloco funcional do programa: Sequência de tarefas de manuseamento de<br />

ficheiros.<br />

ETAPA 1 – [Step = 1]: Abrir ficheiro fonte para leitura em formato binário<br />

ETAPA 2 – [Step = 2]: Controlo da abertura do ficheiro fonte<br />

ETAPA 3 – [Step = 3]: Abrir ficheiro destino para escrita em formato binário<br />

ETAPA 4 – [Step = 4]: Controlo da abertura do ficheiro destino<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 14 de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

ETAPA 5 – [Step = 5]: Ler dados do ficheiro fonte<br />

ETAPA 6 – [Step = 6]: Controlo da leitura de dados do ficheiro fonte<br />

ETAPA 7 – [Step = 7]: Escrever dados no ficheiro destino<br />

ETAPA 8 – [Step = 8]: Controlo da escrita de dados no ficheiro destino<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. <strong>15</strong> de 16


NA12 – Manuseamento de ficheiros em PC e CX com <strong>TwinCAT</strong> PLC<br />

ETAPA 9 – [Step = 30]: Fechar ficheiro destino<br />

ETAPA 10 – [Step = 31]: Controlo do fecho do ficheiro destino<br />

ETAPA 11 – [Step = 40]: Fechar ficheiro fonte<br />

ETAPA 12 – [Step = 41]: Controlo do fecho do ficheiro fonte<br />

ETAPA 13 – [Step = 50]: Controlo de erro e fecho da sequência<br />

<strong>BRESIMAR</strong> (<strong>asaTek</strong>) - Jorge Andril (v1.0) Pag. 16 de 16

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!