Lista de instruções
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. |
![]() | As referências deste artigo necessitam de formatação. (Dezembro de 2015) |
Lista de Instruções, do inglês, Instruction List (IL), é uma das 5 linguagens amparadas pela norma IEC 61131-3, e é designada para programação de CLPs. Se assemelha ao assembly, pois define mneumônicos, como é feito na mesma. Ideal para programas com poucas quebras no fluxo de execução, para resolução de problemas pequenos e, consequentemente, adequadas para CLPs de mesmo porte. As funções e variáveis são padronizadas todas de acordo com a norma em que está contida, fazendo com que mais que uma linguagem possa ser usada num mesmo programa.
Estrutura
[editar | editar código-fonte]A estrutura da linguagem, como o assembly, utiliza um acumulador para armazenar os resultados parciais durante a execução. Possui comandos load e store. Todas as instruções usam como base o acumulador, ou utilizam ou modificam um registro de valor no mesmo. Operações algébricas entre o valor atual e o operando são definidas pelo operador. O resultado é armazenado no próprio acumulador.
Algumas regras para a estruturação de um programa em IL devem ser seguidas:
· Cada instrução deve começar numa nova linha;
· Toda instrução pode ser precedida de um rótulo, seguido de dois pontos “:”;
· O operador pode incluir um modificador;
· Comentários devem ficar no final da linha, ou em linhas sem instruções;
· O programa pode conter linhas em branco.
VANTAGENS E DESVANTAGENS
[editar | editar código-fonte]Vantagens
[editar | editar código-fonte]· Interação entre a linguagem e o código assembly do CLP;
· Documentação mais compacta que a equivalente com relés.
Desvantagens
[editar | editar código-fonte]· Necessidade de noção de programação assembly;
· Necessidade de familiarização do operador com álgebra booleana;
· Difícil de alterar o código já implementado.
RÓTULO (ETIQUETA)
[editar | editar código-fonte]Em IL, rótulos podem ser utilizados como saltos entre as instruções. Na estrutura do programa, um rótulo pode ser definido como um nome seguido do caractere “:” ou pode ser colocado em uma linha que não contenha nenhuma instrução.
Um programa não pode conter dois rótulos com nomes iguais. O nome dado a um rótulo não deve conter mais de 16 caracteres de cumprimento, sendo que o primeiro caractere deve ser obrigatoriamente uma letra e que os demais caracteres podem ser letras, números ou símbolo “_” (sublinhado).
OPERADORES E MODIFICADORES
[editar | editar código-fonte]A tabela 1 apresenta os principais operandos e modificadores da linguagem lista de instruções.
Operador |
Modificador |
Operando |
Descrição/Significado |
LD |
N |
Carrega o operando para o acumulador | |
ST |
N |
Armazena o conteúdo do acumulador no local especificado pelo operando | |
S |
BOOL |
Valor do operando = 1 | |
R |
BOOL |
Valor do operando = 0 | |
AND |
N, ( |
Função booleana AND | |
& |
N, ( |
Função booleana AND | |
OR |
N, ( |
Função booleana OR | |
XOR |
N, ( |
Função booleana XOR | |
ADD |
Soma | ||
SUB |
Subtração | ||
MUL |
Multiplicação | ||
DIV |
Divisão | ||
GT |
( |
Comparação: Maior que (Greater than - >) | |
GE |
( |
Comparação: Maior ou igual que (Greater or Equal - >=) | |
EQ |
( |
Comparação: Igual a (Equal to - =) | |
NE |
( |
Comparação: Diferente de (Not Equal - !=) | |
LT |
( |
Comparação: Menor que (Less Than - <) | |
LE |
( |
Comparação: Menor ou igual que (Less or Equal - <=) | |
JMP |
C, N |
Nome do Rótulo |
Desvia para o Rótulo “Nome_do_Rotulo |
CAL |
C, N |
Nome da Função |
Executa um bloco de funções |
RET |
C, N |
Retorna de uma função ou bloco de funções |
Tabela 1: Principais Operadores da lingugagem LI
Modificadores
[editar | editar código-fonte]Em LI, os modificadores devem ser colocados após o nome da instrução, sem caractere separador. São permitidos três tipos de modificadores, sendo eles:
· C: Operação condicional;
· N: Inversão lógica do operando;
· (: Operação adiada;
O modificador “C” faz com que a instrução seja executada apenas se o conteúdo atual do acumulador possuir um valor lógico diferente de zero. Já o modificador “N” indica que o operando deve ser invertido antes de ser utilizado pela instrução. O modificador “(“, por sua vez, adia a execução da instrução até que seja encontrado o caractere “)” mais próximo no bloco de instruções.
Operadores
[editar | editar código-fonte]A seguir é apresentado um resumo dos operadores mais comuns na linguagem LI, suas operações e alguns exemplos.
5.2.1 – Operador LD
O operador LD, mnemônico do inglês “LOAD”, carrega um valor para o acumulador e deve ter como operando uma expressão constante.
5.2.2 – Operador ST
O operador ST, mnemônico do inglês “STORE”, carrega transfere o valor de um acumulador para uma variável e deve ter como operando uma variável interna ou de usuário.
Exemplo 1
[editar | editar código-fonte]Implemente um programa na linguagem Lista de instruções (LI) que acenda a lâmpada L sempre que a chave CH fechar e compare com um programa em Ladder.
Solução:
Lista de Instruções:
LD CH
ST L
Ladder:
![](http://upload.wikimedia.org/wikipedia/commons/e/e1/Solucaoexemplo1ladder.png)
Exemplo 2
[editar | editar código-fonte]Implemente a função lógica L=I1.I2.I3 em diagrama Ladder e em Lista de Instruções.
Solução:
Lista de Instruções:
LD I1
AND I2
AND I3
ST L
Ladder:
![](http://upload.wikimedia.org/wikipedia/commons/2/2b/Solucaoexemplo2ladder.png)
Exemplo 3
[editar | editar código-fonte]Implemente a função lógica L=I1+I2+I3 em diagrama Ladder e em Lista de Instruções.
Solução:
Lista de Instruções:
LD I1
OR I2
OR I3
ST L
Ladder:
![](http://upload.wikimedia.org/wikipedia/commons/1/13/Solucaoexemplo3ladder.png)
Operador S
[editar | editar código-fonte]O operador S, mnemônico do inglês “SET”, força uma variável booleana a ir para o estado lógico “1” se o acumulador estiver com o valor VERDADEIRO.
Operador R for
O operador R, mnemônico do inglês “RESET”, transfere o valor “0” para o conteúdo da memória do operando em questão.
Exemplo 4
[editar | editar código-fonte]Faça um programa na linguagem Ladder e Lista de Instruções que corresponda a um contato I1, normalmente aberto, conectado em paralelo a um contato I2, normalmente fechado, e um contato I3, normalmente fechado, em série com ambos. Conectado a este esquema está uma bobina “L” do tipo SET.
Solução:
Lista de Instruções:
LD I1
OR I2
ANDN I3
ST L
Ladder:
![](http://upload.wikimedia.org/wikipedia/commons/f/fc/Solucaoexemplo4ladder.png)
OPERAÇÕES ADIADAS
Na linguagem LI (Lista de Instruções) existe apenas um registrador e, devido a isso, é possível que algumas operações sejam adiadas para alterar a ordem de execução das instruções. Para tal, são utilizados os parênteses, sendo “(“ para dizer que a instrução anterior será adiada e “)” para que a instrução que foi adiada, seja executada. Quando o código chega no operador “(“, o conteúdo do acumulador juntamente ao operador são colocados em uma pilha e assim que o código encontra o operador “)”, o último elemento da pilha é retirado e se dá sequência à operação que foi adiada com o conteúdo agora presente no acumulador.
MNEMÔNICOS DE ALGUNS FABRICANTES
[editar | editar código-fonte]Antes da adoção da norma IEC 61131-3 os mnemônicos utilizados eram diferentes para cada fabricante de PLC, embora possuíssem algumas semelhanças. Com a norma muitos passaram a adotar os mesmo mnemônicos para facilitar a utilização aos usuários.
Há também variação na denominação do tipo de programação, por exemplo, a SIEMENS denomina Statement List (STL).
A tabela abaixo apresenta algumas variações entre fabricantes.
IEC 61131-3 |
SIEMENS |
||
LD |
LD |
LD |
LD |
LDN |
LDI |
LDN |
LD NOT |
AND |
AND |
A |
AND |
ANDN |
ANI |
NA |
AND NOT |
OR |
OR |
O |
OR |
ORN |
ORI |
ON |
OR NOT |
ST |
OUT |
= |
OUT |
Tabela 2: Diferença de mnemônicos de alguns fabricantes.
TEMPORIZADORES
[editar | editar código-fonte]Na programação de PLC os temporizadores são uma importante ferramenta. Existem diversos tipos, entre eles temos o TON e TOF.
TON (Timer on-delay): consiste em um temporizador para ativar ou desativar uma saída após um tempo predeterminado. É ativado quando suas condições forem verdadeiras e, enquanto forem mantidas, o valor o acumulador irá aumentando ate atingir o valor determinado, ligando sua saída. Se as condições são interrompidas, o valor do acumulador será resetado. Um exemplo de utilização é:
TON T1,100
no qual T1 é o nome do temporizador e 100 o tempo, em milissegundos, determinado pelo usuário.
TOF (Timer off-delay): este temporizador é ativador ao detectar uma borda de descida. Sua saída ficará ativa enquanto o sinal for baixo e ate ele atingir o tempo predeterminado. Se o valor da entrada passa a ser alto novamente o temporizador é resetado independente do seu estado. Um exemplo da sua utilização é
TOF T2,400
no qual T2 é o nome do temporizador e 400 o tempo, em milissegundos, determinado pelo usuário
Outros temporizadores utilizados no IL são TP, TONA e TOFA.
CONTADORES
[editar | editar código-fonte]Na programação IL existem três tipos de contadores CTU, CTD e CTUD.
O CTU detecta as bordas de subida do sinal, cada vez que acontece é incrementado o valor do acumulador. Quando este atinge o valor predeterminado a saída é ligada.
O CTD começara com o acumulador em um valor determinado e, cada vez que detectar uma borda de descida no sinal, será decrementado em uma unidade ate atingir o valor zero. Quando este é atingido a saída é ligado.
O funcionamento do CTUD é igual ao do CTU porem possui também uma entrada que diminui o valor do acumulador. A saída somente será ligada quando o valor predeterminado for atingido.
Referências
[editar | editar código-fonte]- (PDF) http://literature.rockwellautomation.com/idc/groups/literature/documents/rm/1747-rm001_-en-p.pdf Em falta ou vazio
|título=
(ajuda) - https://www.pro-face.com/otasuke/files/manual/gpproex/new/refer/mergedProjects/logiccommand/whskin_homepage.htm Em falta ou vazio
|título=
(ajuda) - http://www.ebah.com.br/content/ABAAAeq2EAB/apostila-clp-lista-instrucoes Em falta ou vazio
|título=
(ajuda) - https://docs.google.com/viewer?a=v&pid=forums&srcid=MTAxMjgxNzM3NjMyMjU5OTEwNTEBMDY3NDQ4MTgyNjE0OTY4MzY1NTcBSXlOUGktNGhsdUFKATAuMQEBdjI Em falta ou vazio
|título=
(ajuda)