# Lista de instruções

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

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

· Interação entre a linguagem e o código assembly do CLP;
· Documentação mais compacta que a equivalente com relés.

#### Desvantagens

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

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

A tabela 1 apresenta os principais operandos e modificadores da linguagem lista de instruções.
Tabela 1: Principais Operadores da lingugagem LI

### Modificadores

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

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

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:

#### Exemplo 2

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:

#### Exemplo 3

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:

#### Operador S

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

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

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.
Tabela 2: Diferença de mnemônicos de alguns fabricantes.

### TEMPORIZADORES

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

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.