coquinati Inserito: 25 marzo 2019 Segnala Share Inserito: 25 marzo 2019 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 More sharing options...
Cialtrone Inserita: 26 marzo 2019 Segnala Share Inserita: 26 marzo 2019 (modificato) 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: 26 marzo 2019 da Cialtrone Link al commento Condividi su altri siti More sharing options...
coquinati Inserita: 26 marzo 2019 Autore Segnala Share Inserita: 26 marzo 2019 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 More sharing options...
max.bocca Inserita: 26 marzo 2019 Segnala Share Inserita: 26 marzo 2019 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 More sharing options...
Cialtrone Inserita: 27 marzo 2019 Segnala Share Inserita: 27 marzo 2019 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 More sharing options...
coquinati Inserita: 28 marzo 2019 Autore Segnala Share Inserita: 28 marzo 2019 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 More sharing options...
amed Inserita: 28 marzo 2019 Segnala Share Inserita: 28 marzo 2019 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 More sharing options...
coquinati Inserita: 28 marzo 2019 Autore Segnala Share Inserita: 28 marzo 2019 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 More sharing options...
amed Inserita: 28 marzo 2019 Segnala Share Inserita: 28 marzo 2019 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 More sharing options...
TravelMen Inserita: 5 aprile 2019 Segnala Share Inserita: 5 aprile 2019 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 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