Vai al contenuto
PLC Forum


Dichiarazione struct temp in FC


Hat

Messaggi consigliati

Buongiorno a tutti,

vorrei sapere se è possibile all'interno di un blocco FC (scl) dichiarare una variabile temp di tipo struct che cambia autmaticamente nel momento in cui vado a cambiare una struct di riferimento in un db globale. Praticamente vorrei blindare l'FC, però per fare ciò ho bisogno che appunto una struct all'interno del blocco si aggiorni automaticamente.

Ho provato con i dati variant, ma non ho capito se sono io a sbagliare oppure non è possibile fare ciò.

Uso tia V19.

Spero di essere stato chiaro.

 

Link al commento
Condividi su altri siti


Ti faccio un esempio pratico:

1)  Creati un tipo di dati
Es.: "Ricettario"
Composto da: 4 bool, 8 interi, 16 reali

2) Crea un DB
ES.: DB "Ricetta"
Inserisci in questa DB la tua variabile che come tipo sarà "Ricettario"

 

3) Crea l'FC
Crea una variabile d'ingresso nel tuo FC, che come tipo di dato avrà "Ricetta"

4) Dove richiami l'FC dai la variabile di tipo "Ricettario" presente nel DB, in pasto all'ingresso dell'FC anch'esso di tipo "Ricettario"

 

Fatto, hai blindato l'FC, e la tua struttura è l'esatta replica del dato contenuto nel DB esterno

Spero di essere stato chiaro, al momento non ho il TIA a disposizione, se riesco più tardi ti faccio qualche screen

Modificato: da dina_supertramp
Link al commento
Condividi su altri siti

Qui ho creato il tipo di dati "Ricetta"

image.thumb.png.21fdff96b5d71670f533187af974f804.png

 

Qui ho creato il DB "Ricettario" che contiene n ricette

image.png.671ed987131f036316c136cd4579ebd5.png

 

Qui ho creato l'FC "Impastatrice" che ha in ingresso la ricetta

image.png.69955e378b5cb1568a7cc94a7bfa8905.png

 

Qui richiamo l'FC ed in base alle condizioni muovo la ricetta per il pane chiaro, oppure quella per il pane scuro

image.png.3612c0626a156dce3f3dd04d83cfb2d2.png

 

La cosa si può rendere ancora più efficiente e chiara usando gli FB ed i DB d'istanza.
Questo è uno dei tantissimi modi in cui puoi gestire la cosa, ma come vedi, non richiede istruzioni di sistema o personalizzate che muovano i dati.

Link al commento
Condividi su altri siti

Si, ho capito ciò che intendi e già li uso i tipi di dati per fare cose simili.

Mi chiedevo però, più per curiosità che per altro, se fosse possibile fare esattamente ciò che chiedo senza scomodare i tipi di dato.

Grazie in ogni caso per la risposta dettagliata.

Link al commento
Condividi su altri siti

19 minuti fa, Hat ha scritto:

Grazie in ogni caso per la risposta dettagliata.

Di nulla

 

19 minuti fa, Hat ha scritto:

Mi chiedevo però, più per curiosità che per altro, se fosse possibile fare esattamente ciò che chiedo senza scomodare i tipi di dato.

Sinceramente non ho mai provato.

Non scomodi nessuno, sono li apposta i tipi di dato 😁

Vorrei fare solo questa osservazione:


Per aggiornare una struttura isolata all'interno di un FB/FC (che sia anche un array, insomma un tipo di dati composto), la dovresti dichiarare come IN.
Viceversa, se devi aggiornare una struttura esterna, con un'altra proveniente da un blocco FB/FC la dovresti dichiarare come OUT.

Poi esistono anche i parametri IN/OUT.

Le variabili TEMP sono intese per rimanere dentro i blocchi ed essere scritte da cose dentro i blocchi, non da agenti esterni.
Gli agenti esterni scrivono gli IN e leggono gli OUT.
Avere un agente esterno che scrive su di una TEMP all'interno di un blocco.....si può fare? Si, ma a questo punto non stai più isolando nulla, perché non stai scrivendo/leggendo un parametro IN-OUT-IN/OUT, ma sta agendo su una variabile temporanea insita nel blocco funzione.
 

L'agente esterno scrive l'IN

L'IN scrive il TEMP
Il TEMP viene manipolato nell'FC
Il TEMP scrive l'OUT
L'agente esterno legge l'OUT

 

Modificato: da dina_supertramp
Link al commento
Condividi su altri siti

Il mio intento però sarebbe solo di usare l'agente esterno per conoscerne la struttura e dichiararne una uguale all'interno dell'FC.

Capisco però che la cosa non abbia senso. Era pura curiosità, grazie ancora 

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