COMO IMPLEMENTAR UM SISTEMA RFID COM UM CLP WAGO E UMA ANTENA IO-LINK BALLUFF
Introdução
Este documento descreve o processo de implementação de um sistema RFID utilizando um CLP Wago e uma antena IO-Link da Balluff, com todo o desenvolvimento sendo realizado no software de programação CODESYS. Ao final desta nota de aplicação, você será capaz de realizar a leitura e escrita de tags, o que permitirá implementar diversas funcionalidades, como controle de acesso, gestão de inventário, rastreamento de produtos e suprimentos, entre outras.
Material Utilizado
- CLP PFC 200 com IP Estático configurado
- Remota IO-Link BNI00HL
- Antena IO-Link BIS01E2
- CODESYS V3.5 SP19 Patch 2
1 – Download dos arquivos necessários para o projeto
Antes de começar a implementação do sistema RFID, é fundamental baixar o descritivo Profinet do mestre IO-Link e a biblioteca com o bloco de operação da antena. Para isso, acesse o site da Balluff, digite na barra de pesquisa o código da remota, nesse caso, BNI00HL, abra a seção de arquivos e baixe o item nomeado GSDML.
Em seguida, acesse a página da antena da mesma forma, siga para o menu de Arquivos e selecione o item BIS FB TC na lista Bloco de função (FB).
Terminado o download desses itens, realize a extração de ambos para uma pasta de sua preferência.
2 – Adicionando a remota IO-Link ao projeto
Nesse passo, iremos instalar o descritivo Profinet do mestre IO-Link na lista de dispositivos do Codesys. Dessa forma, abra seu projeto e acesse Tools > Device Repository.
Uma nova janela será aberta, clique em Install e adicione o arquivo GSDML baixado anteriormente.
Agora, devemos adicionar a Remota IO-Link a lista de dispositivos conectados ao nosso CLP, clique sobre ele com o botão direito, selecione a opção Add Device e adicione um adaptador Ethernet.
Em seguida, dê um duplo clique sobre o adaptador Ethernet na lista de dispositivos e adicione um controlador Profinet.
Posteriormente, selecione com um clique duplo o controlador Profinet na lista de dispositivos, expanda a lista PROFINET IO Slave > I/O > Balluff Networking > BNI IO-Link Master e adicione a remota BNI PG3-508-OC5-Z015 ao projeto.
3 – Configurando a interface de rede da remota IO-Link
Com o CLP conectado ao seu computador, acesse o adaptador Ethernet e aponte a interface de rede para o IP do CLP.
Na sequência, selecione o controlador Profinet com um clique duplo e ajuste a faixa de endereçamento IP dos dispositivos escravos.
4 – Adicionando a antena IO-Link ao projeto
Devemos especificar em qual porta a antena IO-Link será conectada. Assim, clique com o botão direito sobre a porta desejada e selecione a opção Plug Device.
Uma nova janela será aberta, expanda as listas PROFINET IO Submodule e IO-Link Generic Devices, escolha o dispositivo IOL_I/O_32/32_Byte e clique em Plug Device.
5 – Adicionando o function block da antena
Agora, devemos adicionar o componente que é responsável por gerenciar as operações de leitura e escrita da antena nas bibliotecas do Codesys. Desse modo, acesse o repositório de bibliotecas no menu Tools e clique em Install. Na sequência, entre na pasta contendo os arquivos da antena baixados anteriormente, selecione o item nomeado CodesysV3.x_BIS_V_CLM_V10 e finalize clicando em Open.
Em seguida, devemos adicionar a biblioteca ao projeto atual, entre no Library Manager e clique na opção Add Library. Na nova janela que se abriu, preencha o campo de pesquisa com a palavra “bis”, selecione o bloco BIS_V_CLM_COM e finalize no botão OK.
Nesse momento, já estamos com o bloco de função adicionado ao nosso projeto, todavia, esse bloco foi compilado para uma versão antiga do Codesys, tornando-o incompatível com as bibliotecas atuais do programa. A fim de evitarmos conflitos, devemos criar um novo bloco de função idêntico ao bloco da biblioteca. Para isso, clique com o botão direito na Application na lista de dispositivos e selecione Add Object > POU.
Com a nova janela aberta, preencha o nome como “BIS_V_CLM_COM”, marque a opção Function Block e finalize em Add.
Agora, devemos copiar na totalidade o bloco de função da biblioteca para o bloco que acabamos de criar. Assim, acesse o Library Manager na lista de dispositivos, procure a biblioteca CODEYS Common Library Template versão 3.5.15.30, abra o function block BIS_V_CLM_COM e copie tudo para o bloco criado no passo anterior.
Terminado esse processo, podemos voltar ao Library Manager e remover a biblioteca que adicionamos anteriormente.
6 – Configurando as variáveis do function block da antena
Por fim, devemos configurar as variáveis que serão usadas pelo function block para garantir a comunicação e operação correta da antena RFID. Primeiramente, selecione a porta que antena está conectada na lista de Devices, entre no menu PNIO SubModule I/O Mapping e anote os endereços iniciais dos buffers de entrada e saída da antena.
Em seguida, adicione uma lista de variáveis globais clicando com o botão direito sobre Application e selecione as opções Add Object > Global Variable List. Na janela que abrir, apenas finalize clicando em Add.
Agora, abra a lista que acabamos de criar e declare as variáveis correspondentes aos bytes de entrada e saída da antena, garantindo que elas apontem para os endereços de memória verificados no início desta seção. Além disso, é preciso incluir uma constante com o tamanho da tag utilizada na aplicação, como no nosso exemplo está sendo usada a tag BIS0045, atribuímos o valor de 2000 bytes. Desse modo, o código ficará da seguinte forma:
Finalizada a criação das variáveis globais, temos que alterar parte do código do function block BIS_V_CLM_COM. Acesse o bloco e altere as variáveis IOBuSi, DaRCBuSi e DaSDBuSi para “31”, “iTagSize – 1” e “iTagSize – 1”, respectivamente. Ficando da seguinte forma:
Na sequência, vamos instanciar o bloco de função da antena e criar todas as variáveis necessárias para o seu correto funcionamento. Assim, acesse o programa principal e cole a seguinte declaração de variáveis:
PROGRAM PLC_PRG
VAR
bis_V_CLM : BIS_V_CLM_COM;
R_Ready: R_TRIG;
Init: BOOL := FALSE;
Start: BOOL := FALSE;
ProcReset: BOOL := FALSE;
HeadOff: BOOL;
Dynamic: BOOL := FALSE;
DatCarSel: BOOL;
Command: INT := 0;
Offset_Send: INT := 0;
Offset_Receive: INT := 0;
TAG_StartAddr: DINT := 0;
TAG_NumbOfByte: DINT := 64;
WatchdogTime: TIME := TIME#60S0MS;
CopTargetAddr: DINT;
CopRW_HeadNo: INT;
Ready: BOOL := FALSE;
Error: BOOL := FALSE;
ErrorCode: WORD := 0;
MT: BOOL := FALSE;
DatCarrPresent: BOOL := FALSE;
aSendData: ARRAY[0..iTagSize-1] OF BYTE;
aReceiveData: ARRAY[0..iTagSize-1] OF BYTE;
END_VAR
Do mesmo modo, cole o seguinte código na seção de programa:
R_Ready(CLK:=Ready);
Start := SEL(R_Ready.Q, Start, FALSE);
bis_V_CLM(
Init:=Init,
Start:=Start,
ProcReset:=ProcReset,
HeadOff:=HeadOff,
Dynamic:=Dynamic,
Command:=Command,
aInput:=abyInputBuffer,
aSendData:=aSendData,
Offset_Send:=Offset_Send,
Offset_Receive:=Offset_Receive,
TAG_StartAddr:=TAG_StartAddr,
TAG_NumbOfByte:=TAG_NumbOfByte,
WatchdogTime:=WatchdogTime,
CopTargetAddr:=CopTargetAddr,
CopRW_HeadNo:=CopRW_HeadNo,
ProcType:='K',
IoLen:=10,
Ready=>Ready,
Error=>Error,
ErrorCode=>ErrorCode,
MT=>MT,
DatCarrPresent=>DatCarrPresent,
aOutput=>abyOutputBuffer,
aReceiveData=>aReceiveData);
Com essas adições, seu programa principal deve ficar da seguinte forma:
7 – Como Realizar Escrita e Leitura Através do Bloco
Com todos itens do projeto configurados, chegou a hora de testar na prática a comunicação entre a antena e uma tag RFID.
Primeiramente, faça o login no CLP através do comando Alt+F8 e pressione F5 para iniciar o programa. Em seguida, devemos manipular as seguintes variáveis:
· Start – comando para iniciar a operação da antena
· Command – determina qual operação será realizada no sistema
· TAG_StartAddr – endereço de memória em que a operação será executada
· TAG_NumbOfByte – número de bytes que serão utilizados na operação
· aSendData – array que contém os dados a serem gravados na tag
· aReceiveData – array que recebe os dados lidos da tag
Ou seja, para realizar uma operação de escrita de 32 bytes no endereço de memória 0. Devemos atribuir os seguintes valores as variáveis:
· Start – TRUE
· Command – 2
· TAG_StartAddr – 0
· TAG_NumbOfByte – 32
· aSendData – dados que deseja gravar
A seguir, apresentamos um exemplo que escreve 255 nos primeiros 4 bytes de memória de uma tag e 0 nos bytes restantes:
Para a leitura o processo é bem similar, com a diferença de que o valor do comando deve ser alterado para 1 e os dados da tag são transferidos para o array aReceiveData.
Chegamos ao fim! Agora, é só seguir os passos acima e implementar seu sistema RFID conforme as necessidades da sua aplicação.