Vai al contenuto
PLC Forum


S7-300 - Novizio - DB, OB, FB


mueblo

Messaggi consigliati

Ciao a tutti,

solitamente ho sempre usato S7-200 in cui è presente un unico banco di memoria dati che ho strutturato per zone associate a unità funzionali delle macchine su cui lavoro.

Ora, finalmente devo utilizzare un S7-300 in cui ho visto che la memoria dati può essere divisa per blocchi DB.

Potrebbe essere una soluzione plausibile quella di associare un DB ad ogni unità funzionale della macchina?

Altri consigli?

Altra domanda: che differenza c'è tra blocco organizzativo (OB) e blocco funzionale (FB) a livello pratico?

Grazie a tutti!

Miki

Link al commento
Condividi su altri siti


Gabriele Corrieri

Ciao

un blocco organizzativo è proprio per nome, un blocco che contiene l'organizzazione di altri blocchi per gestire una particolare elaborazione: OB1 è quello che gestisce l'elaborazione del ciclo macchina, OB100 è quello che gestisce lo startup del plc (accensione, o passaggio STOP-RUN) OB35 è quello che gestisce le operazioni a scansioni di tempo fisse (ogni x millisecondi), se guardi l'. c'è la spiegazione di tutti gli OB.

Gli FB sono i blocchi funzionali, e per grande particolarità di Siemens, rispetto ad altri costruttori di PLC possono essere associati a dei DB che contengono i dati di una istanza, cioè di una elaborazione dell'FB, tante istanze, cioè altrettanti DB, con un solo FB possono produrre multiple elaborazioni dello stesso codice, con diversi valori in ingresso e quindi diversi risultati di elaborazione.

I blocchi dati sono un po' croce e delizia di Siemens S7300, in quanto possono essere strutturati in maniera molto complessa, per venire incontro a complesse gestioni dei dati ivi memorizzati, anche se a maggior complessità di strutturazione dei DB poi corrisponde anche maggior conoscenza del PLC per poter usare queste possibilità.

In effetti è utile avere i DB suddivisi, un po' per ordine nel dover recuperare i dati, e un po' perchè DB specifici, con dati riferiti a parti di macchina interi, consentono un a migliore riutilizzazione del codice.

Ciao

Link al commento
Condividi su altri siti

Condivido

ma vorrei fare una piccola correzzione

gli OB li chiamerei blocchi a evento , vengono eseguiti solo se si verifica un'evento

ciao

Luca

Link al commento
Condividi su altri siti

Grazie molto per le risposte. Tutto chiaro!

Quindi un FB lo posso vedere come una fdt con eventuali ingressi passati attraverso un DB associato, ma se ho soltanto bisogno di codice senza DB intuisco che è più corretto utilizzare un blocco FC, giusto?

Altra domandina: a livello pratico quando si usa un DB o un blocco UDT?

Grazie ancora e scusate se le mie domande possano sembrare stupide, ma vorrei seguire una strada avendo tutto chiaro in modo da non dover poi cambiare l'impostazione una volta che ho già strutturato il sw.

Link al commento
Condividi su altri siti

Quindi un FB lo posso vedere come una fdt con eventuali ingressi passati attraverso un DB associato, ma se ho soltanto bisogno di codice senza DB intuisco che è più corretto utilizzare un blocco FC, giusto?

Infatti!!!

Concettualmente le FC fanno corrispondere ad ingressi uguali uscite uguali.

Se per esempio crei una FC che deve fare una somma di due numeri ricevuti in ingresso il risultato sarà sempre lo stesso....anche se lo fai cento volte :-)

Es

IN: a = 5, b = 3

FC (Y = a + b ) restituirà sempre 8

Una FB invece ha una memoria (o almeno è stata progettata per questo motivo) il che comporta che ad ingressi uguali quasi mai corrispondono uscite uguali (come avviene per i contatori).

IN a = 5, b = 3

Stato Q=3

FB (Y = a + b + Q) La prima volta restituisce 11, la seconda 19 (con Q = 11), poi 27 (con Q = 19) e così via.

