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




Db1 In Step5 - Quale è la sua funzione?


Messaggi consigliati

Reverendo bit
Inserito:

Ciao Ragazzi,

Dopo aver eseguito a conversione di un programma da step5 a step7 ho notato che sia su step5 che su step7 il DB1 non è richiamato sa nessuna parte.

Dando uno sguardo ad un vecchio manuale che ho in ufficio non ho trovato spiegazioni chiare alle mie domande.

Qual'è la funzione del DB1 in un progetto S5?

Dopo la conversione posso cancellare il DB1 sul progetto Step7?

Cosa rapprsentano i valori letti nel DB1?

Saluti da

Reverendo


Inserita:

Mi ricordo solo che in un corso consigliarono di usare normalmente i DB partendo da DB10. Non ricordo il perchè. Forse i DB precedenti a DB10 sono usabili nella comunicaziione tra PLC. Ciao

Luca Bettinelli
Inserita:

se non ricordo male, ormai sono passati anni dall'ultimo S5, sulla CPU 95U il DB1 era utilizzato come configurazione di canali a bordo

Inserita:

No, non cancellare e non modificare il DB1.

Contiene parametri di configurazione.

Per farti un'idea, aprilo in formato ASCII e vedrai che non contiene numeri senza senso, ma istruzioni per la configurazione della comunicazione, dell'orologio, il tempo di OB13 (OB35 in S7), e molto altro.

Se lo cancelli, mi pare che nella CPU venga generato in automatico un DB1 con i parametri di default, ma non ne sono sicuro.

Inserita:
formato ASCII
... in s5 seleziona la voce KC.

Nel progetto convertito in S7 naturalmente lo puoi cancellare...

Inserita:

In un sistema S5, a seconda della cpu, sono disponibili un numero limitato di blocchi dati DB: per le cpu 101 il loro numero può andare da 0 a 63, per le 102, le 103 e le 115 da 0 a 255.

Per tutte, però, il DB0 ed il DB1 non sono utilizzabili dal programma utente, quindi si parte dal DB2.

