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
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