Per quanto riguarda le DB e le UDT la differenza è un pochino più complicata.

Le DB sono aree di memoria mentre le UDT sono strutture dati nel senso che una volta definite se ne possono creare quante istante si vogliono dinamicamente.

Quindi immaginiamo che hai bisogno di un INT, un REAL ed una STRING per memorizzare informazioni di un dispositivo.

Se avessi tre dispositivi:

-con le DB dovresti creare o 3 DB con 3 record o 1 DB con 9 record.

-con le UDT ti basta creare 1 sola UDT composta dai 3 tipi di dati e creare le tre istante per i 3 diversi dispositivi.

Spero di essere stato esauriente e di non aver commesso errori.

Modificato: da Hermes7
Link al commento
Condividi su altri siti

Scusa, potresti spiegarmi il funzionamento delle UDT ?

Era proprio quello che cercavo ! Pensavo che le DB fossero quello che mi serviva e invece erano le UDT che non conoscevo.

Come si dichiarano, come si creano le istanze e come si usano.

Grazie.

Link al commento
Condividi su altri siti

Facciamo un esempio:

devo gestire 2 PID. Per farlo richiamo FB41 (CONT_C). I PID da gestire però sono due. Cosa faccio?

Per il primo PID richiamo FB41 associando DB20 (ovviamente il numero è solo di esempio)

Per il secondo PID richiamo FB41 associando DB21.

La creazione di DB20 e DB21 la posso fare nei seguenti modi:

1) nella stesura del programma scrivo: CALL FB41 , DB20. Se DB20 non esiste il sistema mi chede se lo voglio creare. Confermo, ed è fatta.

2) dalla cartella dei blocchi inserisco nuovo DB specificando nell'apposita casella (a destra del numero del DB) che si tratta di un blocco di istanza. Si attiverà la successiva casella a destra, con l'elenco di tutte le FB presenti, dalla quale farò la selezione della FB che mi interessa.

Gli UDT li puoi considerare dei modelli. Se hai bisogno di creare vari DB con struttura identica, puoi creare un UDT e, quando andrai ad inserire un nuovo DB dovrai selezionare "DB di tipo" e successivamente l'UDT che ti interessa.

Link al commento
Condividi su altri siti

  • 1 month later...

Avrei un altra domanda...

come posso mantenere una word all'interno del sw cambiando l'indirizzo di tale word all'interno del DB in cui è contenuta?

Mi spiego meglio: in un DB es. DB1 ho una word che si chiama in simbolico CICCIO ed è per esempio mappata sull'indirizzo 100 (DB1.DBW100). Ora vorrei per es cambiargli l'indirizzo da 100 a 50, nel sw dove è utilizzata mi rimane DB1.DBW100 oppure il simbolo che ha preso il suo posto.

Sono convinto che ci sia un modo per farmi mantenere il simbolico col nuovo indirizzo, ma non riesco a trovare come...

Con S7200 è sufficiente mantenere spuntato il flag "Indirizzamneto simbolico" se si vuole mantenere il simbolico come vincolo nel sw oppure il contrario se si vuole mantenere l'indirizzo.

