Você está na página 1de 6

IMPLEMENTAÇÃO DE UM CLP BASEADO NA IEC-61131 SOBRE MICROCONTROLADOR POPULAR E DE BAIXO CUSTO

LADEMIR FERREIRA, JACSON DREHER, GUSTAVO GUEDES.

Instituto Federal de Santa Catarina Chapecó, Santa Catarina, Brasil E-mails: lademirf@hotmail.com, jacson@ifsc.edu.br, gustavo.guedes@ifsc.edu.br

AbstractThis paper presents the development of a small scale PLC (Programmable Logic Controller) using a popular, low-cost microcontroller. The project is based on the IEC-61131 standard, using the programming language IL (Instructions List). For the implementation of the CLP, an ATmega328P microcontroller was chosen in Arduino platform. The basic operators and some IL functions were implemented, as provided in IEC-61131. The software that interprets and executes the user program was developed with the Arduino programming language itself.

KeywordsPLC, microcontroller, Arduino, Instructions List.

ResumoEste artigo apresenta o desenvolvimento de um Controlador Lógico Programável (CLP) de pequeno porte, utilizando um microcontrolador popular e de baixo custo. O projeto foi baseado na IEC-61131 e na linguagem de programação IL (Instructions List). Para a implementação do CLP, foi escolhido o microcontrolador ATmega328P na plataforma Arduino Uno. Foram implementados os operadores básicos e algumas funções da IL, conforme previsto na IEC-61131. O software que interpreta e executa o programa do usuário foi desenvolvido na linguagem de programação do próprio Arduino.

Palavras-chaveCLP, microcontrolador, Arduino, Lista de Instruções.

1

Introdução

Com a crescente necessidade de equipamentos e processos automatizados, é notável o aumento no uso de Controladores Lógicos Programáveis (CLP’s) e, também, na variedade de modelos de hardware e software desenvolvidos pelos diversos fabricantes que disputam esse mercado. Para regulamentar e padronizar os CLP’s, existe a norma IEC-61131. A IEC-61131 se aplica aos CLP’s e seus periféricos associados, tais como: ferramentas de programação e depuração; interfaces homem- máquina (IHM’s); dentre outros itens destinados ao controle de máquinas e processos industriais. Ela estabelece requisitos mínimos para os equipamentos, mas não impõe limites de criação, permitindo que os fabricantes possam desenvolver novas funções conforme suas necessidades. A IEC61131 está dividida em cinco partes, além de dois guias de implementação. A sua terceira parte trata das linguagens de programação, sendo, assim, a que tem maior relevância para este trabalho. Segundo (CHMIEL, MIROSLAW et al., 2015), acreditava-se, nas décadas recentes, que apenas CPU´s dedicadas poderiam ser utilizadas no desenvolvimento de CLP´s. Entretanto, os autores demonstram que é possível desenvolver CLP´s com base em vários microcontroladores típicos. Para (CHMIEL et al., 2015), a utilização de um microcontrolador padrão e popular é uma solução interessante para o desenvolvimento de um CLP de baixo custo e boa qualidade. Este trabalho tem por objetivo apresentar um método de implementação do software de um CLP em

um microcontrolador popular e de baixo custo e em concordância com as especificações da norma IEC 61131-3, e está estruturado da seguinte forma: na Seção 2, é apresentada a estrutura básica de um CLP, tal como definida na norma IEC 61131-3. Na Seção 3, é abordada a linguagem de programação do tipo lista de instruções (IL). A Seção 4 apresenta o sistema operacional proposto e a estrutura do software desenvolvido. Na Seção 5, são apresentados o hardware utilizado para a implementação e teste do projeto e os resultados obtidos. Finalmente, na Seção 6, são apresentadas algumas as conclusões.

  • 2 Estrutura de um CLP

Segundo a (INTERNATIONAL ELECTROTECHNICAL COMMISSION, 2003b), a funcionalidade de um CLP pode ser implementada em uma plataforma específica de hardware e software ou em um computador de uso geral com características de ambiente industrial. A IEC-61131-1 traz a seguinte definição de CLP:

