Migrați programul Remoter în LogicLab

Produsele SlimLine e Netsyst III sunt succesorii produselor PLC programabile anterioare dezvoltate de Elsist, familiile Picosyst și e Netsyst I-II. Produse care au fost programate cu Remoter, un instrument de dezvoltare conceput în întregime de noi, care vă permitea să scrieți programe în ladder, listă de instrucțiuni și limbaj C standard. Pe piata exista zeci de mii de produse care ruleaza aplicatii dezvoltate in Remoter, iar de-a lungul anilor, produsul a fost pe piata din 1991, multi decid sa inlocuiasca produsele vechi cu altele noi si trec in nevoia de a rescrie programele vechi cu LogicLab. Iată un program clasic de listă de instrucțiuni scris cu 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

Dacă pentru limba de scară este intuitivă să treci de la programul Remoter la programul LogicLab, pentru limba de listă de instrucțiuni este posibil să se facă referire la Remoter manual pentru a înțelege cum funcționează instrucțiunile. Dar pentru a rescrie un program, sfatul meu este de a folosi numele variabilelor Remoter și în LogicLab, deci este ușor să verificați cele două programe, așa că aici este captura de ecran cu programul convertit (Descărcați programul).

După cum puteți vedea, am declarat toate variabilele ca variabile globale, presupunând același identificator folosit în Remoter ca un nume I 0000 devine I_0000, F 0000 devine F_0000 și așa mai departe. Dacă programul este intuitiv pentru scară, să vedem cum a fost convertit într-o listă de instrucțiuni.

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

Iată descrierea instrucțiunilor 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        |
+-------+-----------------+----------------------------------------------------------------------------------+

Remoterul a permis, de asemenea, programarea în limbajul standard C, în acest caz este posibilă conversia programelor utilizând limba ST (text structurat) ale cărei construcții sunt foarte apropiate de cele ale limbajului C. Convertirea unui program este o operație care poate ascunde multe puncte complexe care trebuie să fie eludate, dacă există întrebări specifice, vă sfătuiesc să postați întrebarea pe forum pentru a fi vizibilă și, prin urmare, pentru ai ajuta pe ceilalți.

A fost util acest articol?