Con il 300 essendo un novizio :( ancora non ho il modo..

Chi mi aiuta? Grazie 1000!

Michele

Link al commento
Condividi su altri siti

Se modifichi l'indirizzo di una variabile devi poi correggere il programma. Anche se lasci attiva la visualizzazione in simbolico il programma fa sempre riferimento all'indirizzo.

Link al commento
Condividi su altri siti

Se modifichi l'indirizzo di una variabile devi poi correggere il programma. Anche se lasci attiva la visualizzazione in simbolico il programma fa sempre riferimento all'indirizzo

Sicuro che sia solo così? Se clicchi col tasto destro su "blocchi", poi scegli "proprietà dell'oggetto" e "preferenza operando", ci sono varie possibilità da scegliere e mi sembra di capire che si possa anche dare precedenza al simbolo anzichè all'indirizzo. Non sono mai riuscito a capirci un granchè, però: qualcuno ne sa un pò di più?

Ciao

Link al commento
Condividi su altri siti

Hai ragione. Pensa, tanti anni che uso Step7 e questa cosa qui non l'avevo mai provata.

Concedimi l'attenuante che è stata inserita a partire da Step7 5.3 :rolleyes:

Per capire bene il funzionamento penso sia necessario fare un pò di prove, visto che l'aiuto in linea non mi sembra molto chiaro.

Attenzione, impostando "Eccezione: accessi simbolici al DB rimangono...", vengono comunque reindirizzate le varibili del DB solo se l'accesso alla variabile avviene con simbolico completo.

Esempio:

DB100 (simbolico "Prova")

DB100.DBW0 (variabile INT con nome "Var_1")

Programma:

L "Prova".Var_1

Se inserisci una o più variabili prima della variabile Var_1 quando salvi o apri il blocco che accede alla variabile viene corretto l'indirizzo

Invece se scrivo:

L DB100.DBB0

Non verrà visualizzato il simbolico, perché il byte 0, che è il primo byte della variabile Var_1, non ha un nome. In questo caso, visto che si accede richiamando un indirizzo, non viene fatta nessuna modifica.

Link al commento
Condividi su altri siti

  • 2 years later...

Ciao

vrei necessita di trovare un Trasformatore da 220 AC in 9 V DC da collocare possibilmente dentro una scatola da incasso 503 per frutti, in pratica ho 2 cassette vuote in comunicazione e vorrei in una collocare il trasformatorino e in quella accanto un apparecchio alimentato a 9V continua. Conoscete qualche prodtoo che possa fare al caso mio?

thanks

Link al commento
Condividi su altri siti

In un qualsiasi negozio di elettronica o consummer, puoi trovare un alimentatorino a spina da 9V, è piccolo e già belleffatto.

Semprechè non ti servano grosse potenze.

Ciao ;)

Link al commento
Condividi su altri siti

Non ho mai sentito di prodotti del genere, ma non è escluso che non esistano.

Avessi la tua necessità opererei così: tappo bianco unico davanti alla 503: le mascherine coi tappi occupano un pochino di profondità (può darsi che si riescano comunque a mettere).

Il trasformatore dovrà essere il più conenuto possibile e dovrà essere sovradimensionato poichè la scarsissima aereazione ne impedisce il naturale raffreddamento.

Un trasformatore "classico" ha un ingombro che solitamente non è compatibile, soprattuto se devi inserire una presa per collegarlo alla rete.

A tale proposito opterei per qualcosa di autocostruito ad hoc isolato con resina o colla a caldo per evitare l'involucro e con morsettiera al posto delle prese/spina.

Non ho ben capito a cosa servirebbe.... eventualmente ci sono altre soluzioni (ad esempio alimentatori senza trasformatore, ma non possiedono isolamento, quindi vanno bene solo in casi limitatissimi).

Link al commento
Condividi su altri siti

anchio avevo pensato ad una opzione del genere , prelevare dal magnetrotermico 10A neutro e fase da saldare ad un circuitino ( alimentatore TV) posizionato dentro la cassetta chiusa (magari mettendo la placchetta e tappi con fori di ventilazione) e poi sempre tramite il tubo che lo collega all'altra cassettina 503 passare 2 cavetti con pronta 9V DC per il circuitino utilizzatore.

La mia " preoccupazione e' che l'oggetto in questione funzionerebbe h24 365/anno in condizioni non proprio favorevoli (alimentatore TV ad esempio lavora quanto meno in codizioni di raffreddamento in aria libera).

Per cui speravo potesse esistere una soluzione (tipo modulo Din ) gia' progettata per funzionare in questa configurazione, magari mi sto solo facendo delle fisime mentali

Link al commento
Condividi su altri siti

Non riesci a mettere un 230Vca/9 Vcc in una 503. Come minimo ha le dimensioni di un caricabatteria per cellulare...

Infatti sono i comuni alimentatori multitensioni, costano poco....forse in una cassetta di distribuzione riesci a farcela stare...

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