Migrate Remoter program in LogicLab

Our products SlimLine e Netsyst III are the successors of previous programmable PLC products developed by Elsist, the Picosyst and e families Netsyst I-II. Products that were programmed with Remoter, a development tool entirely designed by us that allowed you to write programs in ladder, instruction list and standard C language. On the market there are tens of thousands of products that run applications developed in Remoter, and over the years, the product has been on the market since 1991, many decide to replace the old products with new ones and find themselves in the need to rewrite the old programs with LogicLab. Here is a classic instruction list program written with 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

If for the ladder language it is intuitive to pass from the Remoter program to the LogicLab program, for the instruction list language it is possible to refer to the Remoter manual to understand how the instructions work. But to rewrite a program my advice is to use the Remoter variable names also in LogicLab, so it's easy to check the two programs so here's the screenshot with the converted program (Download program).

As you can see, I declared all the variables as global variables, assuming the same identifier used in Remoter as a name I 0000 becomes I_0000, F 0000 becomes F_0000 and so on. While if the program is intuitive for the ladder, let's see how it was converted into an instruction list.

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

Here is the description of the IL instructions.

+-------+-----------------+----------------------------------------------------------------------------------+
| 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 also allowed programming in standard C language, in this case it is possible to convert programs using the ST (Structured Text) language whose constructs are very close to those of the C language. The conversion of a program is an operation that can hide many complex points to be circumvented, if there are specific questions, I advise you to post the question on the forum in order to be visible and therefore to help others.

Was this article helpful?