Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Load Condizionata Ed Utilizzo Corretto Dei Merker


Messaggi consigliati

setecastronomy
Inserito:

Premessa: sono alle prime esperienze con il Siemens

L'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#10

T DB10.DBW 0

intendendo 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 memoria

Suppongo 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


Inserita:
devo ricorrere ad un salto condizionato

si

A M 200.2

JNB _001

L W#16#10

T DB10.DBW 0

_001: NOP 0

Suppongo che il modo migliore di usare la memoria nel Siemens sia quello di organizzare le variabili all'interno dei DB

non e' vero in modo assoluto

tieni 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 = bit

MB2 = Byte

MW2 = 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:
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

Uno 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 ?

Grazie

Filippo

Inserita:

Il mondo è bello perchè vario

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.

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 diversi

Ti 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' usato

Riservo 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" )

Ciao

Luca

  • 3 weeks later...
setecastronomy
Inserita:

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 !

Grazie

Filippo

Inserita:

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.

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...