Sistema eletrônico operando digitalmente, projetado para uso em ambiente industrial, que utiliza memória interna programável para o armazenamento de instruções criadas pelo usuário para a execução de funções tais como lógica, sequenciamento, temporização, contagem e aritmética, para controlar, através de entradas e saídas digitais ou analógicas, vários tipos de máquinas ou processos. A estrutura funcional básica de um CLP é definida conforme ilustrado na Figura 1. Essas funções devem comunicar-se entre si e com os sinais da máquina ou processo a ser controlado.

Figura 1. Estrutura funcional básica de um CLP (fonte: IEC- 61131-1). Para (CHMIEL, MIROSŁAW et al.

Figura 1. Estrutura funcional básica de um CLP (fonte: IEC-

61131-1).

Para (CHMIEL, MIROSŁAW et al., 2014), a CPU de um CLP pode ser concebida de várias maneiras, sendo que a sua arquitetura é o fator preponderante para o tempo de execução de uma rotina de controle. Em um CLP, o módulo CPU é responsável pelo armazenamento do programa de aplicação, pelo armazenamento de dados, pelo sistema operacional e pela execução das funções do programa aplicativo. A CPU processa os sinais obtidos de sensores, bem como os do armazenamento interno de dados, e gera sinais para os atuadores e para o armazenamento de dados internos, em conformidade com o programa de aplicação. Conforme (M. CHMIEL et al., 2011), CPUs de CLP´s são frequentemente concebidos como sistemas com múltiplos processadores. Dispositivos FPGA oferecem grandes oportunidades para a construção e avaliação de CPU’s para controladores lógicos programáveis, sendo possível desenvolver-se sistemas micro processados dedicados completos capazes de executar programas de controle de forma eficiente com base em um microprocessador totalmente customizado. Dispositivos programáveis tornam possível, também, trocar a abordagem cíclica- sequencial por uma implementação de hardware massivamente paralela. Ainda de acordo com (M. CHMIEL et al., 2011), a maneira mais simples para implementação da CPU de um CLP é através da utilização de um microprocessador, já que tal concepção de uma unidade central resulta diretamente da execução cíclica e sequencial de programas de controle por controladores.

A

  • 3 Lista de instruções

(INTERNATIONAL

ELECTROTECHNICAL COMMISSION, 2003) define 5 tipos de linguagem para programação do CLP, sendo duas delas textuais - Texto Estruturado (ST) e Lista de Instruções (IL) - e três gráficas - Ladder (LD), Diagrama de Blocos (FBD) e Sequenciamento Gráfico de Funções (SFC).

Segundo (CHMIEL et al., 2015), a lista de instruções pode ser considerada como o conjunto de instruções nativas dos CLP’s, já que, na maioria dos ambientes de programação, os programas desenvolvidos nas demais linguagens são convertidos para IL. A IL é reconhecida como a linguagem mais parecida com a linguagem Assembler, utilizada por muitos microcontroladores, segundo (CHMIEL, MIROSLAW et al., 2015). A IL é composta por uma sequência de instruções, onde cada instrução é formada por um operador e por um ou mais operandos (INTERNATIONAL ELECTROTECHNICAL COMMISSION, 2003a). Cada operador pode, ainda, vir acompanhado de um modificador. Na Tabela 1 são listados os principais operadores básicos da IL. A IL é baseada em operações de valor único, ou seja, cada instrução tem seu resultado gravado como o valor atual (CR) e tal resultado é utilizado, então, pela próxima instrução a ser executada.

Tabela 1. Principais operadores da linguagem Lista de Instruções.

Operador

Código

Descrição/ significado

LD

1

Carrega o operando para o Acumulador

LDN

2

Carrega operando negado para o Acumulador

ST

3

Armazena o conteúdo do Acumulador no local especificado pelo operando

STN

4

 

S

5

Seta o operando para 1 caso o resultado atual seja Boolean 1

R

6

Seta o operando para 0 caso o resultado atual seja Boolean 1

AND

7

 

ANDN

8

Função booleana AND

AND(

9

ANDN(

10

 

OR

11

 

ORN

12

Função booleana OR

OR(

13

ORN(

14

 

XOR

15

 

XORN

16

Função booleana XOR

XOR(

17

ADD

18

Função aritmética Soma

ADD(

19

 

SUB

20

Função aritmética Subtração

SUB(

21

MUL

22

Função aritmética

MUL(

23

Multiplicação

DIV

24

Função aritmética Divisão

DIV(

25

MOD

26

Função aritmética Resto da

MOD(

27

Divisão

GT

28

Comparação maior que(>)

GT(

29

GE

30

Comparação maior ou igual

GE(

31

a” (>=)

EQ

32

Comparação igual a(=)

EQ(

33

NE

34

Comparação diferente de

NE(

35

(< >)

LE

36

Comparação “menor ou igual

LE(

37

a” (<=)

LT

38

Comparação “menor que(<)

LT(

39

)

40

Operador fecha parênteses

TON

41

Temporizador

CTU

42

Contador

Além de operadores e operandos, a IEC 61131-3 apresenta os modificadores que podem ser utilizados na programação. Os dois principais modificadores são o “(”, que indica que a operação atual deve ser adiada até encontrar o operador “)”, e o “N”, que implica que o operando relacionado a aquele operador deve ter seu valor negado. Também é possível a utilização combinada de modificadores. Por exemplo, o operador “ANDN(” indica que o valor do operando negado deve ser armazenado e executa a operação AND com o valor atual, CR, assim que o operador “)” é encontrado.

  • 4 Sistema Operacional

O Sistema Operacional proposto neste trabalho consiste, basicamente, no sistema de controle e execução do programa de usuário gravado na memória não volátil do microcontrolador (EEPROM). Para facilitar a organização do programa, propõe- se um mapeamento de memória, dividindo-se os espaços de memória conforme a capacidade do hardware quanto ao número de entradas e saídas e o número desejado de memórias internas de cada um dos tipos previstos na IEC 61131. As memórias podem ser do tipo retentivo, em que as informações são mantidas mesmo quando desligado o

equipamento, e não-retentivo, cujo conteúdo é perdido

após o desligamento.

As entradas e saídas do CLP devem ser definidas

de acordo com a quantidade de entradas e saídas do

microcontrolador escolhido. Também deve ser

reservado um espaço de memória para os

registradores, como timers e contadores.

O Sistema Operacional deve supervisionar todas

as entradas, saídas e registradores, realizando a leitura

das entradas e atualizando as saídas, conforme o

programa do usuário, a cada ciclo de varredura.

Para que o sistema operacional possa interpretar

corretamente o programa do usuário, foi definida uma

estrutura de programa, conforme mostrado na Tabela

2, para a gravação do programa do usuário na memória

do microcontrolador. A estrutura básica é formada por

seis bytes de informações, onde o primeiro byte é um

código correspondente ao operador que está sendo

utilizado, o segundo byte é um código que

corresponde ao tipo do operando (uma entrada, uma

saída, um tipo de memória ou uma constante) e os

bytes de dois a cinco armazenam o endereço do

operando ou o seu valor, no caso de uma constante.

A IEC 61131 prevê a utilização de dados de até

64 bits. Nesse caso, seria necessário duplicar o campo

de endereço do operando (ou valor, caso constante)

para se obter valores de até 8 bytes; porém, a norma

permite que o fabricante defina as limitações de dados

e capacidade, conforme o hardware utilizado.

Tabela 2: Modelo da estrutura do programa.

 

Tipo do

Endereço do operando ou valor, caso

Operador

operando

constante de até 4 bytes

Byte 0

Byte 1

Byte 2

Byte 3

Byte 4

Byte 5

 

Entrada

     

Entrada

LD

digital

0

0

0

nº 1

A estrutura apresentada na Tabela 2 é válida para todos os operadores e funções padrão definidas na norma; porém, para alguns blocos de funções que necessitam de mais de um operando, pode-se ampliar a estrutura, acrescentando-se mais operandos. A norma permite a criação de novas funções, desde que

o sistema operacional as possa interpretar e executar. A Figura 2 apresenta a sequência lógica de funcionamento do sistema operacional proposto. Inicialmente, são executadas as funções de inicialização, onde se atribuem valores iniciais a todas as variáveis internas e do programa do usuário e são configuradas as entradas e saídas do CLP. Após executar as funções iniciais, o programa entra em um loop, onde é feita a leitura das entradas, a verificação de quais tarefas estão habilitadas e, depois, dentre as tarefas habilitadas, a verificação de qual é a tarefa de maior prioridade de execução, que é então executada. O resultado da execução é, então, atualizado nas saídas e o ciclo se repete.

Figura 2. Funcionamento do Sistema Operacional. Figura 3. Execução de uma tarefa. Para o controle da

Figura 2. Funcionamento do Sistema Operacional.

Figura 2. Funcionamento do Sistema Operacional. Figura 3. Execução de uma tarefa. Para o controle da

Figura 3. Execução de uma tarefa.

Para o controle da execução das tarefas, o sistema operacional utiliza o endereço inicial e final de cada tarefa na memória EEPROM. Esse controle é feito de forma não-preemptiva, ou seja, uma tarefa em execução não é interrompida mesmo que outra tarefa de maior prioridade seja habilitada durante sua execução. A IEC61136-3 estabelece as duas formas de controle (preemptiva e não-preemptiva), mas deixa a critério do fabricante optar pela forma de controle mais adequada à capacidade do hardware utilizado. O sistema operacional faz a leitura do byte que identifica o tipo de operador, conforme listado na Tabela 1, e executa a função correspondente. Após isso, o sistema atualiza o endereço, acrescentando o número de bytes utilizados por aquele operador e seus respectivos operandos, e volta a fazer a leitura do próximo operador a ser executado.

Para cada operador, existe uma função no software que faz a chamada de uma outra função, que realiza a leitura do(s) operando(s) correspondente(s) ao operador que está em execução, conforme mostrado na Figura 4. A função Lê Operando verifica e grava em uma variável o tipo e o valor do operando. A execução é, então, concluída e o endereço é atualizado.

Figura 2. Funcionamento do Sistema Operacional. Figura 3. Execução de uma tarefa. Para o controle da

Figura 4. Função lê operando”.

Caso o operando seja uma constante, os quatro bytes são convertidos em um único valor e armazenados conforme a programação.

 

5

Implementação e resultados

 

Para

a

implementação

e

teste

do sistema

operacional, foi escolhido um microcontrolador ATmega328P (Figura 5) embarcado na plataforma Arduino UNO. A escolha desse modelo de microcontrolador se deu por ser um produto popular, de baixo custo e de fácil programação. O Arduino possui 14 pinos (Figura 6), que podem ser utilizados como entradas ou saídas digitais, dos quais 6 podem ser saídas PWM. Ele tem uma capacidade de memória flash de 32KB, 2KB de memória SRAM e 1KB de memória EEPROM, além de um cristal que possibilita uma frequência de clock de 16 MHz.

Figura 2. Funcionamento do Sistema Operacional. Figura 3. Execução de uma tarefa. Para o controle da

Figura 5. ATmega328P (fonte: datasheet).

Figura 6. Arduino UNO. Neste trabalho, foi desenvolvido um software capaz de executar as funções de

Figura 6. Arduino UNO.

Neste trabalho, foi desenvolvido um software capaz de executar as funções de um CLP, utilizando a linguagem de programação C e a IDE (Integrated Development Environment) própria do Arduino. Foram implementadas funções de inicialização, como a definição das entradas e saídas, e definidos os valores iniciais das variáveis, conforme previsto na norma IEC 61131-3. Para a implementação dos operadores básicos da IL, foi criada uma função para cada operador. Dessa forma, se no decorrer da execução do programa do usuário for encontrado, por exemplo, um operador LD, o software chama a função que executa esta operação e atualiza o endereço para a leitura da próxima instrução. Para testar o funcionamento correto da aplicação, foram inseridos manualmente no software programas de usuário convertidos para o código em bytes, conforme a organização do software prevê.

Figura 6. Arduino UNO. Neste trabalho, foi desenvolvido um software capaz de executar as funções de

Figura 7. Programa Ladder utilizado para teste de operadores básicos.

A Figura 7 ilustra o programa Ladder utilizado nesse teste e, na Tabela 3, é mostrada sua versão em IL.

Tabela 3. Programa em IL utilizado para teste de operadores básicos.

Lista de instruções

LD

I1

AND

I2

OR(N

I3

AND(N

I4

OR

I5

)

 

)

 

ST

Q1

Para constatar o correto funcionamento da funcionalidade de multitarefas, o programa em linguagem Ladder apresentado na Figura 8 foi convertido para IL, conforme mostrado na Tabela 4, e gravado no formato proposto. Esse programa serve também para testar o correto funcionamento de um temporizador implementado.

Figura 6. Arduino UNO. Neste trabalho, foi desenvolvido um software capaz de executar as funções de

Figura 8. Programa Ladder utilizado para teste multitarefas e temporizador.

Tabela 4. Programa em IL utilizado para teste de multitarefas e temporizador

Lista de instruções

Tarefa 1

 

LD

I1

ANDN

I2

ST

Q1

Tarefa 2

 

LD

Q1

TON

T1,1000

LD

T1

AND

I0

ST

Q1

LD

I0

OR

Q3

ANDN

1

ST

Q3

Para validar o funcionamento do software, foram capturados com um osciloscópio os sinais das saídas “Q0” e “Q3”, conforme mostrado na Figura 9. Inicialmente, as duas saídas estão em zero; ao acionar- se a entrada “I0”, a saída “Q3” vai para um e, após o tempo programado de 1 segundo, a saída “Q1” vai para um, reiniciando o temporizador.

Para validar o funcionamento do software, foram capturados com um osciloscópio os sinais das saídas “Q0”

Figura 8. Sinais saídas Q1(amarelo) e Q3 (verde).

Disponível

em:

<http://www.degruyter.com/view/j/eletel.2014.60.iss

ue-1/eletel-2014-0004/eletel-2014-0004.xml>.

Acesso em: 21 out. 2015.

CHMIEL, Miroslaw et al. Popular microcontrollers execute IEC 61131-3 standard operators and

functional blocks in simply automatic control tasks.

ago. 2015, [S.l.]: IEEE, ago. 2015. p. 643648.

Disponível

em:

<http://ieeexplore.ieee.org/lpdocs/epic03/wrapper.ht

m?arnumber=7283950>. Acesso em: 6 out. 2015.

INTERNATIONAL ELECTROTECHNICAL COMMISSION. IEC 61131-3. , 2003 a.

INTERNATIONAL ELECTROTECHNICAL COMMISSION. Programmable controllers. Part 1, Part 1,. Geneva: International Electrotechnical Commission, 2003b.

M. CHMIEL et al. Central Processing Units for PLC

implementation in Virtex-4 FPGA. 18th IFAC World

Congress, v. 18, part 1, p. 78607865, 28 set. 2011.

6

Conclusões

A utilização de microcontroladores populares e de baixo custo para o desenvolvimento de um CLP é uma alternativa viável para aplicações onde não é exigido um desempenho muito alto de hardware. A solução proposta mostra que é possível desenvolver um CLP com as principais funcionalidades comumente implementadas. A utilização da linguagem IL facilita a programação e garante a conformidade com a norma IEC61131-3. O CLP desenvolvido neste trabalho mostrou-se funcional, mesmo em aplicações com multitarefas e com funcionalidades como temporizadores e contadores.

Agradecimentos

Agradeço a todos que, de alguma maneira, contribuíram para o desenvolvimento desse trabalho. À minha esposa, Ivandréia, por me compreender, apoiar e incentivar durante todos esses anos. Aos meus pais, por me ensinarem os valores que me trouxeram até aqui. Em especial, aos meus orientadores Jacson Dreher e Gustavo Guedes, pelas orientações e ensinamentos que fazem a diferença para o trabalho e para a vida.

Referências Bibliográficas

CHMIEL, Mirosław et al. About Implementation of IEC 61131-3 IL Function Blocks in Standard Microcontrollers. International Journal of Electronics and Telecommunications, v. 60, n. 1, 1 jan. 2014.