# IEC 61131-3
## IEC 61131-1

A primeira parte da norma IEC 61131 define as informações gerais dos controladores programáveis (CP), delimitando e identificando as principais características relevantes para a seleção e aplicação de CP`s, e também para qualquer equipamento ou acessório ligado à CPU.
Algumas características funcionais associadas são:
* Interface Homem-Máquina: o operário interpreta as funções da máquina, sendo através de monitores, botoeiras, touchscreen, etc;
* Estrutura do hardware do CP;
* Processamento dos sinais;
* Fontes de alimentação.
A programação de um CLP pode ser realizada, bem como sobre uma plataforma de hardware e software específico de um computador de uso geral ou de um computador pessoal com funções de ambiente industrial. Esta norma aplica-se a todos os produtos que executam a função de CLP's e/ou seus periféricos associados.
Ela também foi constituída para que os CLP`s de diferentes fabricantes possam ser utilizados por programas distintos, e não apenas pelos dos próprios fabricantes. Apesar de definir informações gerais dos CLP`s, esta norma não lida com a segurança funcional ou outros aspectos do sistema automatizado, como choques elétricos, riscos de incêndio e erros de operação.

## IEC 61131-2 - Requisitos de Equipamentos e Testes

A parte 2 da norma estabelece requisitos funcionais de Segurança de Manuseio, proteções e recomendações contra Interferências eletromagnéticas e requisitos construtivos elétricos, mecânicos e ambientais.
Outro ponto definido por esta parte da norma refere-se a memórias de backup: tipos, especificação, capacidades. Por consequência das definições de hardware, a parte 2 define também todos os testes necessários à certificação de um determinado CP conforme definido por esta norma.
Está norma se aplica a qualquer produto que exerça função de um PLCs e os periféricos associados.
Os equipamentos contidos neste padrão são para o uso da categoria de sobre tensão 2 (IEC 60664-1), em instalações de baixa tensão, onde a tensão elétrica nominal não exceda AC 1000Volts rms (50/60Hz) ou DC 1500V.
Especificações da norma IEC 61131–2:
* Serviços, armazenamento e transporte requisitos para o PLCs e seus periféricos.
* Requisitos funcionais para PLCs e seus periféricos.
* Requisitos EMC para PLCs e seus periféricos.
* Requisitos de segurança de PLCs e seus periféricos.
* Obriga o fabricante a fornecer informações.
* Metodologia de ensaio e procedimentos que deve ser seguidos para a verificação dos PLCs e seus periféricos, com seus devidos requisitos.
* Testes de rotina de segurança para PLCs e seus periféricos.

## IEC 61131-3 – Linguagens de Programação

A norma IEC em sua parte 3 tem por objetivo:
* Fornecer metodologias de construção de lógicas de programação de forma estruturada e modular, permitindo a quebra dos programas em partes gerenciáveis;
* Definir 5 linguagens de programação, cada uma com suas características, de forma a cobrir a maioria das necessidades de controle atuais;
* Permite o uso de outras linguagens de programação, desde que obedecidas as mesmas formas de chamadas e trocas de dados (Visual Basic, Flow Chart, C++, etc);
* Abordagem e estruturação top-down e bottom-up, fundamentada em 3 princípios:
** Modularização;
** Estruturação
** Reutilização.
Dentro destes aspectos, a IEC 61131-3 define cinco linguagens de programação:
* ST (Structured Text) Texto Estruturado
* IL (Instruction List) Lista de Instruções
* LD (Ladder) Linguagem ladder
* FBD (Function Block Diagram) Diagrama de bloco
* SFC (Sequential Flow Chart) Diagrama de Fluxo
As duas primeiras linguagens acima (ST e IL) são ditas textuais por conterem instruções na forma de texto. As duas seguintes (LD e FBD) são ditas gráficas por possuírem representação na forma de símbolos. A linguagem SFC é normalmente tida como linguagem gráfica, porém também permite programações textuais.
É comum em alguns ambientes de programação que atendem à IEC 61131-3 como o CODESYS, a presença de uma sexta linguagem de programação, conhecida como CFC (do inglês Continuous Function Chart) que não faz parte das definições da norma.

### Principais Definições

* Configurações (Configurations): corresponde ao software necessário à um CLP ou conjunto de CLP´s para que este(s) cumpra(m) suas funções de controle. A configuração define todos os elementos com suas configurações individuais e uma configuração total dada pelo resultado das diversas combinações.
* Recursos (Resources): qualquer elemento com capacidade de processamento dentro de uma configuração, capaz de executar programas. O recurso pode existir fisicamente (CPU do processador, interfaces de operação IHM, gateways de comunicação) ou virtualmente (uso compartilhado de memórias de processamento por softwares distintos).
* Tarefas (Tasks): controla a execução de programas ou blocos funcionais de forma periódica ou por disparo por eventos (“triggers”)
* Unidade de Organização de Programas (POU, do inglês Program Organization Unit): é a forma definida pela norma para se implementar o software do CLP através da associação de variáveis e instruções, utilizando as linguagens da norma ou linguagens adicionais. Portanto, o software aplicativo do Controlador Lógico consiste na criação e associação de POUs entre si.
* Programas (Programs): construído a partir de Blocos Funcionais e Funções em qualquer das linguagens da norma. Pode acessar diretamente as Entradas e Saídas e comunicar com outros programas. Diferentes partes de um programa podem ser controladas por tarefas.
* Blocos Funcionais (Function Blocks): Partes de programas hierarquizados e estruturados de forma a serem parametrizáveis e reutilizáveis. Os dados nos Blocos possuem persistência, mantendo-se inalterados entre cada execução do bloco.Exemplos de blocos funcionais são PID, temporizadores, contadores e blocos criados com funções específicas como controle de motores. Podem ser usados como partes integrantes de Blocos Funcionais mais complexos.
* Funções (Functions): funções ou procedimentos são elementos de programação que, diferentemente de blocos funcionais, não possuem persistência, gerando resultados a cada execução. Exemplos de funções são blocos aritméticos, comparadores e lógicos.
* Variáveis Globais e Locais (Global and Local Variables): Variáveis são declaradas de duas formas: localmente e globalmente. Uma variável é dita Global quando é declarada na Configuração ou no Recurso, passando a ser aceita por todas as partes dentro do nível declarado. Variáveis globais podem ser aceitas também por outras Configurações ou mesmo diferentes CLP´s, desde que devidamente declaradas em cada um deles.

### Tipos de Variáveis

Abaixo estão as definições de tipos de variáveis definidas na norma:
| Tipo | Memória | Limite Mínimo | Limites Máximo | Observações |
| BOOL | 1 bit | False (0) | True (1) | |
| BYTE | 8 bits | 0 | 255 | |
| WORD | 16 bits | 0 | 65535 | |
| DWORD | 32 bits | 0 | 4294967295 | |
| LWORD | 64 bits | 0 | 2$^{64}$-1 | |
| SINT | 8 bits | -128 | 127 | |
| USINT | 8 bits | 0 | 255 | |
| INT | 16 bits | -32768 | 32767 | |
| UINT | 16 bits | 0 | 65535 | |
| DINT | 32 bits | -2147483648 | 2147483647 | |
| UDINT | 32 bits | 0 | 4294967295 | |
| LINT | 64 bits | -2$^{63}$ | 2$^{63}$-1 | |
| ULINT | 64 bits | 0 | 2$^{64}$-1 | |
| REAL | 32 bits | -3.402823e+38 | 3.402823e+38 | |
| LREAL | 64 bits | -1.7976931348623158e+308 | 1.7976931348623158e+308 | |
| TIME | 32 bits | 0 ms | 4294967295 ms | |
| TIME_OF_DAY | 32 bits | 0 (00:00:00AM:000) | 4294967295 (11:59:59 PM:999) | |
| LTIME | 64 bits | 0 | 213503d23h34m33s709ms551us615ns | |
| DATE | 32 bits | 0 (01.01.1970) | 4294967295 (2106-02-07) | |
| DATE_AND_TIME | 32 bits | 0 (1970-01-01, 00:00:00) | 4294967295 (2106-02-07,06:28:15) | |
| STRING | 1 byte por caractere + 1 | | | Codificação ASCII |
| WSTRING | 1 byte por caractere + 1 | | | Codificação Unicode |
A alocação de memória para variáveis do tipo STRING e WSTRING depende da declaração, se não for definida uma dimensão o sistema alocará 80 caracteres para a variável por padrão. A memória alocada sempre será 1 byte por caractere + 1 byte (por exemplo: a declaração STRING[67]ocupará 68 bytes na memória).

## IEC 61131-4 – Orientações para o usuário

Aqui são apresentadas as orientações para que aqueles que querem utilizar os Controladores Lógicos Programáveis possam os comprar e instalar, assim como a seus módulos. Ou seja, indica a forma como seus usuários/fabricantes devem especificar hardware e software necessários ao projeto, assim como instalar, comissionar e certificar o sistema de automação instalado e como formalizar a comunicação entre fornecedores e usuários finais. Essa parte também recomenda quanto a condições ambientais, assim como o uso de fiações corretas e aterramento e supressões de ruídos e transientes. Ela ainda interage com as normas IEC61508 e IEC 61511 que tratam de aplicação de Controladores Lógico Programáveis em sistemas de segurança.

## IEC 61131-5 - Comunicações

A parte 5 está relacionada com os aspectos de comunicação de um Controlador Programável, como a definição do módulo de comunicação, seus blocos funcionais e mecanismos para conexão entre controladores e outros dispositivos de automação. Ele especifica como um controlador pode se comunicar com um servidor ou qualquer outro tipo de dispositivo.
A norma não possui a finalidade de especificar como um dispositivo pode se comunicar com outro através de um controlador (como um servidor ou gateway). O comportamento do controlador como um cliente e servidor de comunicação é especificado independentemente do subsistema de comunicações em particular, mas a funcionalidade de comunicação pode ser dependente das capacidades do subsistema de comunicações utilizado.
Além disso, os meios definidos nesta parte da IEC 61131 podem ser utilizados para comunicações dentro de um programa ou entre programas.

## IEC 61131–6 - Comunicação via Fieldbus

Essa parte da norma especifica os requisitos para controladores programáveis e seus periféricos associados, tal como definido na Parte 1, que se destinam a ser usado como o subsistema de lógica de um elétrico / eletrônico / programável eletrônico (E / E / PE) sistema relacionada com a segurança.
Essa norma é aplica para um FS-PLC com um Safety Integrity Level (SIL) capacidade não superior a SIL 3.
Objetivo da norma 61131-6:
Estabelecer e descrever os elementos do ciclo de vida de segurança de um FS-PLC, em harmonia com o ciclo de vida geral de segurança identificada no IEC 61508-1, -2 e -3.
Estabelecer e descrever os requisitos para FS-PLC HW e SW que se relacionam com os requisitos de segurança e de integridade de segurança funcionais de um sistema relacionado à segurança E / E / PE;
Estabelecer métodos de avaliação para um FS-PLC para essa norma e os seguintes critérios:
Reivindicação Safety Integrity Level (SIL) para o qual a FS-PLC é capaz.
A probabilidade de falha no valor demanda (PFD);
Uma frequência média de falha perigosa de valor por hora (PFH);
Um valor para a fração de falha segura (SFF);
Um valor para a tolerância a falhas de hardware (HFT);
Um valor para a cobertura de diagnóstico (DC);
Verificação dos processos de ciclo de vida de segurança especificado pelo fabricante FS- PLC estão no lugar;
Estado seguro definido;
As medidas e técnicas para a prevenção e controle de falhas sistemáticas;
Para cada modo de falha abordado nesta norma, o comportamento funcional no estado falhou;
Estabelecer as definições e identificar as principais características relevantes para a selecção e aplicação de FS- PLCs e nos seus periféricos.

## IEC 61131-7 – Programação de controle FUZZY

A norma define e estrutura o uso de linguagem utilizada em programação difusa – Fuzzy Control Language (FCL).
Composta de seis tópicos, essa parte define:
- O escopo e objetivo da programação Fuzzy;
- Referências normativas;
- Termos técnicos;
- Integração da lógica Fuzzy com os CLPs;
- Semânticas e sintaxes da FCL;
- 5 anexos contendo definições, exemplos práticos, símbolos, abreviações e sinônimos;
A lógica fuzzy é uma extensão da lógica booleana, ela admite valores intermediários entre 0 e 1, como se existisse entre o verdadeiro e o falso um talvez, ou um 0,5 entre o 0 e 1.
A programação de controle fuzzy permite uma interface entre outros programas de controle, como podemos ver na figura abaixo.
Como exemplo, temos a programação de um bloco de função fuzzy:
FUNCTION_BLOCK Fuzzy_FB
VAR_INPUT
temp : REAL;
pressure : REAL;
END_VAR
VAR_OUTPUT
valve : REAL;
END_VAR
FUZZIFY temp
TERM cold := (3, 1) (27, 0);
TERM hot := (3, 0 (27, 1);
END_FUZZIFY
FUZZIFY pressure
TERM low := (55, 1) (95, 0);
TERM high:= (55, 0) (95, 1);
END_FUZZIFY
DEFUZZIFY valve
TERM drainage := -100;
TERM closed := 0;
TERM inlet := 100;
ACCU : MAX;
METHOD : COGS;
DEFAULT := 0;
END_DEFUZZIFY
RULEBLOCK No1
AND : MIN;
RULE 1 : IF temp IS cold AND pressure IS low THEN valve IS inlet
RULE 2 : IF temp IS cold AND pressure IS high THEN valve IS closed WITH 0.8;
RULE 3 : IF temp IS hot AND pressure IS low THEN valve IS closed;
RULE 4 : IF temp IS hot AND pressure IS high THEN valve IS drainage;
END_RULEBLOCK
END_FUNCTION_BLOCK

## IEC 61131-8 – Implementação das Linguagens

A oitava parte da norma complementa a terceira de forma a orientar usuários envolvidos com programação, configuração, instalação e manutenção de Controladores Lógicos Programáveis, de forma que a implementação de elementos comuns e linguagens de programação se dê de forma sistematizada, melhorando as práticas e garantindo a qualidade. Essa parte também orienta como devem ser utilizadas linguagens adicionais, assim como variáveis locais e globais.
* A IEC 61131-3 é a terceira parte (de 8) do padrão internacional IEC 61131 para Controladores Lógicos Programáveis (CLPs), e foi originalmente publicada em dezembro de 1993 pela IEC. A versão atual da norma (terceira) foi publicada em Fevereiro de 2013.
A parte três da IEC 61131 estabelece critérios para linguagens de programação e define duas linguagens gráficas e duas linguagens textuais para CLPs:
* Diagrama Ladder (LD), Gráfica.
* Diagrama de Blocos (FBD), Gráfica.
* Texto Estruturado (ST), textual.
* Lista de Instruções (IL), textual.
* Diagrama de Funções Sequenciais (SFC).
* Diagrama de Funções contínuas (CFC).