Vai al contenuto
PLC Forum


Scrittura Merker E Db - velocità di elaborazione


suppaman

Messaggi consigliati

Salve a tutti.

Una cosa che sono stato sempre abituato a fare quando programmo è cercare sempre di ottimizare il codice per renderlo piu performante.

Mi chiedevo, c'è differenza tra scrivere dati di qualsiasi tipo in un merker e in un db ? Intendo al livello di velocità di elaborazione, di risorse occupate, interrogazione di registri ecc..

Io ho sempre saputo che i merker non ritentivi e le variabili temporanee degli FC/FB vengono lette e scritte dalla cpu in modo diverso dai db, rendendo l'elaborazione del dato più veloce, ma volevo una conferma da qualcuno più esperto di me.

In linea generale secondo voi è preferibile l'uso massiccio di merker oppure creare vari DB ben organizzati ? il tutto ovviamente parlando di dati non ritentivi.. Quale "stile" di programmazione preferite parlando anche di flessibilità e riutilizzo del codice ?

Grazie come sempre a tutti e spero che non sia stato un argomento già trattato in precedenza. Almano dalla mia ricerca non è uscito fuori nulla

Link al commento
Condividi su altri siti


L'accesso ai dati dei DB, sia in lettura che in scrittura, è più lento dell'accesso ai merker.

I merker però non sono molti, quindi è impensabile usarli al posto dei DB.

In qualche manuale ci sono i tempi richiesti per l'esecuzione di tutte le operazioni.

Link al commento
Condividi su altri siti

non credo, ma non lo so in realtà, che se i dati sono ritentivi si allunghi il ciclo di esecuzione però tant'è!!
Dunque, adesso non mi metto li a cercare il pdf, ma l'indirizzamento a una memoria ritentiva dovrebbe impiegare lo stesso che a una memoria DB.

Poi, ll'utilizzo delle merker, flags, se rendono piu utili come memoria ausiliaria, per operazioni di caricamento-trasferimento dei dati di propieta temporanea, nonche variabili globali.

Quale "stile" di programmazione preferite parlando anche di flessibilità e riutilizzo del codice ?
Certo che per una migliore architettura per il progetto, correlando gli standard 95/88 nella sua integrazione verticale, seguendo il modello di gerarchia per le apparecchiature che conformano la parte fisica dell'impianto, etc.. etc, sarebbe piu conveniente adottare una struttura appogiata su le DB, per una maggiore e spontanea comprensione del progetto.

