setecastronomy Inserito: 2 luglio 2007 Segnala Inserito: 2 luglio 2007 Premessa: sono alle prime esperienze con il SiemensL'altro giorno volevo eseguire dei comandi di load ( L ) e strore ( T ) condizionatamente ad una condizione. Pensavo di poter scrivere qualcosa del genere :A M200.2 L w#16#10T DB10.DBW 0intendendo che la load e la store fossero eseguite solo quando M 200.2 è ad uno.Questo codice non funziona e devo ricorrere ad un salto condizionato o chimata di funzione condizionata.Possibile che non ci sia un modo più 'comodo' di fare questa operazione ?Gestione della memoriaSuppongo che il modo migliore di usare la memoria nel Siemens sia quello di organizzare le variabili all'interno dei DB.In alcuni casi può risultare utile ricorrere ai merker. In altri Plc prima di utilizzare delle variabili occorre averle dichiarate o create in qualche modo, mentre per l'utilizzo dei merker questo non è necessario. Quali sono allora le limitazioni ? Posso scrivere M 2, M 20, M 200, M 2000, M 20000 ed M 200000 impunemente ? Ed inoltre come si distingue tra variabili bit, byte, word e dword ? Mi sembra che sia lasciata troppa libertà al programmatore con la possibilità di mettere variabili diverse nella stessa zona di memoria (ad esempio un contatore in M 200 ed una variabile di appoggio per il fronte di salita in M 200.0).Questa problematica deriva da un piccolo test sul plc che ho fatto, dove già scrivendo poche righe con poca attenzione sono andato ad utilizzare lo stesso merker per scopi diversi. In Allen Bradley ad esempio le variabili dichiarate vengono segnalate come libere od occupate eliminando una fonte di pericolosi errori.Grazie Filippo
Luca Bab Inserita: 2 luglio 2007 Segnala Inserita: 2 luglio 2007 devo ricorrere ad un salto condizionatosi A M 200.2 JNB _001 L W#16#10 T DB10.DBW 0_001: NOP 0Suppongo che il modo migliore di usare la memoria nel Siemens sia quello di organizzare le variabili all'interno dei DBnon e' vero in modo assolutotieni conto che quando usi una ( per esempio ) DBw di una DB , apri sempre la DB relativa e cio' porta via tempo ( molto dispendioso a livello di tempo e' vedere un bit in una db )Le M sono piu' veloci ma limitate numericamente ( 256 byte di M per il 300 ( esclusi i grossi ) )Devi valutare nel tuo programma come procedere ( per esempio : sicuramente le ricette vanno messe in una DB )M2.2 = bitMB2 = ByteMW2 = Word ( byte 2 e 3 )MD2 = Doppia word ( byte 2 , 3 ,4 ,5 word 2 e 4 )Mi sembra che sia lasciata troppa libertà al programmatore e non ti sembra una bella cosa .......... ???con l'esperienza vedra che ti serve usare una variabile a DW poi andare a vedere il byte o il bit
setecastronomy Inserita: 2 luglio 2007 Autore Segnala Inserita: 2 luglio 2007 e non ti sembra una bella cosa .......... ???con l'esperienza vedra che ti serve usare una variabile a DW poi andare a vedere il byte o il bitUno deve avere la possibilità di poter effettuare determinate operazioni come accedere ai singoli bit di una word, ma è bene che questa possibilità sia controllata e limitata. E' un po' come nel linguaggio C dove la tipizzazione non è stretta e si rischia di scrivere una stringa e leggere un numero senza necessità di cast.Se M 200 è una word a me piacerebbe che non si potesse scrivere M 200.2, ma che si dovesse ricorrere o ad un costrutto diverso o ad un operazione di Load e mascheramento con 0x4 per avere il bit numero 3.Oltre ad una maggiore attenzione nello scrivere il codice che altre tecniche si possono usare per non utilizzare inavvertitamente la stessa variabile per scopi diversi ?GrazieFilippo
Luca Bab Inserita: 2 luglio 2007 Segnala Inserita: 2 luglio 2007 Il mondo è bello perchè varioSe M 200 è una word a me piacerebbe che non si potesse scrivere M 200.2, ma che si dovesse ricorrere o ad un costrutto diverso o ad un operazione di Load e mascheramento con 0x4 per avere il bit numero 3.uso costantemente dei registri a bit , di cui faccio scorrere una DW poi vado a vedere il singolo bit , dovrei fare 200 mascheramenti in un programma.ti sembra bello ad obbligarmi a fare una cosa simile ???Comunque , ripeto , e una questione di gusto personale , io preferisco la totale libertà di fare quello che mi pare ( con i pro ed i contro che ne deriva )Oltre ad una maggiore attenzione nello scrivere il codice che altre tecniche si possono usare per non utilizzare inavvertitamente la stessa variabile per scopi diversiTi posso dire quello che faccio io ,Tengo sempre aperta la tabella incrociata in modo da vedere cosa e' usato e cosa no.Quando uso qualcosa , scrivo subito il commento , in modo che se riuso quell'operando ed e' commentato , significa che e' usatoRiservo aree di memoria per certe funzioni ( per esempio in FC100 uso da M30.0 ad m34.7 )Tieni presente che quando programmi , puoi usare indiffertentemente e nello stesso momento l'indirizzamento simbolico o fisico ( esempio se nell'ingresso I1.0 hai messo il simbolo 22KM1 , lo puoi richiamare indifferentemente come I1.0 oppure "22km1" )CiaoLuca
setecastronomy Inserita: 23 luglio 2007 Autore Segnala Inserita: 23 luglio 2007 Propongo una variazione sul tema della mia domanda Oltre ad una maggiore attenzione nello scrivere il codice che altre tecniche si possono usare per non utilizzare inavvertitamente la stessa variabile per scopi diversi ?Se vado a lavorare su un progetto fatto da altri dove i merker sono utilizzati in modo disordinato e dove talvolta vengono acceduti a word e talvolta a bit, come faccio a trovare bit e word non ancora utilizzate ? Altri PLC (Allen Bradley ad esempio) hanno un sw di programmazione che mette bene in evidenza le variabili utilizzate in modo da non fare confusione. In altre parole se ho un programma molto lungo e fatto da altri come faccio a sapere se Mw 200 è libero o se invece è utilizzato m 200.1, m 201.0, mb 201 ecc ?Mi sembra che i riferiementi incrociati non bastino in questo caso !GrazieFilippo
Simone70 Inserita: 23 luglio 2007 Segnala Inserita: 23 luglio 2007 Sui riferimenti incrociati ci sono tutte le informazioni che ti servono per sapere l'utilizzo di merker, timer, contatori del programma. Esiste anche la tabella occupazione che ti evidenzia se le memorie sono utilizzate a bit, byte, word e dword.
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