gluca2 Inserito: 2 maggio 2011 Segnala Share Inserito: 2 maggio 2011 Salve a tutti,riguardando in ufficio un software installato mi sono accorto di aver lasciato un'istruzione di troppo.Non riesco a capire se potrebbe dare vita a comportamenti indesiderati, qualcuno mi può aiutare a capirlo?//Vaerifica massima apertura real cassetto L #PosizioneCassetto L 0.000000e+000 >R SPB M002 L 0.000000e+000 //Verifica superamento posizione massima cassetto T #PosizioneCassetto M002: NOP 0 O //<------Istruzione non desiderata //Arresto immediato del circuito UN #HighHighCurrentON UN #BloccoRapido SPB M004 R #Marcia_Pompa_1 R #Marcia_Pompa_2 R #Marcia_Compressore R #tmp_StartPompa1 L 0.000000e+000 T #PosizioneCassetto M004: NOP 0 [/code]Nelle mie intenzioni la parte di istruzioni deve far si che un valore non scenda sotto lo zero, mentre la parte sotto l'istruzione non voluta dovrebbe azzerare delle uscite nel caso i due ingressi #HighHighCurrentON o #BloccoRapido vadano a true. Secondo voi, potrebbe capitare che nel caso il valore #PosizioneCassetto scenda sotto lo zero vengano eseguite le istruzioni sotto SPB M004, nonostante HighHighCurrente e BloccoRapido siano a true?Grazie mille per l'aiutoGianluca Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 3 maggio 2011 Segnala Share Inserita: 3 maggio 2011 (modificato) così ad occhio direi che non dovrebbe succedere nulla avendo messo l'istruzione NOP 0 che azzera l'RLC.in realtà l'istruzione NOP non modifica l'RLC per cui ho paura che non si riesca ad arrestare la pompa se il valore è maggiore di 0.Viceversa con valore minore di 0 tutto funziona regolarmente in quanto essendo un OR per non saltare e quindi arrestare deve andare a 0 almeno uno dei due bit. Modificato: 3 maggio 2011 da rddiego Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 3 maggio 2011 Segnala Share Inserita: 3 maggio 2011 Anche se il valore è <= 0 hai il problema! l'istruzione SPB infatti setta l'RLC a 1 quando non effettua il salto.Secondo me le istruzioni sotto SPB M004 non le esegue mai. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 4 maggio 2011 Segnala Share Inserita: 4 maggio 2011 (modificato) Concordo con JumpMan.Dopo l'etichetta M002 infatti l'RLC sarà sempre = 1, indipendentemente dal risultato della comparazione.L'operazione NOP 0 non influenza assolutamente l'RLC, quindi...Però... provando col simulatore... funziona. Modificato: 4 maggio 2011 da batta Link al commento Condividi su altri siti More sharing options...
batta Inserita: 4 maggio 2011 Segnala Share Inserita: 4 maggio 2011 In effetti, a pensarci bene, l'istruzione SPB dopo la comparazione è come se fosse un'operazione di assegnazione come, per esempio, assegnare lo stato a un merker con = , R o S.La combinazione logica termina, e l'analisi dell'RLC per le istruzioni logiche seguenti quindi ricomincia. Link al commento Condividi su altri siti More sharing options...
rddiego Inserita: 4 maggio 2011 Segnala Share Inserita: 4 maggio 2011 giusto Jumpman difatti riporto dal manuale:Descrizione dell'operazioneSe RLC = 1, SPB <etichetta di salto> interrompe il flusso lineare delle operazioni logiche esalta alla destinazione di salto. Il flusso lineare delle operazioni logiche viene ripreso alladestinazione di salto. La destinazione di salto viene indicata tramite un'etichetta. Il salto puòessere eseguito sia in avanti che all'indietro. I salti sono eseguibili unicamente all'interno diun singolo blocco: l'istruzione di salto e la destinazione di salto devono cioè trovarsi nelmedesimo blocco. Nel blocco può essere riportata un'unica destinazione di salto. L'ampiezzamassima del salto è di -32768 / +32767 parole del codice programma. Il numero massimo diquante istruzioni possano effettivamente essere saltate dipende da come le istruzioni stessesono state combinate internamente al programma (istruzioni ad una, due, tre parole).Se RLC = 0 il salto non viene eseguito. Il RLC viene settato a "1" e il flusso di operazionilogiche prosegue con l'istruzione seguente.La combinazione logica termina, e l'analisi dell'RLC per le istruzioni logiche seguenti quindi ricomincia.dal manuale capisco che il flusso continua e non ricomincia o se ricomincia riparte con RLC=1 che le istruzioni L e T successive non modificano.E' corretto? Link al commento Condividi su altri siti More sharing options...
gluca2 Inserita: 4 maggio 2011 Autore Segnala Share Inserita: 4 maggio 2011 Ho dovuto rianalizzare il software, perchè a detta del cliente ogni tanto l'impianto di refrigerazione comandato da questo programma ogni tanto si fermava, a suo dire, immotivatamente .Mi era venuto il dubbio che la causa potesse essere quell'istruzione clandestina, ma, anzi, a quanto sembra l'effetto sarebbe proprio il contrario.Comunque nei prossimi giorni farò un visita sul posto e verificherò direttamente la questione.Ringrazio tutti per l'aiuto.Gianluca Link al commento Condividi su altri siti More sharing options...
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