Vai al contenuto
PLC Forum


come esegue la scansione di un programma il plc


coquinati

Messaggi consigliati

ciao , 

ho dei dubbi che riguardano l abc di un programmatore , ero convinto di avere un idea chiara ma poi mi sono accorto che non è cosi, vi illustro subito il codice.

segmento :1
   
      U     #iniziato_ciclo_b
      U     #start_foro
      FP    #flag_4
      SPBN  B005
      L     #pos_foro_da_effettuare     //misura iniziale
      L     #dist_mm_foro_B             //misura incremento
      +D    
      T     #pos_foro_da_effettuare
B005: NOP   0

 segmento :2     
  
      U     #start_foro
      U     #iniziato_ciclo_b
      FP    #flag_5
      SPBN  B007

      L     #dist_mm_foro_B
      L     #somma_confronto_lato_B
      +D    
      T     #somma_confronto_lato_B
B007: NOP   0

segmento :3
    U(    
      U     #ciclo_lato_A_COMPLETO
      FP    #flag_6
      SPBNB _004
      L     #val_pos_iniziale
      T     #pos_foro_da_effettuare
      SET   
      SAVE  
      CLR   
_004: U     BIE
      )     
      SPBNB _005
      L     0
      T     #somma_confronto_lato_B
      SET   
      SAVE  
      CLR   
_005: U     BIE
      S     #iniziato_ciclo_b

 

l'ultimo segmento è in KOP , chiaramente non riuscendo a inserirlo ho optato alla conversione in AWL , di quest'ultimo non ce molto da analizzare bisogna solo tener conto dell'ultima istruzione cioè il set sul bit (iniziato_ciclo_b) .

ho notato che se inserivo il segmento numero tre all'inizio succedeva che  con il pulsante foro premuto mi eseguiva il calcolo ( cosa che non deve fare il primo ciclo ma bensì il secondo ).

ho invertito i segmenti  come da codice sopra e ho notato che per far eseguire il calcolo da controllore devo far scattare il fronte attraverso il "PULSANTE FORO".(procedimento corretto)

a me non mi è chiara come funziona la scansione di un programma e volevo chiedere un vostro aiuto ,

cordiali saluti

coquinati

Link al commento
Condividi su altri siti


La risposta sembra banale... ma il programma va interpretato dall'alto verso il basso e quando arrivi alla fine ricominci da sopra, visto che non ci sono salti all'indietro.

Le parti di programma racchiuse tra i salti e l'etichetta corrispondente vanno ignorate se la condizione di salto è soddisfatta.

:)

Modificato: da Cialtrone
Link al commento
Condividi su altri siti

4 ore fa, Cialtrone scrisse:

La risposta sembra banale... ma il programma va interpretato dall'alto verso il basso e quando arrivi alla fine ricominci da sopra, visto che non ci sono salti all'indietro.

Le parti di programma racchiuse tra i salti e l'etichetta corrispondente vanno ignorate se la condizione di salto è soddisfatta.

:)

Allora si può dire che il plc crea un immagine degli ingressi  e delle uscite , dopodiché esegue il programma codice per codice e alla fine crea un altra immagine ma per le uscite attive . 

Resta comunque da sottolineare che se attivo un bit al segmento 1 questo bit  lo tiene in considerazione attivo fino alla fine del programma .

giusto ? 

Grazie mille della risposta 

 

Link al commento
Condividi su altri siti

Sui vecchi manuali c'era proprio un grafico a forma circolare dove indicava lettura ingressi, elaborazione, scrittura uscite. Guarda a casi esiste anche lettura e scrittura immediata.

Link al commento
Condividi su altri siti

Buongiorno

Per quanto ne so io la cosa funziona così:

1) Prima dell'elaborazione di OB1 il plc legge gli ingressi fisici e li scrive in una tabella che si chiama IPI (immagine di processo degli ingressi)

Questa tabella fa da riferimento per tutta la scansione del programma, a meno che non vengano interrogate direttamente le periferie (PEW, PED). In questo modo lo stato di un ingresso che cambia durante l'elaborazione non viene preso in considerazione perché questo creerebbe incongruenze. Se vuoi chiarimenti in merito sarò felice di fornirli.

2) Man mano che il programma viene elaborato vengono aggiornate altre tabelle, per esempio quella che tiene conto dello stato dei merker, ma più importante di tutte viene aggiornata l'IPU (immagine di processo delle uscite).

3) La tabella IPU viene trasferita sulle uscite fisiche solo alla fine della scansione di tutto il programma, tranne che per le PAW e PAD (vedi sopra).

4) Ricomincia il ciclo dal punto 1, gli ingressi vengono aggiornati, mentre la tabella dei merker e delle uscite rimane invariata finché non è il programma le modifica con i noti comandi =, S, R, T eccetera.

 

spero di essermi spiegato, se servono chiarimenti non esitare.

Bye

 

Link al commento
Condividi su altri siti

il 27/3/2019 at 08:54 , Cialtrone scrisse:

a meno che non vengano interrogate direttamente le periferie (PEW, PED). In questo modo lo stato di un ingresso che cambia durante l'elaborazione non viene preso in considerazione perché questo creerebbe incongruenze

Buongiorno. inanzitutto ti ringrazio per la risposta, in sostanza gli ingressi analogici vengono sorvegliati costantemente ,  a livello di aggiornamento  del valore stesso,se per esempio la cpu sta eseguendo un programma e al segmento 400 per dire richiamo una PEW  lui terra conto del valore che è applicato quando andrà eseguire il segmento n 400.

il 27/3/2019 at 08:54 , Cialtrone scrisse:

2) Man mano che il programma viene elaborato vengono aggiornate altre tabelle, per esempio quella che tiene conto dello stato dei merker, ma più importante di tutte viene aggiornata l'IPU (immagine di processo delle uscite).

infatti ho notato scrivendo in KOP  al segmento uno attivavo un merker assegnato come bobina  . e sotto di esso c'era un altro segmento con il medisemo   merker  collocato sempre su di una bobina . per renderla attiva dovevo eseguire entrambi i segmenti. altrimenti restava attivo fino a che non svolgeva il segmento 2

 

il 27/3/2019 at 08:54 , Cialtrone scrisse:

 

4) Ricomincia il ciclo dal punto 1, gli ingressi vengono aggiornati, mentre la tabella dei merker e delle uscite rimane invariata finché non è il programma le modifica con i noti comandi =, S, R, T eccetera.

 

spero di essermi spiegato, se servono chiarimenti non esitare.

Bye

 

 

grazie mille chiarissimo .

buonaserata

Link al commento
Condividi su altri siti

Ci sono anche altri modi di gestire la  memoria immagine I/O.

L'aggiornamento di uno o più bit della memoria immagine degli ingressi e il trasferimento del contenuto di uno o più bit della memoria immagine delle uscite sulla periferia delle uscite può avvenire immediatamente all'esecuzione di particoĺari istruzioni nel programma. Si fa così quando si vuole ridurre il tempo di reazione.

Il tempo di reazione è il tempo che intercorre da quando su un ingresso dai l'ordine di accendere o spegnere a quando l'uscita vera e propria viene effettivamente accesa o spenta.

La memoria immagine I/O può anche essere gestita in modo asincrono rispetto la scansione

 

 

Link al commento
Condividi su altri siti

2 ore fa, amed scrisse:

Ci sono anche altri modi di gestire la  memoria immagine I/O.

L'aggiornamento di uno o più bit della memoria immagine degli ingressi e il trasferimento del contenuto di uno o più bit della memoria immagine delle uscite sulla periferia delle uscite può avvenire immediatamente all'esecuzione di particoĺari istruzioni nel programma. Si fa così quando si vuole ridurre il tempo di reazione.

Il tempo di reazione è il tempo che intercorre da quando su un ingresso dai l'ordine di accendere o spegnere a quando l'uscita vera e propria viene effettivamente accesa o spenta.

La memoria immagine I/O può anche essere gestita in modo asincrono rispetto la scansione

molto interessante ,sapevo che si poteva ridurre il tempo di reazione di alcune parti  del software attraverso degli interrupt di processo , ma non pensavo fosse possibile fino a questi livelli.

grazie

il 26/3/2019 at 18:22 , max.bocca scrisse:

Sui vecchi manuali c'era proprio un grafico a forma circolare dove indicava lettura ingressi, elaborazione, scrittura uscite. Guarda a casi esiste anche lettura e scrittura immediata.

ricordo anche io di averlo visto. se salta fuori lo inserisco

Link al commento
Condividi su altri siti

Supponi di avere in segmento un contatto ed una bobina. Sul contatto metti EO.O:P e sulla bobina AO.O:P dove P sta per periferia. Si può in S7-1200/1500 ma non in S7-300. 

 

 

Link al commento
Condividi su altri siti

Ciao "coquinati" piccola domanda, il codice che hai postato è all'interno di una FB o FC, le variabili che vedo come sono definite?

 

il 28/3/2019 at 23:43 , amed scrisse:

Supponi di avere in segmento un contatto ed una bobina. Sul contatto metti EO.O:P e sulla bobina AO.O:P dove P sta per periferia. Si può in S7-1200/1500 ma non in S7-300. 

 

 

In KOP non lo si può fare ma in awl si, solamente che devi leggere l'intero byte e scrivere l'intero byte esempio:

L PEB0
T EB0

L AB0
T PAB0

Saluti

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