Nesus Inserito: 10 settembre 2007 Segnala Share Inserito: 10 settembre 2007 Salve a tutti!! Stavo pensando a come strutturare tutto il programma solo che incontro dei problemi dai quali sorgono dubbi abissali che mi bloccano ;_;Da quanto ho letto sulle guide e dal vostro forum mi è uscita una bozza del genere:Farò un FC dedicato solo all' apertura e chiusura di interruttori con i relativi settaggi dei merker ( per controllare passo passo i movimenti ) ho scelto questa opzione perchè:tutto il PLC verrà poi gestito ( se impostato su REMOTO ) da un programma esterno al plc(chiamato da noi “prometeo”) con un interfaccia a mimici dove verranno richiamate le varie funzioni ( Questo programma utilizza degli indirizzi specifici già predisposti "Holding Register" --> "Bit position" * in pratica lui ha gia un procedimento per comandare da solo gli interruttori e ricevere i consensi). Se invece messo in LOCALE si potrà controllare il tutto sul banco manovra.Qui in basso vi incollo ciò che ho scritto nel programma con accanto i vari commenti:Esempio 1{ FC1 segmento 1: Chiusura I1 U "serv_aux_ok" //Consenso servizi ausiliari attivi U "T1A_aperto" //Consenso T1A aperto U "T1F_aperto" //Consenso T1F aperto = "chiusura_I1" //In uscita mando il comando di chiusura I1 segmento 2: Chiusura T1A U "I1_chiuso" //Consenso I1 chiuso = "chiusura_T1A" //In uscita mando il comando di chiusura T1A OB1 segmento 1: CALL FC1 ( mi richiama tutto l'FC1 ) // qui mi intoppo perché; come fa OB a capire la sequenza da eseguire se e' tutto rinchiuso in FC1? manda in ciclo anche FC1? // se cosi fosse, come posso strutturare la faccenda dei merker avendo sempre un facile utilizzo sul singolo interruttore?( visto che poi da prometeo verranno richiamati i singoli procedimenti?).}Esempio 2:{ FC1 segmento 1: Chiusura I1 U "serv_aux_ok" //Consenso servizi ausiliari attivi U "T1A_aperto" //Consenso T1A aperto U "T1F_aperto" //Consenso T1F aperto = "chiusura_I1" //In uscita mando il comando di chiusura I1 FC2 segmento 2: Chiusura T1A U "I1_chiuso" //Consenso I1 chiuso = "chiusura_T1A" //In uscita mando il comando di chiusura T1A OB1 segmento 1: CALL FC1 //qui se possibile aggiungerei la funzione del merker per passare al passo successivo "CALL FC2" CALL FC2 //qui farei la funzione del temporizzatore con ritardo di .....(devo capire quale temporizzatore si addice al mio caso… Disinserzione o inserzione? Nel caso in cui, passati 2 minuti non raggiunge i 200 giri, va in allarme. // sempre per il temporizzatore mi conviene fare un FC a parte, metterlo come procedimento dentro ob1 oppure infilarlo dentro FC2?**}* Come faccio ad associare ingressi ed uscite a specifici HR e Bit position? qui su s7 si chiamano Data word?** In questo ultimo caso sono andato a vedere sul manuale AWL questa funzione: U E 2.0 (abilitazione) FR T1 U E 2.1 (avvio) L s5t#10s SA T1 U E 2.2 (reset) R T1 U T1 = A 4.0 (uscita) L T1 T MW10 LC T1 T MW12Per esempio nel mio caso il temporizzatore deve partire con l'avvenuta chiusura di T1A(consenso in ingresso E 4.1) attendere 2 minuti controllare se ha raggiunto 200 giri ( ingresso MW 4 ), quindi abilitazione e avvio a cosa si riferisce? ed il reset?Grazie in anticipo per la pazienza nel leggere il papiro Link al commento Condividi su altri siti More sharing options...
kamikaze Inserita: 10 settembre 2007 Segnala Share Inserita: 10 settembre 2007 CALL FC1 ( mi richiama tutto l'FC1 )// qui mi intoppo perché; come fa OB a capire la sequenza da eseguire se e' tutto rinchiuso in FC1? manda in ciclo anche FC1?// se cosi fosse, come posso strutturare la faccenda dei merker avendo sempre un facile utilizzo sul singolo interruttore?( visto che poi da prometeo verranno richiamati i singoli procedimenti?).Normalmente il procedimento adottato dalla CPU dopo il primo avviamento a seguire ciclicamente , e quello di eseguire il programma partendo dalla prima istruzione che incontra in OB1, "blocco organizzativo principale" nel momento che incontra l'istruzione CALL , "chiamata incondizionata ad un blocco o sottoprogramma" abbandona OB1 per elaborare FC1 , eseguendone le sue istruzioni contenute, alla fine di FC1 , l'istruzione BE "fine blocco incondizionato" ritorna nell'OB1 appena sotto l'ultima istruzione CALL eseguita.Seconda cosa, se il tuo programma si limita solo ad eseguire operazioni logiche combinatorie tramite ingressi e uscite con AND , NOT... perche scomodare un blocco FC? Basterebbe anche usare un FB o addirittura un PB.* Come faccio ad associare ingressi ed uscite a specifici HR e Bit position? qui su s7 si chiamano Data word?In realta'si chiamano Data Block DB, l'associazione la devi cercare nel tipo di interfaciamento verso il dispositivo che tu chiami "prometeo".Normalmente esistono vari modi di interagire tra PLC e dispositivi esterni , i pui' comuni sono con scambio di informazioni tramite DB , o "I/Operiferia" nel tuo caso specifico, tramite DB , ma devi sapere il"prometeo" dove va a scrivere/leggere le informazioni nel DB.Ad esempio prometeo usa scambiare la prima word di BD1 , per ,modificare lo stato di quello che tu intendi nel programma come ingressi , e la seconda word di DB1 per leggere lo stato di quelle che tu chiami uscite , quindi il tuo blocco potrebbe diventare: U DB1.dbx0.1 //Consenso servizi ausiliari attivi, pimo bit della prima word di DB1U DB1.dbx0.2 //Consenso T1A aperto,secondo bit della prima word di DB1U DB1.dbx0.3 //Consenso T1F aperto,terzo bit della prima word di DB1= DB1.dbx1.0 //In uscita mando il comando di chiusura I1,pimo bit della seconda word di DB1CALL FC2//qui farei la funzione del temporizzatore con ritardo di .....(devo capire quale temporizzatore si addice al mio caso… Disinserzione o inserzione? Nel caso in cui, passati 2 minuti non raggiunge i 200 giri, va in allarme.// sempre per il temporizzatore mi conviene fare un FC a parte, metterlo come procedimento dentro ob1 oppure infilarlo dentro FC2?**Per un controllo di Timeout usa pure un timer con ritardo all'ecitazione SE , dove l'istruzione FR di abilitazione puoi anche non considerarla, cosi' come il reset a meno che tu non ne abbia veramente bisogno, perche' considera che se vengono a mancare le condizioni che avviano il timer, il suo valore di tempo trascorso viene automaticamante resettato e ricaricato per intero al successivo riavvio ,quindi potrebbe essere:U E 2.0 (abilitazione)U E 2.1 (avvio)L MW4 // carico il valore di MW4L 200 // carico il valore di velocita'<=I // confronto se il valore 'e minore o uguale ( confronto tra numeri interi senza segno)L s5t#10s /carica valore S5 time di 10 secondiSE T1 /carica ritardo all'eccitazione T1U T1= A 4.0 (uscita)Ciao Ivan Link al commento Condividi su altri siti More sharing options...
cisio Inserita: 10 settembre 2007 Segnala Share Inserita: 10 settembre 2007 x kamikazeSeconda cosa, se il tuo programma si limita solo ad eseguire operazioni logiche combinatorie tramite ingressi e uscite con AND , NOT... perche scomodare un blocco FC? Basterebbe anche usare un FB o addirittura un PB.perchè dici questo? il blocco FC è quello giusto: l'FB è solo una complicazione in quanto devi assegnargli anche un DB di istanza e i PB esistono solo in S5 (che io sappia) x nesusda OB1 puoi anche richiamare i singoli FC in modo condizionato con l'istruzione CCU Condizione1CC FC1U Condizione2CC FC2ecc....per il temporizzatore:U E4.1L S5T#2MSE T1L MW4L 200<IU T1= #ALLARMEcosì allo scadere dei 2 minuti si accende il contatto T1 e se MW4 è minore di 200 ... fai quello che devi (non so cosa intendi tu per "andare in allarme")ciao Link al commento Condividi su altri siti More sharing options...
kamikaze Inserita: 11 settembre 2007 Segnala Share Inserita: 11 settembre 2007 perchè dici questo? il blocco FC è quello giusto: l'FB è solo una complicazione in quanto devi assegnargli anche un DB di istanza e i PB esistono solo in S5 (che io sappia) blink.gifCisio......Touche' , dovrei smettere di postare messaggi prima di collegare il cervello..... CiaoIvan Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 11 settembre 2007 Autore Segnala Share Inserita: 11 settembre 2007 Grazie ad entrambe per la risposta celere!Piano piano mi sto avvicinando alla soluzione Quindi procederò nel creare FC con i vari comandi e li richiamerò nell'OB1 man mano seguendo il giusto procedimento. Nell' andare in allarme intendo che, se non raggiunge i 200 giri nel tempo stabilito, mette la macchina in frenatura, quindi farà partire la fase di frenatura e mi segnalerà l'allarme.Grazie ancora =) mi metto all'opera in caso riscontrassi altri problemini vi disturberò ancora Link al commento Condividi su altri siti More sharing options...
cisio Inserita: 13 settembre 2007 Segnala Share Inserita: 13 settembre 2007 Nesus ho tentato di rispondere al tuo MP ma pare che hai la cartella inbox piena e la devi svuotare, per cui ti rispondo quiU E4.1 ( consenso T1A_chiuso )L S5T#2M ( qui setti i 2 minuti )SE T1 ( qui invece SE= ritardo eccitazione & T1 e' il nome del temporizzatore oppure di T1Acioè l'interruttore che va chiuso?)NO!SE T1 -- significa che utilizzi il timer T1 con ritardo all'eccitazione: nella cpu hai a disposizione un numero ben preciso di timer (da 0 a 255) e stai attento a non usare lo stesso timer 2 volte!U T1 -- il bit T1 diventa ON dopo 2 minuti che E4.1 è ON, lo puoi usare come un qualsiasi altro bit (ingresso, uscita, merker) senza alcuna limitazionee quante volte vuoiL MW4 L 200<I ( la variabile I sarebbe una variabile temporanea che prende il valore di 200? )U T1 ( qui sarebbe E4.1 ? )= #ALLARMENO: <I è un operatore di confronto tra i 2 accumulatoriad esempio in questo caso:L MW4 -- carica MW4 nell'accumulatore 1L 200 -- sposta accumulatore 1 in accumulatore 2 e carica la costante 200 nell'accumulatore 1<I -- confronta accumulatore 1 in accumulatore 2: se il primo è minore del secondo setta RLC=1U T1 -- operazione logica AND di RLC e T1= #ALLARMEin parole povere significa: IF (MW4<200 and T1) THEN ALLARME=1ELSE ALLARME=0ENDIFse vuoi capire le singole istruzioni prova a usare l'#### in linea di step7ciao Link al commento Condividi su altri siti More sharing options...
Nesus Inserita: 13 settembre 2007 Autore Segnala Share Inserita: 13 settembre 2007 Ti ringrazio ^^ capito! col fatto che ho lo stesso nominativo anche per l'interruttore non volevo crearmi confusione grazie ancora 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