puntalino Inserito: 26 febbraio 2008 Segnala Share Inserito: 26 febbraio 2008 ho il seguente problema se qualcuno può darmi una mano premetto per motivi di tempo non ho usato la funzione cerca e il manualiil mio problema è di alzare una uscita almeno 30-40 volte al secondo la cpu è una 312c il tempo attuale di ciclo è < a 5 secondigrazie a tutti Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 26 febbraio 2008 Autore Segnala Share Inserita: 26 febbraio 2008 scusate <5ms Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 26 febbraio 2008 Segnala Share Inserita: 26 febbraio 2008 Programma un timer nell'OB35, per esempio da 25ms se ti servono 40 commutazioni, 33 ms se te ne servono 30. Ad ogni interruzione alzi l'uscita attraverso una PAW. Ovviamente l'uscita deve essere di tipo statico. Attenzione che le uscite hanno comunque un ritardo Hw di qualche ms. Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 26 febbraio 2008 Autore Segnala Share Inserita: 26 febbraio 2008 grazie livio cosa intendi alzi l'uscita attraverso una PAW Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 27 febbraio 2008 Segnala Share Inserita: 27 febbraio 2008 Normalmente, quando si scrive su un'uscita o si legge un ingresso, non si accede direttamente alla periferia ma alla sua tabella immagine; al termine di ogni ciclo la CPU aggiorna le uscite con il contenuto delle tabelle immagine di uscita e trasferisce lo stato degli ingressi nella realtiva tabella.Se si vuole accedere direttamente alla periferia si usa l'istruzione PEW x.x per leggere e PAW x.x per scrivere. Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 27 febbraio 2008 Autore Segnala Share Inserita: 27 febbraio 2008 grazie livio molto gentile domani provo Link al commento Condividi su altri siti More sharing options...
Luca Bab Inserita: 27 febbraio 2008 Segnala Share Inserita: 27 febbraio 2008 l'istruzione PEW x.x per leggere e PAW x.x per scrivere.non credo che si possa fare direttamente ( ma mi piacerebbe sapere come si fa' se possibile )io lo ho fatto facendo l'uscita poi aggiornando il bytefaccio la q10.1 ( iimmagine )poiL qw10 ( immagine )T pqw10 ( uscite fisiche )CiaoLuca Link al commento Condividi su altri siti More sharing options...
beppeconti Inserita: 27 febbraio 2008 Segnala Share Inserita: 27 febbraio 2008 Si può fare anche l'assegnamento diretto:L 100T PAW24oppureL mb200T PAB32CIAoBeppe Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 27 febbraio 2008 Segnala Share Inserita: 27 febbraio 2008 (modificato) Sì, ma così ne assegni 16oppure8e lui ne doveva usare solo 1.Ciao Modificato: 27 febbraio 2008 da JumpMan Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 28 febbraio 2008 Autore Segnala Share Inserita: 28 febbraio 2008 Meglio 8 che niente oggi provo Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 28 febbraio 2008 Segnala Share Inserita: 28 febbraio 2008 Sì, ma così ne assegni 16 oppure 8e lui ne doveva usare solo 1.Usando una maschera (And e/o Or) modifichi solo il bit che ti serve. Link al commento Condividi su altri siti More sharing options...
Luca Bab Inserita: 28 febbraio 2008 Segnala Share Inserita: 28 febbraio 2008 L 100T PAW24oppureL mb200T PAB32in questo caso ti serve una maschera L qw10 ( immagine )T pqw10 ( uscite fisiche )in questo caso non ti serve niente , poiche' le uscite che non ti interessano ma c'e' altro attaccato , vengono comunque impostate in base all'immagine delle uscitequindi ti fai immediatamente l'immagine dell'uscita che ti serve , poi aggiorni tutto il byteLuca Link al commento Condividi su altri siti More sharing options...
beppeconti Inserita: 28 febbraio 2008 Segnala Share Inserita: 28 febbraio 2008 Avete ragione, mi era sfuggito che Puntalino voleva alzare una sola uscita.CIAoBeppe Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 28 febbraio 2008 Segnala Share Inserita: 28 febbraio 2008 Leggere per leggere è più affidabile leggere lo stato fisico della word di uscita tramite PEW, fare OR con tutti zero tranne il bit interessato e scrivere il risultato tramite PAW (3 istruzioni) Idem per resettare il bit: AND con tutti 1 tranne il bit. Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 28 febbraio 2008 Autore Segnala Share Inserita: 28 febbraio 2008 grazie a tutti oggi ho scritto 4 righe di programma e sembrava che funzionava tutto invece stasera mi sono accorto che a volte al posto di avere un treno di impulsi mi rimangono tutte a 1 fisse ormai erano le 19 ho controllato il tutto ma mio parere grossi problemi non ci sono ma il bello doveva ancora arrivare ad un certo punto spengo il pc faccio gli ultimi due test a pc spento mi ritrovo al posto del treno di impulsi le uscite sempre alte o basse non so dove sto sbagliando vi allego le quattro righe di programma UN "A 0.5" SPB M2 L 0 T PAB 5 U "A 0.1" UN T 9 L S5T#10MS //variando il timer vario la frequenza degli impulsi SS T 9 U T 9 SPB M003// UN "A 0.5"// SPB M2 BEA M003: L 500 T PAB 5 CLR R T 9 L MW 14 L 1 +I T MW 14 //conto gli impulsi inviati all'uscita BEA M2: L 0 T PAB 5il tutto scritto in ob35 in configurazione hardware abilitato ogni 15 ms il tempo ciclo della cpu è inferiore a 5 ms Link al commento Condividi su altri siti More sharing options...
batta Inserita: 28 febbraio 2008 Segnala Share Inserita: 28 febbraio 2008 Gestire l'uscita in OB35 serve per ottenere un treno di impulsi regolare.Se poi in OB35 utilizzi un timer, non ha più senso usare OB35.Ci sono poi altre cose che proprio non capisco.Per esempio:L 500T PAB5Cosa vorresti ottenere con queste istruzioni?Ed ancora:CLRR T9Che senso ha mettere l'istruzione di Reset Timer dopo CLR?Così il reset non verrà mai eseguito.Prova, sempre in OB35, ad inserire le seguenti istruzioni: UN A 5.0 //Leggi stato attuale immagine = A 5.0 //uscita A5.0 ed inverti stato L AB 5 //Leggi immagine byte uscite AB5 T PAB 5 //Aggiornamento immediato usciteAd ogni esecuzione di OB35 l'uscita A5.0 cambierà di stato.Configurando esecuzione di OB35 ogni 15ms, ottieni un'onda quadra con frequenza 33,333HzLe altre uscite rimangono utilizzabili normalmente.Unico "effetto indesiderato" è che tutte le uscite del byte verranno aggiornate immediatamente all'esecuzione di OB35, e non solo a fine scansione. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 29 febbraio 2008 Segnala Share Inserita: 29 febbraio 2008 Unico "effetto indesiderato" è che tutte le uscite del byte verranno aggiornate immediatamente all'esecuzione di OB35, e non solo a fine scansione.Si, ma a parte 5.0 non cambiano di stato Link al commento Condividi su altri siti More sharing options...
batta Inserita: 29 febbraio 2008 Segnala Share Inserita: 29 febbraio 2008 Si, ma a parte 5.0 non cambiano di statoSe con questo intendi dire che non vado a modificare lo stato eventualmente assegnato da programma alle altre 7 uscite, sì.Ed è proprio questo che mi permette di utilizzarle ancoraIn OB35 modifico solo l'immagine dell'uscita A5.0, poi leggo l'immagine di tutte le 8 uscite, ed effettuo l'aggiornamento immediato dello stato fisico delle 8 uscite, copiando il valore dell'immagine sulla periferia.Il sistema è semplice e collaudato. Link al commento Condividi su altri siti More sharing options...
Luca Bab Inserita: 29 febbraio 2008 Segnala Share Inserita: 29 febbraio 2008 Il sistema è semplice e collaudato.Quoto e confermo per esperienza personaleLuca Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 1 marzo 2008 Autore Segnala Share Inserita: 1 marzo 2008 GRAZIE A TUTTIbatail timer lo usato per poter regolare la quantità degli impulsi per non modificare sempre il richiamo di ob35 nella configurazione hardware Ho scritto 500 perche dovevo abilitare diverse uscite contemporaneamentePerché clr non resetta il timer devo mettere prima clr e poi il comando da resettare o mi sto perdendoSe sbaglio mi puoi spiegare dove sbaglioL’errore era L0T pab5Comunque ho utilizzato il tuo esempio è molto piu snello Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 1 marzo 2008 Segnala Share Inserita: 1 marzo 2008 Se con questo intendi dire che non vado a modificare lo stato ..Si è proprio quello che intendevo e che uso di norma. Ho citato l'istruzione PAW invece della PAB solo perchè è quella che mi viene in mente subito. Link al commento Condividi su altri siti More sharing options...
batta Inserita: 1 marzo 2008 Segnala Share Inserita: 1 marzo 2008 Se usi un timer per poter modificare la frequenza degli impulsi, allora non ha più alcu senso usare OB35.La programmazione in OB35 serve se vuoi avere impulsi regolari, che non risentano della scansione del plc.Se in OB35 condizioni poi delle operazioni allo stato di un timer, non solo perdi i vantaggi derivanti dall'utilizzo di un OB a tempo, ma addirittura peggiori la situazione.Immagina di aver appena eseguito OB35, e al tuo timer mancava 1 solo millisecondo per arrivare a fine conteggio. In questo ciclo di OB35 non esegui le funzioni legate al timer, e dovrai aspettare la prossima esecuzione di OB35 per accorgerti che il tempo è scaduto.Se non ti serve grande precisione e se la tua scansione è breve, allora usa pure il timer, ma non in OB35.Perché clr non resetta il timer devo mettere prima clr e poi il comando da resettare o mi sto perdendoSe sbaglio mi puoi spiegare dove sbaglioL'istruzione CLR imposta l'RLC su FALSE.ScrivereCLRR Txxxequivale a scrivere: non resettare il timerE' come se scrivessi:U M0.0R Txxxquando M0.0 è OFF.Se vuoi forzare il reset del timer devi scrivere:SETR TxxxOppure:CLRSE Txxx Link al commento Condividi su altri siti More sharing options...
puntalino Inserita: 2 marzo 2008 Autore Segnala Share Inserita: 2 marzo 2008 grazie bata molto chiaro Link al commento Condividi su altri siti More sharing options...
batta Inserita: 4 marzo 2008 Segnala Share Inserita: 4 marzo 2008 Un altro sistema, sempre senza utilizzo di ob a tempo, potrebbe essere il seguente, che utilizza la variabile locale "#OB1_PREV_CYCLE" L MW 100 //Leggo valore attuale tempo trascorso L #OB1_PREV_CYCLE //leggo tempo ultima scansione +I T MW 100 //Aggiorno tempo trascorso L MW 102 //Calcolo quanto tempo è trascorso dall'ultimo evento -I L 15 <I //Attendo che passino almeno 15 ms SPB M000 UN A 5.0 //Toggle uscita = A 5.0 L MW 102 //Incremento memoria per confronto di 15 millisecondi + 15 T MW 102 M000: NOP 0Queste istruzioni devono tassativamente essere in OB1. Se le vuoi scrivere da qualche altra parte, in ob1 devi appoggiare la variabile locale OB1_PREV_CYCLE ad una variabile visibile da tutto il programma.Questo sistema è più preciso di quello basato sul timer, ma per avere una buona regolarità degli impulsi il tempo di scansione deve essere abbondantemente più breve del semiperiodo (15ms nell'esempio) dell'onda quadra che vuoi ottenere. 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