Per esempio, supponiamo che per una Unit (unita'), hai 3 Equipment modules (moduli di apparecchiatura), potresti configurare una DB10 per i dati globali della unita, e le DB101, 102, 103 per i moduli di apparecchiatura.

Comunque e' solo una ipotesi.

Link al commento
Condividi su altri siti

Typical Execution Time in micro s per una 315

L MW = 0,4

L DBW = 1,4

OPN DBx = 0,7

Come vedi c'e' sicuramente un allungamento , ma come ti hanno gia' detto quando servono ( e servono spesso ) si usano i DB

Un piccolo consiglio e' di cercare di aprire poche volte le DB ,

apri una DB poi usi le DBW senza richiamare di nuovo la DB , non usare DB10.DBW0 ( anche se e' comodo per il commento ) poiche' questa istruzione apre anche la DB

Ciao

Luca

Link al commento
Condividi su altri siti

  • 6 months later...

Sn 2 cs diverse. Io ragiono così:

Difficilmente untilizzo delle DB per settarmi o attivarvi dei bit...DBX...e preferisco utilizzare dei merker....M...

Invece per quanto riguarda i timer, delle word o delle doppie parole utilizzo delle Db in quanto generalmente nella maggior parte dei programmi per dei tracking dati o ancor di più trasferimenti non si utilizzano dei gran OW o UW.

Per me i merker deve utilizzarli soprattuto se ti servono dei bit pronti da utilizzare molto più velocemente

Link al commento
Condividi su altri siti

Ho anche visto, in passato, scrivere codice con le merker ma poi appoggiate a delle DB...

mi spego meglio...

all'inizio della fc si apre un db di appoggio e si caricano delle Dw e si trasferiscono in MW

L DBWxx

T MWxx

si elabora tutto il codice utilizzando MW, il cui accesso è più veloce

ed alla fine si fa l'operazione inversa

L MWxx

T DBWxx

Cosa ne pensate ???

Saluti.

Link al commento
Condividi su altri siti

Ciao barolo72 secondo me è una soluzione valida se hai una quantità esagerata di dati, sinceramente se organizzi bene le tue funzioni e la memoria da utilizzare ottieni ottimi risultati, nella mia brave esperienza di tecnico (sino ad oggi) ne ho viste di tutti i colori e ti posso dire che ci sono programmi che ciclano in media in 200/300 ms ed altri su linee simili ciclare in 80/100ms con un uso uguale di DB.

L'acesso alle DB fa si lievitare il tempo ciclo, ma anche una un uso indiscriminato delle comparazioni su word lo fa lievitare, è la differenza di tempo da me rilevata era proprio un "abuso" di comparazioni anche su word che variavano da 0 a 3. :unsure:

Io uso, di norma, fare tutto il software "a banco" con uso di DB e perdere "tempo" ad organizzarle e poi una volta arrivato alla messa in servizio le modifiche le appoggio su merker, se limitate.

Modificato: da TravelMen
Link al commento
Condividi su altri siti

La risposta è giusta.

Personalmente però non mi trovo d'accordo col seguente consiglio dato:

apri una DB poi usi le DBW senza richiamare di nuovo la DB , non usare DB10.DBW0 ( anche se e' comodo per il commento ) poiche' questa istruzione apre anche la DB

Aprire i DB richiede tempo, ma usare la sintassi completa tipo DB1'.DBW0 non solo permette di leggere la variabile col nome (si potrebbe facilmente ovviare inserendo un semplice commento) ma, cosa molto più importante, permette di fare i riferimenti incrociati della variabile.

Aprire il DB e poi utilizzare le variabili del DB richiamandole solo come DBWxxx, fa certamente risparmiare tempo al plc, ma rende quasi impossibile trovare dove la variabile è stata utilizzata.

Io ho un po' la mania di "ottimizzare il codice". Questo però non deve andare a scapito della leggibilità e della manutenibilità di un programma.

In S5 aprire il DB e poi richiamare le variabili è l'unico modo possibile. Ed è principalmente per questo motivo che io ho sempre odiato e continuo ad odiare i plc S5.

Link al commento
Condividi su altri siti

In S5 aprire il DB e poi richiamare le variabili è l'unico modo possibile. Ed è principalmente per questo motivo che io ho sempre odiato e continuo ad odiare i plc S5

Caro batta, mi pare che tu l'S5 non lo ha imparato cosi approfondito direi, ed allora sara' per quello che tu l'odi.

Vedi,nel S5, per quelli che lo hanno conosciuto bene, c'era la possibilita di indirizzare in assambler(Mac 5) per arrivare alle aree di memoria ed anche di sistema della CPU, lo sapevi ?. E' stato per questo che io personalmente ho sempre amato l'interfaccia AS511. Comunque e sempre cosi', uno odia quello che non conosce bene. :)

Modificato: da Savino
Link al commento
Condividi su altri siti

Caro Savino è vero.

Anche io da 10 anni che lavoro con i plc ed il mio primissimo plc è stato il TI535 e poi l'S5 e devo dire che non mai trovato molte difficoltà.

Io provengo dal DOS e adesso lavoro con windows, chi proviene da windows e non conosce il dos certamente lo può odiare.

Comunque non è colpa loro se con il passare del tempo nuove tecnologie sovrastano le vecchie, ma possiamo fare in modo che le vecchie tecnologie o le vecchie programmazioni possano esserci utili per rendere sempre più affidabili le nuove tecnologie.

Link al commento
Condividi su altri siti

Matteo Montanari
Un piccolo consiglio e' di cercare di aprire poche volte le DB ,

apri una DB poi usi le DBW senza richiamare di nuovo la DB , non usare DB10.DBW0 ( anche se e' comodo per il commento ) poiche' questa istruzione apre anche la DB

il PLC apre un nuovo blocco dati solamente se quello aperto in precedenza non è quello che deve utilizzare.

Esempio:

U   DB10.DBX0.0 (apertura del blocco dati 10 e lettura del bit 0 del byte 0)
UN DB10.DBX0.1 (lettura del bit 1 del byte 0)
=   DB10.DBX0.2 (scrittura del bit 2 del byte 0)

----

U   DB10.DBX0.0 (apertura del blocco dati 10 e lettura del bit 0 del byte 0)
UN DB11.DBX0.1 (apertura del blocco dati 11 e lettura del bit 1 del byte 0)
=   DB12.DBX0.2 (apertura del blocco dati 12 e lettura del bit 2 del byte 0)
a volte quando devo eseguire molti trasferimenti utilizzo un FC aprendo contemporaneamente 2 blocchi dati, utilizzando il blocco dati di istanza, non possibile negli FB parametrizzati. Esempio:
AUF DB 10 (apertura del blocco dati 10 come blocco dati di utilizzo generale)

AUF DI 11  (apertura del blocco dati 11 come blocco dati di istanza)

U   DBX0.0 (lettura del bit 0 del byte 0, nel blocco dati 10)
UN DIX0.1 (lettura del bit 1 del byte 0, nel blocco dati 11)
=   DBX0.2 (scrittura del bit 2 del byte 0, nel blocco dati 10)

dipende sempre da cosa si vuole ottenere, in termini di tempo ciclo le cpu S7 sono molto più veloci delle vecchie S5, ma se si struttura il programma come si faceva come con S5 il tempo di ciclo di una nuova Cpu S7 è irrilevante in quanto vengono eseguite molte istruzioni a volte inutili...

il metodo per rendere veloce l'elaborazione di un programma è già stato trattato in varie discussioni.

la prima domanda che ci si deve porre è perchè mi interessa un ciclo di elaborazione basso.

se devo averlo per fare dei movimenti precisi senza utilizzare le schede studiate per il posizionamento, sono fuori strada, in quanto basta solamente aggiungere una funzione in più o inserire una rete di comunicazione diversa, o un pannello operatore in comunicazione, che tutti i calcoli teorici vanno a farsi friggere.

se non devo eseguire operazioni "delicate" allora la mia paletta sulla rulliera o il mio rubinetto per il dosaggio, o ... posso anche chiuderlo con 150millisecondi di ritardo...

la scelta del ciclo della CPU deve essere anche subordinata alla meccanica alla quale il programma deve essere abbinato.

posso riuscire a ridurre la velocità di elaborazione del plc all'osso ed ottenere la precisione di 0.001 mm poi scopro che meccanicamente il sistema di movimento ha l'errore di 1 mm, quindi molto lavoro per nulla.

Link al commento
Condividi su altri siti

Caro batta, mi pare che tu l'S5 non lo ha imparato cosi approfondito direi
Comunque e sempre cosi', uno odia quello che non conosce bene

Savino, entrambe le tue affermazioni sono corrette.

Rimane comunque il fatto che, con Step5, se devi cercare dov'è usata la variabile DW20 del blocco dati DB5, devi armarti di tanta pazienza ed incrociare (a mano) i riferimenti di DB5 con quelli di DW20.

Lo stesso accade con Step7 se si utilizzano le variabili senza specificare ogni volta il blocco dati cui appartengono.

Rendere complicata la ricerca di una variabile significa rendere complicato il debug e le modifiche.

Io provengo dal DOS e adesso lavoro con windows, chi proviene da windows e non conosce il dos certamente lo può odiare.

Anch'io provengo dal DOS. Le mie prime esperienze su PLC risalgono alla seconda metà degli anni '80.

Non è quindi una questione si sistema operativo.

Forse invece non hai apprezzato abbastanza i plc Texas perché usavi cpu piuttosto limitate, come la 535.

Se avessi invece utilizzato la 545, con funzioni speciali SFPGM e SFSUB, calcoli in virgola mobile e PID, forse i tuoi giudizi sarebbero stati diversi.

A proposito di SFPGM, sembra che il linguaggio strutturato sia una novità degli ultimi anni nel mondo PLC. Invece era già utilizzato in questi "vecchi" Texas.

il PLC apre un nuovo blocco dati solamente se quello aperto in precedenza non è quello che deve utilizzare.

Non ne sono tanto sicuro.

Sono sicuro invece che l'istruzione

L DB10.DBW0

anche se DB10 è già aperto, richiede più tempo dell'istruzione

L DBW0

Però, come ho già detto, non mi interessa risparmiare sui tempi di scansione se questo va a scapito della leggibilità del programma, e rende quindi più difficili debug e modifiche.

Piuttosto, se in un FC la stessa variabile è richiamata più volte, la appoggio ad una variabile locale. Risparmio così tempo di scansione senza ridurre la leggibilità.

Link al commento
Condividi su altri siti

  • 10 months later...
danielecarrrr

salve a tutti,sono nuovo del forum e mi sto cimentando nel rifacimento dell'impianto elettrico di casa mia.

ora io volevo sapere se secondo voi nel disegno che allego va bene il modo con cui ho deciso difar passare i corrugati.

vorrei evitare il discorso di certificazioni,di lasciare perdere eccc....

http://yfrog.com/4cimpelej

impele.jpg

in-interrutore

c -commutatore

d -deviatore

p -presa

Link al commento
Condividi su altri siti

eventualmente

sei pazzo....

ti sfido io a tirare insieme in un tubo :

  • -telefono

    [*-]sat

  • -lan
  • -tv
  • -FM
  • -luce

"vorrei evitare il discorso di certificazioni,di lasciare perdere eccc...."

certificazioni di che tipo?

tu puoi passare dove vuoi con i tuoi bei tubi...

consiglio:

FATTI AIUTARE DA UN ELETTRICISTA

Link al commento
Condividi su altri siti

danielecarrrr

scusate,forse non mi sono spiegato,il disegno che vedete riguarda solo luce e prese,o meglio,i corrugati del disegno riguardano solo le prese 16 e 10A

antenne e telefoni vari non c'entrano nulla,sono nel disegno ma non c'entrano niente con la mia domanda sui corrugati.

ovvio che magari passo anche 2 corrugati uno accanto all'altro per evitare di tribolare col passaggio dei fili,ma volevo sapere se secondo voi come concetto è giusto e se la disposizione va bene,tenendo conto che li passo sottoterra accanto al battiscopa per poi salire...

Link al commento
Condividi su altri siti

eventualmente

ma io non farei proprio cosi...

non dico che partirei dalla casetta di derivazione a ogni presa, ma quasi.

utilizzi sicuramente piu cavo e tubo, ma hai una distribuzione della corrente migliore.

Se tu utilizzi una presa alla "fine" dell'anello va a finire che passa corrente anche per le altre prese fino alla giunta con la dorsale...

io prevederei un altro sistema.

e poi metti che si rompe un cavo a inizio anello...non ti va tutto il gruppo prese di quell anello

Link al commento
Condividi su altri siti

danielecarrrr

perfetto,è proprio quello che volevo sentirmi dire,avevo questo dubbio,quindi meglio andare con la cass derivaz ad ogni presa...?

Link al commento
Condividi su altri siti

eventualmente

si proprio cosi....poi dalla cassetta di derivazione parti con le dorsali fino al centralino...

io di solito per le dorsali uso il 4mmq per la forza e il 2.5mmq per le luci.

ciao e buon lavoro

Link al commento
Condividi su altri siti

mm no, a me non convince molto, come ti spiegava -eventualmente- [che in questo caso è il suo nick :)] potresti portarti delle dorsali nelle varie stanze.

cerco di spiegarmi

dalla cassetta di derivazione principale fai partire 1 corrugato per ogni stanza in cui far passare fase e neutro da 4mmq per la forza motrice e fase e neutro 2,5mmq per la luce + la massa giallo verde per tutto. In un corrugato da 20 li fai passare tranquillamente.

Poi in ogni stanza metti una nuova cassetta di derivazione da cui a questo punto fai partire un corrugato per ogni presa + un corrugato per luce (con tutti i vari passaggi di eventuali deviatori invertitori e interruttori). In questo modo hai comunque tutto separato però ti risparmi un bel po' di corrugato.

OCCHIO

che tv, sat, lan, telefono, cip, ciop e silvestro NON DEVONO passare per le cassette di derivazione della corrente nè tantomeno nei tubi corrugati corrispondenti. Al massimo nella cassetta generale puoi mettere gli appositi separatori di plastica e lavorare su una parte della cassetta con la 220 e sull'altra con il segnale. Il tutto però deve essere sempre accuratamente separato. Sia per la sicurezza che non è mai troppa sia per limitare i disturbi derivati dalla rete.

Buon lavoro

Gianmarco

Link al commento
Condividi su altri siti

si concordo. il mio era il limite minimo in cui ci sarebbero passati :) avevo tralasciato l'ovvio sovradimensionamento :)

edit:

anzi, io valuterei bene bus e simili, se sono molte cose da far passare (tv, satellitare, bus, telefono) li separerei eventualmente in 2 parti con due corrugati. ad esempio tv+ sat che bene o male fanno sempre lo stesso giro, e bus + telefono, passarli tutti e 4 insieme potrebbe essere inutile, non ci vedo un pc vicino alla tv (intendo ovviamente come utilizzo pratico, ma poi questo è a discrezione del costruttore :) )

Modificato: da kevinpirola
Link al commento
Condividi su altri siti

danielecarrrr

kevinpirola io volevo fare proprio cosi,piu o meno.....

sat,lan tv eccc....lasciamoli apparte per adesso anche perchè come detto da te staranno da parte....

ora io dalla cassetta di derivazione principare sarei andato alle cassette secondarie come detto da te,ma con sei fili (fase neutro e terra da 2.5 per la forza e fase terra e neutro da 1.5 per le luci e prese 10A) il cavo da 4 l'avrei usato dal quadro alla cassetta principale.

poi le cassette secondare diciamo che non le avrei proprio divise per stanza,ma per zone,mi spiego meglio,avrei diviso la casa in 4 e quindi 4 cassette,nel primo disegno ne manca 1....

una per il salone

una per cameretta e bagno grande

una per camera e bagno piccolo+ripostiglio

una per cucina e corridoio.

teniamo conto che lavastoviglie frigo forno e cappa avrebbero un magneto e corrugati per loro sul quadro.

dite che non va?

magari se qualcuno a tempo per farmi uno schizzetto,la piantina della casa la trovate sopra

Link al commento
Condividi su altri siti

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...