mazzinga Inserito: 12 ottobre 2009 Segnala Inserito: 12 ottobre 2009 Buongirno,Su un FPX ho provato ad utilizzare la while,ma quando spedisco il tutto al plc ,mando in run e l'ingresso X5 va a 1 il plc va in errore e mi disabilita la comunicazione con il PC.Disabilitando la comunicazione con il PC non riesco a vedere il codice di errore.L'istruzione che ho scritto e questa,il compilatore la compila senza errori WHILE (X5) DO R31:=TRUE; END_WHILE;Secondo voi dovè l'errore?Grazie
del_user_56966 Inserita: 12 ottobre 2009 Segnala Inserita: 12 ottobre 2009 Secondo me non c'è nessun errore che il compilatore può ravvederedurante la compilazione...più semplicemente penso che X5 non verrà mai aggiornata e quindi che il loop superi il tempo di watchdog del PLC...
Gianmario Pedrani Inserita: 12 ottobre 2009 Segnala Inserita: 12 ottobre 2009 Anche secondo me, il problema è che quando entri nel while, non esci più ed entri in un ciclo infinito, mandando il plc in watchdog.. L'errore credo che sia la logica con cui hai pensato al ciclo while!!!
mazzinga Inserita: 12 ottobre 2009 Autore Segnala Inserita: 12 ottobre 2009 OK L'errore credo che sia la logica con cui hai pensato al ciclo while!!! Non sto utilizzando la funzione per realizzare un progetto,ma solo per uso didatticoSe ho capito bene il plc entra in un ciclo infinito,"o quasi" e siccome il timere watchdog non viene azzerato il plc va in errore.E possibile alzare il timer?.Una curiosità personale;l'errore succede anche quando si programma un programma che girerà su un pc o no?,ad esempio in C
Livio Orsini Inserita: 12 ottobre 2009 Segnala Inserita: 12 ottobre 2009 I cicli di while, di do e altri cicli son sempre pericolosi se non si fa attenzione. Se si sbaglia o non si verifica mai la condizione per uscirne il dispositivo (PLC o elaboratore) sta fermo in loop sino a che non interviente un evento Hw (watch dog p,e,) a interrompere il ciclo.Per evitare questo è buona norma mettere un limite, tramite un contatore, che interrompa il ciclo.
del_user_56966 Inserita: 12 ottobre 2009 Segnala Inserita: 12 ottobre 2009 E possibile alzare il timer?.Di sicuro puoi fare un upgrade del watchdog tramite la F142 tipo...IF ON_Start THEN F142_WDT (1005) ' / esegue un upgrade del timer a 100,5 mSEND IFMa la funzione che vuoi fare tu non si dovrebbe eseguire in questo linguaggio o almeno non cosi... penso il suo linguaggio naturale sia la programmazione sequenziale SFC... che è appunto un altro linguaggio dei 5 standard che trovi in FPWIN PRO..Una curiosità personale;l'errore succede anche quando si programma un programma che girerà su un pc o no?,ad esempio in CDipende dall'errore che commetti, se fai un errore tipo quelli che dice Livio direi di si!, mentre il solito tuo programma gestito da un ambiente multitasking può funzionare sempre che in quel caso la gestione del refresh di X5 sia affidata a un task separato, considera comunque che il task del ciclo white rimarrebbe in loop fino al cambio di stato di X5 e in ogni caso l'uso dei cicli di loop richiede sempre molta attenzione...
mazzinga Inserita: 12 ottobre 2009 Autore Segnala Inserita: 12 ottobre 2009 Ho deciso di non ripostare un'altro Topic,perche siamo l'argomento tratta sempre il testo strutturato.Come ho detto sopra,e da poco che sto utilizzando il testo strutturato,devo dire che è tutto un altro mondo,si avvicina molto ai linguaggi di alto livello.Devo convertire in ST una piccola funzione IL,ve la posto:LD R100AND R101S R102DFNR R102In linguaggio ST come viene convertito il tutto?Grazie
Roberto Gioachin Inserita: 12 ottobre 2009 Segnala Inserita: 12 ottobre 2009 In questi casi si usa l'istruzione "IF" non si usa "WHILE".NON si devono fare dei loop per eseguire delle semplici istruzioni paragonanabili a contatti in serie, parellelo e assegnazioni.Prova scrivere IF e premere il tasto "F1"CiaoRoberto
mazzinga Inserita: 13 ottobre 2009 Autore Segnala Inserita: 13 ottobre 2009 Ciao roberto,In questi casi si usa l'istruzione "IF" non si usa "WHILE".Come ho gia detto nel mio precedente, post non c'entra nulla l'istruzione IF con il WHILE,era solo didatticaProva scrivere IF e premere il tasto "F1"Ho provato a scrivere IF e premere F1 "La guida online" ma su IF non esce nulla.Forse e la versione del PRO.Tu che versione hai?Grazie
Roberto Gioachin Inserita: 17 ottobre 2009 Segnala Inserita: 17 ottobre 2009 Scusa mazzinga per il ritardo con cui ti rispondo.La mia risposta precedente dava un pò per scontato che l'. in linea fosse fatto bene, ma trattandosi di programmi tedeschi..........Ho quindi verificato ed ho visto che se vuoi informazioni per la tua richiesta devi cercare sull'. il seguente argomento:". on Transforming your LD Program to an ST Program"In questa pagina trovi gli esempi che ti servono, sia con l'istruzione "IF" sia senza questa istruzione; alla fine non cambia nulla in quanto il compilatore converte il programma in codice plc nello stesso modo.Io comunque sono dell'opinione che il vero vantaggio con questo linguaggio lo si ha quando si lavora con numeri e non con i bit.Mi spiego meglio, le istruzioni a bit sono istruzioni logiche, nella fase di monitoraggio la rappresentazione grafica del ladder ti permette una maggiore immediatezza nell'interpretare la condizioni che producono un certo segnale in uscita.Cio non toglie che per avere una riutilizzabilità del programma fra questo ambiente ed altri, solo questo (ST) è il linguaggio che puoi utilizzare.CiaoRoberto
mazzinga Inserita: 17 ottobre 2009 Autore Segnala Inserita: 17 ottobre 2009 Ok grazie della info.Io comunque sono dell'opinione che il vero vantaggio con questo linguaggio lo si ha quando si lavora con numeri e non con i bit.Sicuramente quando si lavora con i numeri i vantaggi sono notevoli,ma penso che una volta che si entra nell'ottica del'editor rimane abbastanza facile anche la logica a bit.Io ti posso dire che fino a qualche anno fa,circa 5/6,per programmare in linguaggi strutturati,Lista Istruzioni o Testo strutturato sembrava fantascienza.Fino a quando non ho iniziato ad utilizzato il IL "AWL per intenderci"e ti posso dire che è tutto un altro mondo,il Lader lo lasciato perdere e non ricordo neanche più come si utilizza,Scrivere un codice è piu versatile veloce.Ora sto iniziando ad utilizzare il Testo Strutturato e mi trovo ancora meglio del IL sia per la logica a Bit che per i numeri.Diciamo anche che sono gusti.nella fase di monitoraggio la rappresentazione grafica del ladder ti permette una maggiore immediatezza nell'interpretare la condizioni che producono un certo segnale in uscita.Su questo punto sono d'accordo con te,il Lader non lo supera nessuno.Tu che linguaggi usi maggiormente per creare i tuoi codici?Ciao
mazzinga Inserita: 17 ottobre 2009 Autore Segnala Inserita: 17 ottobre 2009 Meglio precisareIo ti posso dire che fino a qualche anno fa,circa 5/6,per programmare in linguaggi strutturati,Lista Istruzioni o Testo strutturato sembrava fantascienza.Naturalmente lo era per me.Grazie
Roberto Gioachin Inserita: 18 ottobre 2009 Segnala Inserita: 18 ottobre 2009 Cerco di imparare ad usarli tutti, ma sopratutto di non usare sempre lo stesso linguaggio per qualsiasi cosa.Naturalmente per la logica utilizzo "ladder", per le sequenze "SFC" per i calcoli... un misto, in futuro vedremo.Di certo una volta compilato, mi vado a vedere il codice plc per verificare quale sia la soluzione meno pesante in termini di dimensione della memoria impegnata.CiaoRoberto
Jtag Inserita: 19 ottobre 2009 Segnala Inserita: 19 ottobre 2009 Di certo una volta compilato, mi vado a vedere il codice plc per verificare quale sia la soluzione meno pesante in termini di dimensione della memoria impegnata.Questo se il problema principale è la memoria! , alias compattezza.Io credo che ci siano 3 parametri fondamentali nei "listati":- Leggibilità (Si generano molte linee, spesso molto semplici POCA COMPATTEZZA)- Compattezza (spesso si usano funzioni ricorsive o chiamate a subroutine, POCO LEGGIBILE)- Velocità (POCO dei precedenti....)Questi tre parametri non vanno molto d'accordo, quindi non sono mai presenti contemporaneamente, dipende quale sia lo scopo primario per cui è scritto un programma.
Roberto Gioachin Inserita: 20 ottobre 2009 Segnala Inserita: 20 ottobre 2009 Questo se il problema principale è la memoria!Se ti ritrovi ad impegnare il 99 percento della memoria programma, certe cose le guardi, eccome.Per la mia esperienza (non sono proprio giovanissimo), un programma ben fatto è sempre facilmente legibile, anche se si utilizzano funzioni ricorsive.I programmatori, sempre secondo me si dovrebbero abituare ad alcune cose importanti.Realizzare programmi sempre comprensibili (che non vuol dire semplici), abbituarsi ad usare il minimo indispensabile delle risorse.Il fatto di abbituarci a sprecare memoria o velocità di elaborazione, potrebbe trovarci impreparati ad ottimizzare, nel momento in cui si arriva ai limiti del plc.Passare ad un taglia superiore non è sempre una soluzione ottimale.Il fatto poi di guardare il risultato sul compilato, mi permette di ottimizzare le mie funzioni e non solo...... Di certo non mi interessa verificare il compilato di tutto un programma, ma non la ritengo una pratica inutile, anche se questa è solo una mia opinione.Io faccio così, gli altri.......CiaoRoberto
Jtag Inserita: 21 ottobre 2009 Segnala Inserita: 21 ottobre 2009 ...... Realizzare programmi sempre comprensibili (che non vuol dire semplici), abbituarsi ad usare il minimo indispensabile delle risorse. .....Concordo a grandi linee....Proprio per questo, pur generalizzando, mi spingevo un po' oltre, per esempio dentro il compilatore Ti faccio un esempio anche se è riferito ad un microprocessore, lo Z80:per azzerare l'accumulatore (registro A) in assembler si scrive LD A,0 semplice e chiaro, ma in memoria l'occupazione è di due byte, uno per l'istruzione e l'altro per il dato.Se ho problemi di memoria allora scrivo Xor A, che di fatto azzera il registro (A=A xor A), ma in memoria occupa un solo byte.In prima battuta la seconda soluzione risulta meno "leggibile", pur essendo più compatta e veloce.
Jtag Inserita: 21 ottobre 2009 Segnala Inserita: 21 ottobre 2009 Un altro esempio....in qualsiasi linguaggio sommare i valori di un vettore per esempio Elementi(1000) si può scrivere così:Totale = 0 For I = 1 to 1000 Totale = Totale + Elementi(I) NEXT I oppure: Totale = 0 Totale = Totale + Elementi(1) Totale = Totale + Elementi(2) Totale = Totale + Elementi(3) ..... Totale = Totale + Elementi(1000)Il risultato è lo identico, il primo codice è compatto ma lento, il secondo codice è veloce ma non compatto!Questo perchè nel primo codice viene eseguito un test sulla variabile I per ogni elemnto del vettore. Si potrebbe quasi dire che il tempo di esecuzzione è doppio rispetto al secondo esempio di codice.
Roberto Gioachin Inserita: 21 ottobre 2009 Segnala Inserita: 21 ottobre 2009 Quello che scrivi non fa una piega, anche per il plc si possono usare strategie diverse con risultati simili a quelli che hai presentato, ma io non mi riferisco a questo tipo di problema.In realtà non mi riferisco alla scelta se utilizzere o no un loop, o una subroutine (Function o Function Block), ma mi riferisco invece alle situazioni in cui uno stesso programma può essere scritto impegnando più o meno variabili e passi di programma, a volte basta anche invertire due condizioni senza che cambi il risultato, per usare qualche bit in più.Secondo me, ripeto, non è una cattiva abitudine tenere sott'occhio il compilatore per capire meglio quello che combina, io ho avuto molte sorprerse.Per chi come me che conosce molto bene il linguaggio "macchina" del plc (Panasonic), guardare il compilato può aiutare anche a non commettere errori, sembra strano ma ti assicuro che non lo è.CiaoRoberto
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