lappone2 Inserito: 5 novembre 2009 Segnala Inserito: 5 novembre 2009 Salve a tutti.Sono nuovo al mondo SIEMENS e avrei una domanda da porre a chi è più agile nella programmazione di questi PLC.Ipotesi: dovrei progettare un'impianto con 5 stazioni differenti per funzionamento tra loro.Programmare in modo lineare in OB1 non mi sembra comodo , di conseguenza creo 5 FB con DB di istanza (uno per ciascuna macchina).Ora mi chiedo, posso scambiare operandi IN e OUT fuori dai diversi FB senza fare pasticci? Per esempio consensi, allarmi o altro?O sbaglio sistema-ragionamento?
TravelMen Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 Ciao, e ben venuto, io sinceramente non ho capito la tua domanda, ma vediamo se con delle semplici informazioni ti possono bastare:1 - Se non vai a scrivere sullo stesso dato è OK2 - Puoi leggere una variabile n volte +13 - l'ultima operazione di scrittura comandaPer il resto tramite IN e OUT delle FC oppure FB fai tutto quello che vuoi posso aggiungere che se usi FB con DB di istanza dove per esempio hai DBxx.DBX10.0 come OUT e questa viene trasferita alla M100.0 in uscita dalla tua FB il scrivereA DBxx.DBX10.0 oppure A M100.0 ha la stessa valenza dopo il richiamo del tuo FBSe non dovesse bastarti posta un esempio o specifica meglio quello che vuoi fare. Ciao
Savino Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 Ora mi chiedo, posso scambiare operandi IN e OUT fuori dai diversi FB senza fare pasticci?Certo che puoi!
lappone2 Inserita: 6 novembre 2009 Autore Segnala Inserita: 6 novembre 2009 (modificato) Grazie per le risposte, siete stati molto disponibili.Ora mi spiego meglio.Il mio FB1 con DB di Istanza comanda, una stazione che lava e tratta delle piastre di metallo. Di conseguenza ha variabili in ingresso (ingressi digitali, MW, MD ecc) ed uscite (Q0.0, Merker, MW ecc ).Se da FB1 devo mandare un consenso alla macchina comandata da FB2 stazione asciugatrice (es ho finito di lavare, avanti inverter, asciuga il pezzo), uso un merker in uscita da FB1 e lo porto ad un'ingresso di FB2.Mi sono accorto che con FB abbastanza grossi, qualcosa non va... La CPU inizia ad impazzire.Es in FB1 il merker bit in uscita M1.0 è 1, mentre in ingresso su FB2 è a stato 0.Rami di KOP che si accendono da soli senza settare variabili e altri errori variOppure, il mio OP (TP277), inizia a scrivere cazzate in modalità random nei DB dei FB. Modificato: 6 novembre 2009 da lappone2
pelino Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 CiaoCerto che puoi, un FB si appoggia sempre ad un DB di istanza, il riferimento ad un byte oppure ad una parolala puoi sempre ripendere in tutto il resto del tuo programma.Esempio: STAT ( nome ) pippo ( tipo dati ) Word ( indirizzo ) 0.0 è la DB ( istanza ) DBW0 il valore lo puoi gestire in tutto il tuo programma.
lappone2 Inserita: 6 novembre 2009 Autore Segnala Inserita: 6 novembre 2009 (modificato) Ciao, ho capito il funzionamento.Non sono in grado di spiegarmi il perchè dell'anomalia che mi è capitata alcuni giorni fa...Forse ho sbagliato a scrivere una variabile...Cioè, se MW1 è in lettura su parametro IN di FB1 non può essere in scrittura all'interno del FB stesso. Giusto? è una cosa sbagliata ma potrebbe essere a causa di un mio errore di programmazione.E se si, può compromettere la scansione di OB1 e causare l'intera avaria della CPU? Modificato: 6 novembre 2009 da lappone2
TravelMen Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 (modificato) Cioè, se MW1 è in lettura su parametro IN di FB1 non può essere in scrittura all'interno del FB stessoMeglio se la scrivi in uscita al blocco e non durante l'esecuzione del tuo FBEs in FB1 il merker bit in uscita M1.0 è 1, mentre in ingresso su FB2 è a stato 0.Questo accade se vai a scrivere su M1.0 tra la fine di FB1 ed l'inizio di FB2.In oltre ti consiglio, se non l'hai ancora fatto di scomporre la tua FB1, un po come hai fatto con OB1.Premetto che non conosco il tuo impianto e forse ciò che sto per suggerirti non vale, ma io farei una cosa del genere:1 - OB1 -> FC1 (prima macchina) > uscita di FC1 stato della macchina (es: allarmi, segnali di fine ciclo ecc)2 - OB1 -> FC2 (seconda macchina) > uscita di FC2 stato della macchina (es: allarmi, segnali di fine ciclo ecc)In FC1 -> vari FC ed FB che gestiscono la macchinaParte OP:OP scrive è legge in una sua DB, alla fine di OB1 una funzione tipo FC che prende i dati dalle varie macchine e copia i dati nella DB dell'OP, oppure alla fine di ogni FC macchina copio i dati nella DB del OP.Spero di esserti stato utile Modificato: 6 novembre 2009 da TravelMen
lappone2 Inserita: 6 novembre 2009 Autore Segnala Inserita: 6 novembre 2009 Questo accade se vai a scrivere su M1.0 tra la fine di FB1 ed l'inizio di FB2.Mi puoi spiegare meglio per favore... In oltre ti consiglio, se non l'hai ancora fatto di scomporre la tua FB1, un po come hai fatto con OB1.Premetto che non conosco il tuo impianto e forse ciò che sto per suggerirti non vale, ma io farei una cosa del genere:1 - OB1 -> FC1 (prima macchina) > uscita di FC1 stato della macchina (es: allarmi, segnali di fine ciclo ecc)2 - OB1 -> FC2 (seconda macchina) > uscita di FC2 stato della macchina (es: allarmi, segnali di fine ciclo ecc)In FC1 -> vari FC ed FB che gestiscono la macchinaGià fatto.
TravelMen Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 (modificato) Questo accade se vai a scrivere su M1.0 tra la fine di FB1 ed l'inizio di FB2.Mi puoi spiegare meglio per favore...Ci provo, allora, CALL FB1 IN1 := M100.0 OUT1 := M1.0 L 0 T MW0 CALL FB2 IN1 := M1.0 OUT1 := M2.0è vero che M1.0 vale 1 all'uscita del FB1 ma è anche vero vale 0 all'ingresso del FB2 perchè sovrascrivo ma MW0 con una serie di zeri, e nella MW0 si trova anche il bit 1.0 dato che la MW0 è composta dal Byte 0 e dal Byte 1 Modificato: 6 novembre 2009 da TravelMen
lappone2 Inserita: 6 novembre 2009 Autore Segnala Inserita: 6 novembre 2009 (modificato) Ma allora non posso passare valori.Vediamo:M1.0 all'uscita di FB1 è 1 ma all'ingresso di FB2 è 0 perchè lo sovrascrivo. Non è che se M1.0 all'uscita di FB1 è 1 all'uscita di FB2 sarebbe 0 perchè lo sovrascivo? Modificato: 6 novembre 2009 da lappone2
pelino Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 Una variabile in lettura ( parametro IN ) esempio MW10 può essere tranquillamente elaborataall'interno della tua FB, questo senza problemi. Naturalmente il paramotro deve essereTipo dati impostato come word. Se questo non fosse corretto quando richiami l'FB non riuscirestia compilarla e rimarrebbe rossa.Per quanto rigurda l'eventuale stop della CPU ti consiglio di caricare nella CPU i blocchiOB120 e OB121 che non ti mandano in stop la CPU a fronte di un errore, mantenedo comunquela diagnostica attiva. In OB120 e OB121 non far ciclare nulla. per ora.Ciao
TravelMen Inserita: 6 novembre 2009 Segnala Inserita: 6 novembre 2009 Non è che se M1.0 all'uscita di FB1 è 1 all'uscita di FB2 sarebbe 0 perchè lo sovrascivo?esatto equivale all'esempio di prima ma cosi fatto:FB1 VAR... L 0 T MW1 A SENSORE = M1.0 END_FB1 FB2 VAR.... A SENSORE PISTONE = M1.0 END_FB2Nel piccolo esempio il valore della M1.0 in FB1 può valere 1 ma nel FB2 può valere anche 0 Prendi come regola, di non assegnare più di una volta, in tutto il programma una memoria o un uscita PLC.
lappone2 Inserita: 6 novembre 2009 Autore Segnala Inserita: 6 novembre 2009 Nel piccolo esempio il valore della M1.0 in FB1 può valere 1 ma nel FB2 può valere anche 0Prendi come regola, di non assegnare più di una volta, in tutto il programma una memoria o un uscita PLC.Ok è chiaro, se m1.0 md1 mw1 in scittura (OUT) su più FB non vabene.Ma in ingresso (IN) m1.0 è settato a 1 deve esserlo per tutti i FB. Giusto?
batta Inserita: 7 novembre 2009 Segnala Inserita: 7 novembre 2009 Se non ho capito male, tu stai cercando di trasferire tutte le informazioni da una FC/FB all'altra utilizzando i parametri.L'uso dei parametri è comodo e sensato, ma non deve essere spinto all'esasperazione.Voglio dire, non ha senso costruire una FC/FB, per la gestione completa di una stazione, dove ogni singola informazione viene scambiata come parametro.Così facendo, si rischia di ottenere una FC/FB con un numero elevato di parametri, che rende la gestione estremamente scomoda.Del resto se, per esempio, in FC10 imposti il merker M10.0 = 1, in FC11 ti basta leggere lo stato dello stesso M10.0.M10.0 è sempre lui, in tutto il programma. Sono solo le variabili locali che hanno vita solo all'interno della funzione alla quale appartengono.Ed è proprio questo che, forse, ti crea problemi.Ma in ingresso (IN) m1.0 è settato a 1 deve esserlo per tutti i FB. Giusto?Come già detto, un merker è comune a tutto il programma.Se tu, come parametro OUT di una funzione imposti M1.0 = 1, e poi in altre parti dl programma a questo povero M1.0 cambi di stato (magari perché lo utilizzi all'interno di un'altra funzione, o come parametro in uscita in altre parti del programma), come puoi pretendere che tutti gli altri FB, se M1.0 è collegato ad un parametro in ingresso, lo leggano sempre = 1?Una domanda: è possibile vedere un esempio di come si presenta una delle tue funzioni o, almeno, sapere quanti parametri IN/OUT passi?
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