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




Indicizzazzione Indiretta Del Numero Di Un Db


Messaggi consigliati

lupusimprobus
Inserito:

Buongiorno a tutti e grazie in anticipo per il tempo che mi dedicherete.

Plc Siemens Serie 300 (principalmente 314C-2DP e 315).

Ho 10 DB che contengono i dati di altrettante attrezzature che posso collegare alla macchina principale.

In base all'attrezzatura collegate copio il contenuto del DB corrispondente in un DB di lavoro.

Un esempio del codice è il seguente:

A I 0.0 // Carica archivio 1

FP M 0.0 // Fronte di salita

// Archivio 1

// Carico 10 word dall'archivio 1 (ovvero dal DB10)

// e le copio nell'archivio di lavoro (ovvero nel DB20)

JNB M001

CALL SFC 20

SRCBLK :=P#DB10.DBX 0.0 WORD 10

RET_VAL:=LW10

DSTBLK :=P#DB20.DBX 0.0 WORD 10

M001: NOP 0

A I 0.1 // Carica archivio 2

FP M 0.1 // Fronte di salita

// Archivio 2

// Carico 10 word dall'archivio 2 (ovvero dal D11)

// e le copio nell'archivio di lavoro (ovvero nel DB20)

JNB M002

CALL SFC 20

SRCBLK :=P#DB11.DBX 0.0 WORD 10

RET_VAL:=LW10

DSTBLK :=P#DB20.DBX 0.0 WORD 10

M002: NOP 0

A I 0.n // Carica archivio n

FP M 0.n // Fronte di salita

// Archivio n

// Carico 10 word dall'archivio n

// e le copio nell'archivio di lavoro (ovvero nel DB20)

JNB M00n

CALL SFC 20

SRCBLK :=P#DBn.DBX 0.0 WORD 10

RET_VAL:=LW10

DSTBLK :=P#DB20.DBX 0.0 WORD 10

M00n: NOP 0

Questo tipo di approccio funziona perfettamente (infatti lo sto utilizzando :-D ) ma ora cerco qualcosa di più performante in quanto caricare tanti FC20 quanti sono gli archivi mi pare uno spreco di risorse.

Veniamo quindi alla domanda per cui sto scrivendo

Domanda 1:

E' possibile indicizzare il numero del DB nel parametro SRCBLK dell'SFC20?

Qualcosa del tipo:

L 1

T MW10

JNB M001

CALL SFC 20

SRCBLK :=P#DB[MW10].DBX 0.0 WORD 10

RET_VAL:=LW10

DSTBLK :=P#DB20.DBX 0.0 WORD 10

M001: NOP 0

Domanda 2:

Nel codice seguente:

L 20

OPN DB 10

T DBW 0

Vi è un modo di indicizzare il numero del DB?

Qualcosa del tipo:

L 10

T MW 12 // Numero del DB da aprire

L 20

OPN DB [MW12] // Apro il DB contenuto in MW12 (in questo caso il DB10)

T DBW 0

Grazie ancora per la pazienza e l'aiuto.

Valerio Gallo


Inserita:

Devi usare i puntatori. Ti scrivo un codice per poi guardarlo e adeguarlo al tuo caso:

Con gli ingressi fisici(E0.0...) scrivi in una MW il numero di DB da cui prelevare i dati e li metti in una MW(es:MW10)

UN E 0.0

SPB A001

L P#0.0

LAR1

L P#0.0

LAR2

L 0

T MB 255

M001: AUF[MW10]

L DBW [AR1,P#0.0]

AUF DB 20

T DBW [AR2,P#0.0]

L MB 255

INC 1

T MB 255

L P#2.0

+AR1

L P#2.0

+AR2

L MB 255

L 10

<I

SPB M001

A001: NOP 0

Procedi nello stesso modo per gli altri archivi da aprire e scaricare in DB20.

Ciao Dario

Inserita:

Domanda 1

Si , ma non come lo hai scritto

devi parametrizzare tutto

Domanda 2

Si , quello che hai scritto e' corretto

Luca

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