Lista de Instruções (Instruction List) - IL

Previous  Top  Next



Baseada na Statement List - STL, do STEP 7, a Lista de Instruções implementada no SimuPLC 4.1.0 inspira-se no modelo da STL em todas as instruções básicas, porém difere do mesmo quanto a algumas instruções especializadas, bem como às de chamadas de sub-rotinas, controle de loop PID (proporcional, integral e derivativo), comunicação de bytes pelos Ports simulados e tratamento de interrupções.

A IL acrescenta ainda uma instrução da forma //=VAR
VarPrograma NomeSignificativo que associa uma variável do programa a um nome significativo (ela começa com //, o indicador de comentário na STL, para que esta instrução não gere erro de compilação no caso de adaptação do programa em IL para o STEP 7 ou equipamento similar - atentemos que na STL a associação de variáveis a nomes significativos pode ser feita em tabelas à parte, uma para as variáveis globais, no programa principal, e outras para as variáveis locais nas subrotinas e nos módulos de tratamento das interrupções). A IL introduz, também, uma instrução de temporização que não existe na STL - a TOFR, mapeada pela instrução em LCE da forma exemplificada abaixo:

      
quando_não (cond) temporiza_acumula VarTemporização Tempo;

A principal diferença em relação à STL
, no entanto, é que, no SimuPLC 4.1.0, as instruções trazem, no máximo, 3 (três) parâmetros, e não implementam o conceito de tabelas (tables, na STL), o que torna o processo de compilação mais fácil, sem grande perda da força expressiva da linguagem nas instruções básicas implementadas.

Assim, sem o uso de tabelas, a chamada à instrução PID
, que necessita de 8 parâmetros, deve ser feita na Lista de Instruções do SimuPLC por meio de 4 instruções, SPID1, SPID2, SPID3 e PID.

A chamada a sub-rotinas, no SimuPLC 4.1.0
, é feita com um máximo de 2 (dois) parâmetros, passados por valor, ou seja, qualquer alteração feita nestes parâmetros restringe-se ao parâmetro e não influencia a variável utilizada na instrução chamadora. No entanto, os parâmetros constituem sempre variáveis globais ao programa como um todo, não havendo ainda implementação do conceito de variáveis locais no SimuPLC 4.1.0.

Quanto às instruções básicas de manipulação lógica de bits storage (=)
, and (A), or (O), ALD e OLD, o SimuPLC aceita, além do formato STL do STEP 7, também as formas da norma IEC 1131-3: storage (ST), and (AND), or (OR), ANDLD e ORLD. A instrução load (LD) apresenta a mesma forma tanto na STL quanto na norma IEC 1131-3 e as instruções set (S) e reset (R) apresentam quase a mesma forma tanto na STL quanto na norma IEC 1131-3 (a diferença é que na STL há um segundo parâmetro indicando o número de variáveis bit a partir do primeiro será setado ou resetado - na norma IEC 1131-3 não há este parâmetro e na IL do SimuPLC 4.1.0 tal parâmetro pode estar ausente ou presente, mas apenas para compatibilidade de compilação com a STL, pois sempre, independente do valor colocado ali, será considerado apenas como igual a 1 pelo Simulador).

A estrutura gramatical livre de contexto simplificada da linguagem IL implementada no SimuPLC 4.1.0
, na Forma de Backus-Naur (BNF), é a seguinte:

Gramática Simplificada da Lista de Instruções - IL

il         -> variável il

variável   -> variav param, paramVar
variável | e

il         -> network param
circto mais_il

mais_il   -> network param
circto mais_il | e

circto      -> início meio fim_circto mais_circto |
           wdr
mais_circto

mais_circto   -> circto |
e

início      -> load
paramVar |
         load_compar
param1, param2 |
         next
|
         label param
|
         subroutine param
param_call param_call |
         interr param
param_call param_call |
         seq_load paramVar
|
         seq_end

meio    -> and_or paramVar
meio |
      and_or_compar param1,
param2 meio |
      lps
meio fim_circto circto_lps |
      load
paramVar meio |
      load_compar
param, param meio |
      ald_old
meio | e

circto_lps   -> lpp
meio |
         lrd
meio fim_circto circto_lps

fim_circto   -> bobina paramVar
param_call continua |
         compon1T1V paramVar
continua |
         compon1T2V param,
paramVar continua |
         compon2T1V paramVar
continua |
         compon2T2V paramVar,
param continua |
         compon3T2V paramVar,
param continua |
         for
paramVar, param1, param2 continua |
         jump
param continua |
         call
param param_call param_call continua |
         cret
continua |
         creti
continua |
         eni
continua |
         disi
continua |
         atch param,
param continua |
         dtch param
continua |
         rcv param,
param continua |
         xmt param,
param continua |
         seq_transf paramVar
continua |
         spid1
param1, param2
         spid2
param1, param2, param3
         spid3
param1, param2, param3
         Pid
param1, param2, param3

param_call   -> ,
param | e

continua   -> meio fim_circto |
e


onde paramVar (parâmetro variável variant) é um nome que começa com uma letra, e pode ter até 255 caracteres quaisquer, param (parâmetro) pode ser, além de um nome como o anterior, também uma constante, formada por dígitos, onde o símbolo de decimal é o ponto, e compon1T1V, compon1T2V, compon2T1V, compon2T2V, e compon3T2V são componentes com 1, 2 ou 3 terminais de entrada e que atuam sobre 1 ou 2 variáveis, respectivamente.

Obs.1
: as variáveis e instruções no SimuPLC são sensíveis ao caso (case sensitive), ou seja, são consideradas diferentes as formas minúscula e maiúscula da mesma letra. Geralmente, as instruções em LCE são escritas em minúsculas, e em IL são em maiúsculas.

Obs.2
: as vírgulas separando os parâmetros são opcionais, pois o separador efetivo é o espaço, o que implica que os parâmetros não podem conter espaços.

Obs.3
: esta gramática é simplificada, desde que gera alguns programas-fonte que, ainda assim, compilam com erros no compilador implementado, por causa de outras consistências/restrições feitas pelo compilador IL implementado no Simulador. Tais consistências seriam de difícil representação numa gramática livre de contexto. No entanto ela continua útil por gerar um superconjunto dos programas válidos em IL, ou seja, a adequação a ela não é suficiente mas é necessária, ou seja, se o programa não puder ser gerado pela gramática, não é válido, embora tal geração não garanta certeza de validade.