Dragonfly Inserito: 26 febbraio 2016 Segnala Inserito: 26 febbraio 2016 Ciao ragazzi oggi sono qui per farvi una domanda forse stupida per voi ma per me molto importante.Prima di tutto a volte vedo moltiplicazioni/sottrazioni/addizioni/divisioni per esempio di un numero intero,reale ecc,a cosa serve questa operazione?E poi se volessi fare 2+2 come faccio nello step7 ?Grazie mille in anticipo
Livio Orsini Inserita: 26 febbraio 2016 Segnala Inserita: 26 febbraio 2016 Quote .....addizioni/divisioni per esempio di un numero intero,reale ecc,a cosa serve questa operazione? Quote E poi se volessi fare 2+2 come faccio nello step7 Con l'istruzione di addizione, così ti rispondi anche alla prima domanda cjje tisei fatto. Le faccio io a te un paio di domande. Hai mai sentito parlare di di manuali di istruzione? Hai mai pensato di leggerli/consultarli o, almeno, a leggere l'help in linea dello step7?
Dragonfly Inserita: 26 febbraio 2016 Autore Segnala Inserita: 26 febbraio 2016 Si ho letto se uso add_r sommo nu eri interi in virgola mobile cioè per esempio L EW10 L MW14 +I T DB1.DBW25 E ok ma a cosa mi serve questo?Grazie
Dragonfly Inserita: 26 febbraio 2016 Autore Segnala Inserita: 26 febbraio 2016 io leggo il risultato sulla db e va bene pero' il senso?
Dragonfly Inserita: 26 febbraio 2016 Autore Segnala Inserita: 26 febbraio 2016 La necessità quale è?Grazie mille sempre per la pazienza
Lucky67 Inserita: 26 febbraio 2016 Segnala Inserita: 26 febbraio 2016 Se hai un programma che pesa le mele in una cassa e un'operatore da un pannello operatore dice al plc che vuole aggiungere nella cassa 10 kg di mele, l'operazione di somma dice al plc che il peso che dovrà raggiungere al prossimo step è PESO PRESENTE NELLA CASSA + PESO IMMESSO DALL'OPERATORE... il plc non serve solo per accendere le lampadine da più punti...
Dragonfly Inserita: 26 febbraio 2016 Autore Segnala Inserita: 26 febbraio 2016 Grazie mille e scusate l'ignoranza in materia
JumpMan Inserita: 26 febbraio 2016 Segnala Inserita: 26 febbraio 2016 Comunque qui ci sono parecchi errori: Quote Si ho letto se uso add_r sommo nu eri interi in virgola mobile cioè per esempio L EW10 L MW14 +I T DB1.DBW25 E ok ma a cosa mi serve questo?Grazie ADD_R è una funzione KOP corrispondente a +R in AWL. e tratta numeri in virgola mobile, nell'esempio invece hai sommato numeri interi a 16 bit (+I). I numeri non possono essere interi in virgola mobile, o sono interi o sono in virgola mobile. EW10 è un valore a 16 bit, non potrà mai essere un numero in virgola mobile (REAL a 32 bit) e lo stesso dicasi per MW14 e DB1.DBW25, le 3 righe che hai scritto sono comunque corrette ma trattano numeri interi a 16 bit. Quando usare INT e quando REAL? dipende da quello che vuoi fare, per esempio se devi solo contare le auto che entrano in un parcheggio userai una variabile INT (intero a 16 bit), se vuoi contare le auto che passano in una autostrada è meglio che usi una DINT (intero a 32 bit), ma se devi pesare le arance che stanno in una cassa userai una variabile REAL (32 bit virgola mobile).
Dragonfly Inserita: 26 febbraio 2016 Autore Segnala Inserita: 26 febbraio 2016 Grazie jump man ho sbagliaro a scrive volevo dire add_i....ascolta perche se uso +R e scrivo L 4 T md10 L 2 T md20 L md10 L md20 T db1.dbd0 ho come valore 6 ed è giusto e se moltiplico non ho 8.Dove sbaglio?
JumpMan Inserita: 27 febbraio 2016 Segnala Inserita: 27 febbraio 2016 Anche le costanti hanno vari formati, se vuoi caricare in ACCU1 una costante in virgola mobile devi scrivere mantissa ed esponente, oppure scrivi un numero con il punto (p.es. se scrivi L 4.0 appena dai invio apparirà L 4.000000e+000 che è una costante in virgola mobile) Comunque ti consiglio vivamente di dichiarare il simbolico di ogni variabile che usi e di non usare indirizzi assoluti, in questo modo oltre a dover dichiarare il formato eviterai anche errori di sovrapposizione di variabili ed il programma sarà più leggibile. Posso chiederti se c'è un motivo che ti spinge a programmare in AWL? E' solo per poter esporre sul forum o stai imparando solo quello ? AWL è un linguaggio di basso livello, se lo usi lo devi conoscere bene, altrimenti è possibile sommare patate con carote e ti esce un bel minestrone . Non nego comunque che sia una buona cosa che tu sia interessato a conoscerlo perchè è alla base del funzionamento interno della cpu, ma un programma scritto interamente in AWL non avrebbe alcun senso e sarebbe pesante da leggere.
Dragonfly Inserita: 29 febbraio 2016 Autore Segnala Inserita: 29 febbraio 2016 Premetto che sto imparando a programmare in awl,era solo una curiosita,prediligo il kop però sai mi sto cimentando anche in awl e fup...comunque grazie per i tuoi preziosi suggerimenti jump man
Dragonfly Inserita: 29 febbraio 2016 Autore Segnala Inserita: 29 febbraio 2016 Quindi se addiziono e scrivo L 4 t md10 l 4 t md20 l md10 l md20 +r t db1.dbd0 leggo 8 e ok se moltiplico devo scrivere l 4.0 t md10 l 4.0 t md20 l md10 l md20 t db1.dbd0 dovrei leggere 16 perche pero' per la moltiplicazione devo mettere 4.0?
beppo Inserita: 29 febbraio 2016 Segnala Inserita: 29 febbraio 2016 Giusto per semplificarti un pò la scrittura, puoi anche: L 4.0 //Carico 4 nell'accumulatore 1 L 4.0 //Carico 4 nell'accumulatore 1 e sposto il dato caricato in precedenza sull'accumulatore 2 +R //Sommo i valori dei 2 accumulatori 4+4 T DB1.DBD0 Anche per la somma devi scrivere 4.0 altrimenti si vedi 8 nella db ma in DINT non in REAL, nella tabella delle variabili, prova a guardare le differenze nella disposizione dei bit nella doppia parola del db1.dbd0.
JumpMan Inserita: 29 febbraio 2016 Segnala Inserita: 29 febbraio 2016 Non devi mai mescolare i formati! Nel primo esempio hai 2 interi e li sommi con una istruzione real, se vuoi puoi farlo ma prima devi usare l'istruzione di conversione DTR (double to real). Così è corretto: L 4 // INT ITD // INT to DOUBLE DTR // DOUBLE to REAL t md10 l 4 ITD DTR t md20 l md10 //REAL l md20 //REAL +r // somma di 2 REAL t db1.dbd0 /REAL Anche così: L L#4 //DOUBLE DTR t md10 // REAL l L#4 DTR t md20 l md10 // REAL l md20 // REAL +r // somma di 2 REAL t db1.dbd0 //REAL Anche così: L 4.0 // REAL t md10 l 4.0 // REAL t md20 l md10 l md20 +r // somma di 2 REAL t db1.dbd0 Anche così: L L#4 t md10 l L#4 t md20 l md10 // DOUBLE caricato in ACCU 1 DTR // diventa REAL l md20 // ACCU1 va in ACCU2 e carica un nuovo DOUBLE in ACCU1 DTR // che diventa anche lui REAL +r // somma di 2 REAL t db1.dbd0 // risultato REAL (Solo se usi un Allen Bradley puoi permetterti di fregartene del formato perchè lo converte lui in automatico e puoi tranquillamente sommare un INT con un DINT e avere il risultato in REAL in una unica istruzione). Comunque giusta l'osservazione di beppo che non serve ogni volta appoggiare il valore su una variabile, basta sapere bene come lavorano gli accumulatori...
Massimo_Fra Inserita: 1 marzo 2016 Segnala Inserita: 1 marzo 2016 A prescindere da AWL o KOP ritengo che il consiglio del Sig. Livio di studiare un po' prima, sia sacrosanto. Per programmare devi avere un'idea anche di rappresentazione numerica sui calcolatori, logica combinatoria, numeri esadecimali, BCD, Byte, Word, Dword, Virgola mobile (rappresentazione di numeri reali) ecc. Domandare a cosa serve fare operazioni aritmetiche in un PLC da l'idea che ti occorra studiare parecchio. Trovi tutti i manuali nei vari siti. Pazienza e tempo sono propedeutici.
JumpMan Inserita: 1 marzo 2016 Segnala Inserita: 1 marzo 2016 A me sembra comunque pieno di buona volontà, non bisogna aver paura a chiedere, poi spero anch'io che legga anche i libri e le guide.
Dragonfly Inserita: 5 marzo 2016 Autore Segnala Inserita: 5 marzo 2016 Ragazzi vi ringrazio per Le giuste critiche Che fate e anche dei consigli .
batta Inserita: 5 marzo 2016 Segnala Inserita: 5 marzo 2016 Quote (Solo se usi un Allen Bradley puoi permetterti di fregartene del formato perchè lo converte lui in automatico e puoi tranquillamente sommare un INT con un DINT e avere il risultato in REAL in una unica istruzione). Anche i 1200 e 1500, se si usa il KOP, fanno molte conversioni implicite. Cosa che, quasi sempre, cerco di evitare. Quando si utilizzano le variabili in AWL si va ad agire sugli accumulatori, e si eseguono operazioni sul contenuto degli accumulatori. Se negli accumulatori carico valori non coerenti, avrò un risultato sbagliato. Ed è giusto che sia così.
JumpMan Inserita: 5 marzo 2016 Segnala Inserita: 5 marzo 2016 Ma le eviti perchè non usi KOP sulle operazioni o per altri motivi? Io l'ho trovato comodo. Ho usato anche altri controllori simil-codesys che avevano istruzioni tipo: ANY_TO_REAL, ANY_TO_INT ecc.ecc. sempre meglio che dover fare 2 passaggi (ITD , DTR ecc. ecc.).
batta Inserita: 6 marzo 2016 Segnala Inserita: 6 marzo 2016 Premetto che cerco di evitare di utilizzare il KOP per fare i calcoli. Per i calcoli, molto meglio utilizzare AWL o SCL. Certo che se, in un segmento scritto in KOP, mi serve una moltiplicazione, non vado certo ad aggiungere un segmento in AWL solo per un banalissimo calcolo, ma utilizzo l'istruzione in KOP. E, nel caso le variabili in ballo non avessero lo stesso formato, non aggiungo inutili conversioni ma mi affido alla conversione implicita. Però, proprio da un punto di vista concettuale, non mi piace moltiplicare un INT con un REAL. Aggiungere le istruzioni ITD e DTR non mi pare una grande fatica, e mi permette di avere il controllo totale sui formati delle variabili. Ma non sto certo sostenendo che sfruttare le conversioni implicite sia sbagliato. È solo una mia abitudine. Pensa che, per esempio, se devo azzerare una variabile INT generalmente non mi accontento di assegnare semplicemente il valore 0, ma scrivo INT#0, se devo azzerare una DINT assegno il valore DINT#0, se devo azzerare una Sint scrivo SINT#0, se devo azzerare una WORD scrivo WORD#0 (oppure 16#0), anche se il risultato, in realtà, non cambia. Cosa vuoi, ognuno ha le sue piccole manie
JumpMan Inserita: 6 marzo 2016 Segnala Inserita: 6 marzo 2016 Con le tue abitudini di sicuro eviti errori subdoli che a volte ti fanno perdere del tempo a trovarli perchè sei convinto di aver scritto tutto giusto e poi scopri che l'errore è dovuto a una conversione errata. A dirla tutta per non sbagliare sarebbe bene anche nominare i simbolici con un prefisso che ricordi il formato (iVelMot_1 = INT Velocità Motore 1 oppure rTemAmb = REAL Temperatura Ambiente). Per contro ti dico che ho usato solo una volta Rockwell, sono partito da zero con un minicorso di 8 ore scarse per fare 3 progetti diversi con regolazioni PID di temperatura e di modulazioni di valvole, tutto scritto in KOP (in una cella KOP si possono scrivere anche formule complesse) , senza tante menate e preoccupazioni di sbagliare formati, e mi sono trovato benissimo. Tornando a S7 a me dà un po fastidio, per esempio, che un blocco o una operazione kop non accetti una Word in un ingresso programmato come INT, e non c'è (ovviamente) nessuna istruzione che converte INT in WORD (anche perchè non ha senso).
batta Inserita: 6 marzo 2016 Segnala Inserita: 6 marzo 2016 Quote Tornando a S7 a me dà un po fastidio, per esempio, che un blocco o una operazione kop non accetti una Word in un ingresso programmato come INT, e non c'è (ovviamente) nessuna istruzione che converte INT in WORD (anche perchè non ha senso). Ma non è così. Guarda l'esempio.
batta Inserita: 6 marzo 2016 Segnala Inserita: 6 marzo 2016 Quote Tornando a S7 a me dà un po fastidio, per esempio, che un blocco o una operazione kop non accetti una Word in un ingresso programmato come INT, e non c'è (ovviamente) nessuna istruzione che converte INT in WORD (anche perchè non ha senso). Ma non è così. Guarda l'esempio.
JumpMan Inserita: 6 marzo 2016 Segnala Inserita: 6 marzo 2016 Batta, purtroppo (o per fortuna?) io non mi sono aggiornato al TIA, quindi mi riferisco sempre allo S7 classico.
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