Produtos SlimLine e Netsyst III são os sucessores de produtos programáveis de PLC anteriores desenvolvidos pela Elsist, as famílias Picosyst e e Netsyst I-II. Produtos que foram programados com o Remoter, uma ferramenta de desenvolvimento inteiramente desenhada por nós que permitia escrever programas em ladder, lista de instruções e linguagem C padrão. No mercado existem dezenas de milhares de produtos que executam aplicativos desenvolvidos no Remoter e, ao longo dos anos, o produto está no mercado desde 1991, muitos decidem substituir os produtos antigos por novos e se veem na necessidade de reescrever os programas antigos com LogicLab. Aqui está um programa clássico de lista de instruções escrito com o Remoter.
ORGR
LODT I 0000 ; Pulsante start
ORLT O 0000 ; Comando pompa
ANDT I 0001 ; Pulsante stop
OUTT O 0000 ; Comando pompa
OUTM T 0000 K 0050 ; Pausa comando Ev
ORGR
LODF T 0000 ; Pausa comando Ev
UTCH O 0001 ; Ev acqua
ORGR
LODT T 0000 ; Pausa comando Ev
LTCH O 0001 ; Ev acqua
Se, para a linguagem ladder, for intuitivo passar do programa Remoter para o programa LogicLab, para a linguagem da lista de instruções, é possível consultar o Manual Remoter para entender como as instruções funcionam. Mas, para um programa de reescrever meu conselho é usar os nomes de até variáveis LogicLab remotas, por isso é fácil de fazer um teste entre os dois programas Então aqui está o programa de imagem convertido (Download do programa).
Como você pode ver, eu declarei todas as variáveis como variáveis globais, assumindo o mesmo identificador usado no Remoter como um nome I 0000 torna-se I_0000, F 0000 torna-se F_0000 e assim por diante. Enquanto o programa é intuitivo para a escada, vamos ver como ele foi convertido em uma lista de instruções.
LD I_0000 (* Pulsante start *)
OR O_0000 (* Comando pompa *)
ANDN I_0001 (* Pulsante stop *)
ST O_0000 (* Comando pompa *)
ST T_0000.IN (* Pausa comando Ev *)
LD 500 (* 500 mS *)
ST T_0000.PT
CAL T_0000 (* Pausa comando Ev *)
LDN O_0000 (* Comando pompa *)
R O_0001 (* Ev acqua *)
LD T_0000.Q (* Pausa comando Ev *)
S O_0001 (* Ev acqua *)
Aqui está a descrição das instruções do IL.
+-------+-----------------+----------------------------------------------------------------------------------+
| Istr. | Operandi | Descrizione |
+-------+-----------------+----------------------------------------------------------------------------------+
| LD | Tutti | Carica il valore operando nell'accumulatore |
| LDN | Tutti | Carica il valore negato operando nell'accumulatore |
| ST | Tutti | Trasferisce il valore dell'accumulatore nell'operando |
| STN | Tutti | Trasferisce il valore negato dell'accumulatore nell'operando |
| S | BOOL | Setta l'operando (Accetta solo BOOL) se l'accumulatore è TRUE |
| R | BOOL | Resetta l'operando (Accetta solo BOOL) se l'accumulatore è TRUE |
| AND | Tutti meno REAL | AND a bit tra accumulatore e valore operando, risultato in accumulatore |
| ANDN | Tutti meno REAL | AND a bit tra accumulatore e valore negato operando, risultato in accumulatore |
| OR | Tutti meno REAL | OR a bit tra accumulatore e valore operando, risultato in accumulatore |
| ORN | Tutti meno REAL | OR a bit tra accumulatore e valore negato operando, risultato in accumulatore |
| XOR | Tutti meno REAL | XOR a bit tra accumulatore e valore operando, risultato in accumulatore |
| XORN | Tutti meno REAL | XOR a bit tra accumulatore e valore negato operando, risultato in accumulatore |
| NOT | | Esegue l'inversione a bit del valore in accumulatore |
| ADD | Tutti meno BOOL | Somma tra accumulatore e valore operando, risultato in accumulatore |
| SUB | Tutti meno BOOL | Sottrazione tra accumulatore e valore operando, risultato in accumulatore |
| MUL | Tutti meno BOOL | Moltiplicazione tra accumulatore e valore operando, risultato in accumulatore |
| DIV | Tutti meno BOOL | Divisione tra accumulatore e valore operando, risultato in accumulatore |
| MOD | Tutti meno BOOL | Ritorna il modulo della divisione nell'accumulatore |
| GT | Tutti meno BOOL | Controlla se accumulatore > operando, risultato (BOOL) in accumulatore |
| GE | Tutti meno BOOL | Controlla se accumulatore >= operando, risultato (BOOL) in accumulatore |
| EQ | Tutti meno BOOL | Controlla se accumulatore = operando, risultato (BOOL) in accumulatore |
| NE | Tutti meno BOOL | Controlla se accumulatore <> operando, risultato (BOOL) in accumulatore |
| LE | Tutti meno BOOL | Controlla se accumulatore <= operando, risultato (BOOL) in accumulatore |
| LT | Tutti meno BOOL | Controlla se accumulatore < operando, risultato (BOOL) in accumulatore |
| JMP | Etichetta | Salta incondizionatamente su etichetta |
| JMPC | Etichetta | Salta su etichetta se accumulatore diverso da zero |
| JMPCN | Etichetta | Salta su etichetta se accumulatore uguale a zero |
| CAL | FB | Esegue incondizionatamente il blocco funzione |
| CALC | FB | Esegue blocco funzione se accumulatore diverso da zero |
| CALCN | FB | Esegue blocco funzione se accumulatore uguale a zero |
| RET | | Ritorna incondizionatamente al programma che ha eseguito CALL |
| RETC | | Ritorna al programma che ha eseguito CALL se accumulatore diverso da zero |
+-------+-----------------+----------------------------------------------------------------------------------+
Remoter também permitiu a programação em linguagem C padrão, neste caso, é possível realizar a conversão de programas usando a linguagem ST (Texto Estruturado), cuja construções são muito próximos aos da linguagem C. A conversão de um programa é uma operação que pode esconder muitos pontos complexos para se locomover, se houver dúvidas específicas sugiro que você postar sua pergunta no fórum, de modo a ser visível e, portanto, também fornecem ajuda aos outros.