MarvinivraM Inserito: 22 ottobre 2008 Segnala Inserito: 22 ottobre 2008 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 THENALL_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 )
rddiego Inserita: 22 ottobre 2008 Segnala Inserita: 22 ottobre 2008 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 risulterebbeld onandn warningand(err_numeq 0)andn openandn emps all_onr all_offld offor warningr all_ons all_offSuccessivamente inseriamo i salti logici facendo questi ragionamenti:L'istruzione è IF THEN, ELSE IF THEN cioè 1- SE è vero questo 2- ALLORA questo3- ALTRIMENTI (cioè solo se non è vero quello detto prima) 4- SE è vero quest'altro 5- ALLORA quest'altroquindi(SE) 1-ld onandn warningand(err_numeq 0)andn openandn emp(ALLORA) 2-s all_onr all_offma 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 vereld onandn warningand(err_numeq 0)andn openandn empjmpcn else_if ....... salta ad un'etichetta che per chiarezza chiamo else_ifs all_onr all_offelse_if: ............. l'etichetta la metto dove voglio riprendere dopo il saltold offor warningr all_ons all_offin 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)risultatold onandn warningand(err_numeq 0)andn openandn empjmpcn else_ifs all_onr all_offjmp end_if .......salto per chiarezza alla fine della routine chiamndo l'etichetta end_ifelse_if:ld offor warningr all_ons all_offend_if:
MarvinivraM Inserita: 23 ottobre 2008 Autore Segnala Inserita: 23 ottobre 2008 CHIARO, ESAUSTIVO, SEMPLICE E RIGOROSO!!complimenti molto lieto
MarvinivraM Inserita: 23 ottobre 2008 Autore Segnala Inserita: 23 ottobre 2008 ah una cosa: nel risultato finale non manca un salto?ld onandn warningand(err_numeq 0)andn openandn empjmpcn else_ifs all_onr all_offjmp end_if .......salto per chiarezza alla fine della routine chiamndo l'etichetta end_ifelse_if:ld offor warning==================> jmpnc end_if giusto? (discorso a parte, come inserire una tabulazione in un topic? le ho provate quasi tutte )r all_ons all_offend_if:
rddiego Inserita: 23 ottobre 2008 Segnala Inserita: 23 ottobre 2008 in linea di principio il salto che dici tu sarebbe giusto, ma non è necessario in quanto le istruzioni r all_ons all_offvengono eseguite solo se le condizionild offor warningsono 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.
MarvinivraM Inserita: 23 ottobre 2008 Autore Segnala Inserita: 23 ottobre 2008 tutt'altro! ho capito che in R ed S è implicito il concetto condizionale grazie ancora!!! un saluto da modena
Claudio Monti Inserita: 24 ottobre 2008 Segnala Inserita: 24 ottobre 2008 Questo esempio dovrebbe far riflettere sull'uso dell' IL Perche' mai uno dovrebbe scrivere paginate di codice quando in ST si risolve tutto in poche righe?
MarvinivraM Inserita: 24 ottobre 2008 Autore Segnala Inserita: 24 ottobre 2008 per una tesina universitaria
Frezza89 Inserita: 24 marzo 2009 Segnala Inserita: 24 marzo 2009 Buonasera a tutti!!!!!Potrei per cortesia sapere dove posso trovare dei manuali sul linguaggio strutturato(ST)??????Grazie!!!
Savino Inserita: 25 marzo 2009 Segnala Inserita: 25 marzo 2009 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];
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora