Baseada na Statement List - STL, do STEP 7, a Lista de Instruções implementada no SimuPLC 4.1.0inspira-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 //=VARVarProgramaNomeSignificativo 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:
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 -> loadparamVar |
load_comparparam1,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|
loadparamVar meio | load_comparparam, param meio |
ald_old meio | e
circto_lps -> lpp meio |
lrd meio fim_circto circto_lps
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.