Il DB0, a detta dei manuali, è riservato al sistema operativo della cpu, mentre il DB1 è utilizzato per la parametrizzazione di funzioni interne (orologio incorporato, impostazione della comunicazione SINEC L1, elaborazione a tempo degli OB 10-13, controllo del tempo ciclo, gli indirizzi per i codici d'errore) e per la definizione dei merker di accoppiamento di comunicazione tra cpu.

Inserita: (modificato)
Nel progetto convertito in S7 naturalmente lo puoi cancellare...

Verissimo.

Chiedo scusa. Ho letto troppo frettolosamente e mi è sfuggito che la domanda sulla cancellazione di DB1 era riferita al progetto S7.

Modificato: da batta
Reverendo bit
Inserita:

Ciao Ragazzi,

Intanto volevo ringraziarvi per la vostra disponibilità.

Capito che nel progetto S7 posso cancellare il DB1, volevo porre alla vosra attenzione un'altro aspetto.

Nel Progetto S5 gli OB presenti sono:

OB1 Main cicle, e su questo nessun dubbio

OB21 Nuovo avviamento manuale con memoria

L KF +255

E DB 10

L KF +255

E DB 10

L KF +255

E DB 20

L KF +190

E DB 21

A DB 10

L KH 0081

T DW 22

L KF +0

T DW 25

L KY 30,33

T DW 21

OB22 Nuovo avviamento automatico con memoria

L KF +255

E DB 10

L KF +255

E DB 10

L KF +255

E DB 20

L KF +190

E DB 21

A DB 10

L KH 0081

T DW 22

L KF +0

T DW 25

L KY 30,33

T DW 21

OB31 errore di esecuzione, speciale

VUOTO

Dopo la conversione mi ritrovo in OB100 tutto questo codice generato automaticamente:

L 255

T #conv_akku1

TAK

T #conv_akku2

L STW

T #conv_stw

L #conv_akku1

SLW 1

T #conv_number_of_dbb

L 19

T #conv_create_db

L #conv_stw

T STW

L #conv_akku2

L #conv_akku1

CALL "CREAT_DB"

LOW_LIMIT:=#conv_create_db

UP_LIMIT :=#conv_create_db

COUNT :=#conv_number_of_dbb

RET_VAL :=#conv_ret_val

DB_NUMBER:=#conv_return_db

L 255

T #conv_akku1

TAK

T #conv_akku2

L STW

T #conv_stw

L #conv_akku1

SLW 1

T #conv_number_of_dbb

L 19

T #conv_create_db

L #conv_stw

T STW

L #conv_akku2

L #conv_akku1

CALL "CREAT_DB"

LOW_LIMIT:=#conv_create_db

UP_LIMIT :=#conv_create_db

COUNT :=#conv_number_of_dbb

RET_VAL :=#conv_ret_val

DB_NUMBER:=#conv_return_db

L 255

T #conv_akku1

TAK

T #conv_akku2

L STW

T #conv_stw

L #conv_akku1

SLW 1

T #conv_number_of_dbb

L 20

T #conv_create_db

L #conv_stw

T STW

L #conv_akku2

L #conv_akku1

CALL "CREAT_DB"

LOW_LIMIT:=#conv_create_db

UP_LIMIT :=#conv_create_db

COUNT :=#conv_number_of_dbb

RET_VAL :=#conv_ret_val

DB_NUMBER:=#conv_return_db

L 190

T #conv_akku1

TAK

T #conv_akku2

L STW

T #conv_stw

L #conv_akku1

SLW 1

T #conv_number_of_dbb

L 21

T #conv_create_db

L #conv_stw

T STW

L #conv_akku2

L #conv_akku1

CALL "CREAT_DB"

LOW_LIMIT:=#conv_create_db

UP_LIMIT :=#conv_create_db

COUNT :=#conv_number_of_dbb

RET_VAL :=#conv_ret_val

DB_NUMBER:=#conv_return_db

AUF DB 19

L W#16#81

T DBW 44

L 0

T DBW 50

L B#(30, 33)

T DBW 42

Potreste Aiutarmi a capire il motivo di tale codice?

In S5 cosa significa l'istruzione E DB 10?

E' necessario mantenere tutto quel codice in OB100?

Perchè vi è la SFC22 Create nuovo DB?

Grazie da Reverendo

Inserita: (modificato)

E DB n serve per creare il blocco dati n di lunghezza pari al valore pre-caricato in ACCU 1,

Esempio, con queste 2 istruzioni messe in OB21/22:

L KF +190

E DB 21

ottieni che all'avvio (OB21-22 sono elaborati all'avvio a freddo-caldo) viene rigenerata (se non c'è già) la DB21 di lunghezza 190 word.

CREAT_DB è l'equivalente di E DB

Io con S7 non uso mai CREAT_DB, è molto meglio, a progetto terminato lanciare un bel "salva ram in rom" così in caso di perdita dati le DB si ricreano non vuote ma con i tuoi settaggi (quelli che c'erano quando hai fatto salva ram in rom).

Modificato: da JumpMan
Inserita:

Concordo pienamente con JumpMan.

Crea i DB che ti servono ed elimina codice inutile.

Ricorda che, mentre in S5 la dimensione dei DB è espressa in WORD, in S7 si lavora invece in BYTE.

Reverendo bit
Inserita: (modificato)

Ciao ragazzi, :thumb_yello:

Siete stati chiarissimi, ma tolto un dubbio ne saltano fuori altri.

Chiarito il funzionamento dell'istruzione L KF +190; E DB 21, avrei queste domande da farvi:

- Perché questa istruzione è scritta due volte?

L KF +255

E DB 10

Non basterebbe una sola?

- Ma una volta dichiarato un DB di lunghezza190 Word, perchè al riavvio dovrei ricrearlo con la stessa lunghezza?

Durante l'elaborazione del software variano i valori delle Word e non la lunghezza giusto? o sto sbagliando?

Scusate per tutte queste domande :rolleyes: ma vorrei capire fino in fondo il motivo del codice scritto in OB21-22

Saluti e buonanotte da Reverendo

Modificato: da Reverendo bit
Inserita:

Si tratta sicuramente di un errore.

Errore che non causa anomalie, e quindi mai scoperto.

Inserita: (modificato)
Ma una volta dichiarato un DB di lunghezza190 Word, perchè al riavvio dovrei ricrearlo con la stessa lunghezza?

Durante l'elaborazione del software variano i valori delle Word e non la lunghezza giusto? o sto sbagliando?

Mi auto-quoto:

viene rigenerata (se non c'è già) la DB

Perché questa istruzione è scritta due volte?

Forse quella DB è talmente importante che voleva essere sicuro di rigenerarla !!! :P:superlol::lol:

Si tratta sicuramente di un errore.
Modificato: da JumpMan
Reverendo bit
Inserita: (modificato)

Ok Ragazzi messaggio ricevuto :thumb_yello:

Grazie di tutto ed alla prossima

Saluti da Reverendo

Modificato: da Reverendo bit
Inserita:
- Perché questa istruzione è scritta due volte?

L KF +255

E DB 10

Non basterebbe una sola?

Si tratta sicuramente di un errore.

Errore che non causa anomalie, e quindi mai scoperto.

E' esattamente come dice Batta: una doppia generazione di una DB, rimane senza effetto in quanto la DB esiste già.

Solo una generazione con lunghezza pari a zero

L KF 0

E DB 10

L KF 255

E DB 10

causa una cancellazione della DB in oggetto ed una successiva rigenerazione di una lunghezza di 255 parole dati: non è che volessero effettuare una cancellazione (prima di rigenerare nuovamente DB 10) dopo una transizione manuale da STOP in RUN per cancellare eventuali valori "sporchi" depositati in DB 10? :unsure:

  • 2 weeks later...
Reverendo bit
Inserita:
non è che volessero effettuare una cancellazione (prima di rigenerare nuovamente DB 10) dopo una transizione manuale da STOP in RUN per cancellare eventuali valori "sporchi" depositati in DB 10?

Non saprei anche perchè ho ricontrollato ed il codice è propio scritto due volte con la stessa lunghezza

Saluti

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