Vai al contenuto
PLC Forum


Aggiunta Variabile Di Stato In Un Fb - Come aggiungere una VARIABILE DI STATO IN UN FB


thtgiaco

Messaggi consigliati

Buongiorno,

avendo una CPU S7, contenente un FB che chiameremo FB100, viene richiamato nell' OB1 attraverso un call, il quale "richiama" due DB diversi, DB101 e DB102. Nel caso in cui io debba aggiungere una VARIABILE DI STATO (che chiameremo KP) all' FB100, come devo comportarmi?!?!? Io ho provato due strade diverse, entrambe non funzionanti, ma le scrivo cosicchè voi possiate escludere queste idee:

1. ho inserito il KP nel programma contenuto nell'FB100, lo ho aggiunto alla lista di VARIABILI DI STATO presente nella finestra stessa dell FB100. Salvato e caricato nel PLC. Risultato --> PLC in System Failure

2. stesso procedimento di prima, al quale in seguito ho proseguito con l'aggiornamento dei due CALL presenti sull' OB1, passato tutti i valori delle variabili. Caricato il programma nella CPU la macchina non era in grado di funzionare, in quanto i valori che gli passava erano errati e molte funzionalit, se non tutte, erano sbagliate.

Se qualcuno potesse illustrarmi il metodo di aggiungere una nuova Variabile di Stato in un FB gli sarei molto grato.

Cordiali Saluti

Giacomazzi Enrico

Link al commento
Condividi su altri siti


se cambi i parametri formali di una FB cambi anche la sua DB di istanza, quindi basta cancellare la call della FB e rieditarla. il sistema ti richiede di aggiornare la DB di istanza, ovviamente confermi, quindi ritrasferisci la DB, la FB e il blocco dove fai la call.

pigroplc

Link al commento
Condividi su altri siti

Non occore cancellare le chiamate,ma ti basta aggiornare il richiamo una volta modificata la FB, per fare cio se fai tasto detro sulla FB modificata, l'ultima voce riporta una dicitura del tipo "aggiorna richiamo" o qualcosa del genere, a meno di errori di compilazione il sistema ti aggirona il richiamo dell FB modificata e poi ti chiede se vuoi aggiornare anche la DB associata.

Finita l'operazione di aggiornamento, che devi fare per ogni richiamo della FB modificata, alla fine salvi il blocco modificato, nel tuo caso, e dalla finestra principale del simatic manager selezioni la FB e le relative DB, nel tuo caso selezioni FB100 DB101 e DB102, una volta selezionata scari il tutto nel PLC ed il gioco è fatto.

Questo vale se cambi solo la STAT interna alla FB, se cambi o modifichi ingressi/uscite della tua FB, deve selezionare anche il blocco dove richiami le FB modificate, e scaricare il tutto.

Spero di esserti stato abbastanza chiaro

Saluti

Modificato: da TravelMen
Link al commento
Condividi su altri siti

Quando inserisci una Variabile di stato o anche una Variabile di I/O in una FB devi anche fare attenzione a dove la inserisci e allo spazio di memoria disponibile; mi spiego: le variabili di una DB vengono normalmente assegnate mano a mano che si inseriscono nelle rispettive allocazioni occupando l'indirizzo immediatamente successivo a quello relativo al punto di inserimento, ad esempio nella definizione delle variabili di Input potresti avere:

In

Var_1 bool 0.0

Var_2 bool 0.1

Var_3 bool 0.2

Var_4 bool 0.4

Var_5 bool 0.5

Var_6 bool 0.6

Var_7 bool 0.7

Var_8 Int 1.0

Var_9 Real 3.0

..

L'indirizzamento prosegue poi con l'area di I/O, di Out e di Stato, ma il concetto è lo stesso, nel senso che l'indirizzamento è assoluto e procede di conseguenza.

Ora se inserisci anche un solo merker in una situazione del genere succede questo:

Var_1 bool 0.0

Var_2 bool 0.1

Var_3 bool 0.2

Var_4 bool 0.4

Var_5 bool 0.5

Var_6 bool 0.6

Var_7 bool 0.7

Var_ins bool 1.0

Var_8 Int 2.0

Var_9 Real 4.0

..

Il merker va ad occupare il Byte 1.0 e tutte le variabili seguenti shiftano di conseguenza, chiaro che avendo fatto l'esempio sull'area di Input che è la prima, ne risente tutta la struttura della DB e se il tuo processo va a puntare una variabile di In/Out piuttosto che una Variabile Stat non punterà più la variabile che puntava prima dell'inserimento.

Quindi prima di inserire una variabile qualsiasi in una FB devi considerare la struttura corrente delle variabili, se hai un byte non completamente utilizzato, ci puoi inserire un merker senza che le tue variabili vengano shiftate, oppure, se si tratta di una variabile stat, come nel tuo caso, puoi metterle in ultima posizione così da non influenzare le altre.

Link al commento
Condividi su altri siti

Salve quanto detto da

gaserma
è coretto tranne per un piccolo punto, penso che sia stata una svista, la tabella riportata ha un piccolo eccore, nel senso che siemens, quando inserisci una variabile BOOL con indirizzo DBX0.0 la sucessiva variabile ti tipo INT viene allogata in automatico in DBW2.0.

In
Var_1 bool 0.0
Var_2 bool 0.1
Var_3 bool 0.2
Var_4 bool 0.4
Var_5 bool 0.5
Var_6 bool 0.6
Var_7 bool 0.7
Var_8 Int 1.0   <== Errore Var_8 int 2.0
Var_9 Real 3.0 <== Errore Var_9 real 4.0
Ovvero viene riservata sempre una word e mai un byte, per tanto
Var_1 bool 0.0
Var_2 bool 0.1
Var_3 bool 0.2
Var_4 bool 0.4
Var_5 bool 0.5
Var_6 bool 0.6
Var_7 bool 0.7
Var_ins bool 1.0
Var_8 Int 2.0
Var_9 Real 4.0

Non cambia sostanzialmente la locazione di richiamo della Var_8 e Var_9, ma bisogna procedere comunque all'aggiornamento del richiamo.

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