Vai al contenuto
PLC Forum


Com'è La Logica Di Queste Istruzioni? - Ho messo una O per sbaglio


gluca2

Messaggi consigliati

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'aiuto

Gianluca

Link al commento
Condividi su altri siti


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: da rddiego
Link al commento
Condividi su altri siti

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. :senzasperanza:

Link al commento
Condividi su altri siti

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: da batta
Link al commento
Condividi su altri siti

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

giusto Jumpman difatti riporto dal manuale:

Descrizione dell'operazione

Se RLC = 1, SPB <etichetta di salto> interrompe il flusso lineare delle operazioni logiche e

salta alla destinazione di salto. Il flusso lineare delle operazioni logiche viene ripreso alla

destinazione 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 di

un singolo blocco: l'istruzione di salto e la destinazione di salto devono cioè trovarsi nel

medesimo blocco. Nel blocco può essere riportata un'unica destinazione di salto. L'ampiezza

massima del salto è di -32768 / +32767 parole del codice programma. Il numero massimo di

quante istruzioni possano effettivamente essere saltate dipende da come le istruzioni stesse

sono 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 operazioni

logiche 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

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

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...