Vai al contenuto
PLC Forum


Da Structured Text A Instruction List - Aiuto in una semplicissima traduzione


Messaggi consigliati

Inserito:

Ciao a tutti, volevo chiedervi come tradurre in instruction list una sequenza tipo questa:

IF ON AND NOT WARNING AND ERR_NUM==0 AND NOT OPEN AND NOT EMP THEN

ALL_ON:=TRUE;

ALL_OFF:=FALSE;

ELSEIF OFF OR WARNING THEN

ALL_ON:=FALSE;

ALL_OFF:=TRUE;

END_IF

________________

spero sappiate aiutarmi.. (so che devo usare solo degli AND, OR, LD, ST e JMP o JMPC p JMPCN, ma ho difficoltà con le parentesi e con il load per le verifiche sulla condizione dell' IF )


Inserita:

la traduzione è molto semplice.

Primo passo : Devi solo leggere e tradurre letteralmente

Secondo passo : Devi inserire i salti facendo dei semplici ragionamneti logici.

Dal primo passo risulterebbe

ld on

andn warning

and(err_num

eq 0

)

andn open

andn emp

s all_on

r all_off

ld off

or warning

r all_on

s all_off

Successivamente inseriamo i salti logici facendo questi ragionamenti:

L'istruzione è IF THEN, ELSE IF THEN cioè

1- SE è vero questo

2- ALLORA questo

3- ALTRIMENTI (cioè solo se non è vero quello detto prima)

4- SE è vero quest'altro

5- ALLORA quest'altro

quindi

(SE) 1-

ld on

andn warning

and(err_num

eq 0

)

andn open

andn emp

(ALLORA) 2-

s all_on

r all_off

ma se le condizioni al punto 1- non sono vere devo saltare il punto 2- come vuole l'istruzione 3- quindi prima di eseguire le istruzioni al punto 2- devo mettere un salto condizionato negato JMPCN cioè se non sono vere

ld on

andn warning

and(err_num

eq 0

)

andn open

andn emp

jmpcn else_if ....... salta ad un'etichetta che per chiarezza chiamo else_if

s all_on

r all_off

else_if: ............. l'etichetta la metto dove voglio riprendere dopo il salto

ld off

or warning

r all_on

s all_off

in ultima analisi nel caso le istruzioni al punto 1- sono vere bisognerà eseguire solo il punto 2- saltando senza condizioni JMP il punto 4- e 5- altrimenti queste ultime verranno eseguite (ed avranno la priorità essendo le ultime)

risultato

ld on

andn warning

and(err_num

eq 0

)

andn open

andn emp

jmpcn else_if

s all_on

r all_off

jmp end_if .......salto per chiarezza alla fine della routine chiamndo l'etichetta end_if

else_if:

ld off

or warning

r all_on

s all_off

end_if:

Inserita:

CHIARO, ESAUSTIVO, SEMPLICE E RIGOROSO!!

complimenti ;)

molto lieto

Inserita:

ah una cosa: nel risultato finale non manca un salto?

ld on

andn warning

and(err_num

eq 0

)

andn open

andn emp

jmpcn else_if

s all_on

r all_off

jmp end_if .......salto per chiarezza alla fine della routine chiamndo l'etichetta end_if

else_if:

ld off

or warning

==================> jmpnc end_if giusto? (discorso a parte, come inserire una tabulazione in un topic? le ho provate quasi tutte :D )

r all_on

s all_off

end_if:

Inserita:

in linea di principio il salto che dici tu sarebbe giusto, ma non è necessario in quanto le istruzioni

r all_on

s all_off

vengono eseguite solo se le condizioni

ld off

or warning

sono vere altrimenti non vengono eseguite ed è come fare un salto!!

La necessità del primo salto è data dalla traduzione dell'operando ELSIF che sta ad indicare che le istruzioni dopo ELSIF devono essere eseguite SOLO SE il primo IF non è vero.

Siccome se le condizioni del primo IF fossero vere io eseguo un salto incondizionato all'etichetta alla fine della routine per non eseguire il secondo IF (ELSIF), bisogna eseguire un salto condizionato al secondo IF (ELSIF) se le condizioni NON sono vere (JMPCN) saltando il salto incondizionato appena detto.

In sintesi la traduzione di IF .. THEN non necessita di salti poichè si tradurrebbe semplicemente con LD... ST. E' l'operando ELSE il vero salto.

Come dici tu non sarebbe sbagliato perchè tradurresti tutti gli IF .. THEN con dei salti (superflui).

Questo in linea di principio perchè in realtà dipende anche dalle istruzioni da eseguire dopo THEN. Infatti io ho tradotto TRUE e FALSE con S e R (ma sono questi operandi già dei salti essi stessi). Se avessi tradotto semplicemente ST o STN avrei dovuto inserire necessariamente un salto.

Spero di non averti confuso le idee.

Inserita:

tutt'altro! ho capito che in R ed S è implicito il concetto condizionale ;)

grazie ancora!!!

un saluto da modena :D

Inserita:

Questo esempio dovrebbe far riflettere sull'uso dell' IL :blink:

Perche' mai uno dovrebbe scrivere paginate di codice quando in ST si risolve tutto in poche righe? :)

  • 5 months later...
Inserita:

Buonasera a tutti!!!!!

Potrei per cortesia sapere dove posso trovare dei manuali sul linguaggio strutturato(ST)??????

Grazie!!!

Inserita:

Frezza89,

Per una veloce introduzione agli Structured Text Constructs, vedi questo IEC 1131 Structured Text Overview Link

Poi, potresti fare riferimento anche al linguaggio Pascal: Link

Esempio di lógica booleana :

// LAD


	 2	  3		 4			1

+---] [----]/[---+---] [----+-----( )-+

+				+		  +

+	5	  6	+		  +

+---] [----]/[---+		  +

+						   +

+	7					  +

+---] [---------------------+



//ST


ARRAY(1..32) of BOOLEAN:  flag32_var  :=FALSE;



flag32_var[1] := (((flag32_var[2] AND NOT flag32_var[3]) OR

				 (flag32_var[5] AND NOT flag32_var[6])) AND

				 flag32_var[4]) OR flag32_var[7];

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...