Vai al contenuto
PLC Forum


interfacce dei blocchi step7


coquinati

Messaggi consigliati

Ciao ragazzi ho letto molte discussioni a riguardo, ma non ho capito pienamente l'uso di queste interfacce,da quello che ho letto servono a far comunicare più blocchi tra di loro, ma con che tipo di dati posso farlo? E a quanti blocchi posso andare a comunicare la stessa variabile ? Ho letto che le in e le out,se non utilizzate, devono essere riempite lo stesso ,come mai? Con le interfacce io vorrei alleggerire un blocco funzione sopratutto per renderlo più chiaro ,per esempio spostare alcuni segmenti. In un altro blocco , è possibile farlo utilizzando queste interfacce?. Grazie ragazzi

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti


ho letto servono a far comunicare più blocchi tra di loro

Più corretto dire che servono per passare parametri (sia in ingresso che in uscita) ai blocchi funzione.

ma con che tipo di dati posso farlo?

Non capisco la domanda. I dati possono essere bool, int, dint, db, any, pointer, ecc. Tutti quelli selezionabili nella colonna "tipo di dati".

E a quanti blocchi posso andare a comunicare la stessa variabile ?

Non c'è limite.

Ho letto che le in e le out,se non utilizzate, devono essere riempite lo stesso

Questo vale solo per le FC. Con le FB puoi anche lasciare il campo vuoto. In ogni caso, con le FC, puoi sempre usare costanti (solo per i parametri in ingresso) o variabili locali.

Con le interfacce io vorrei alleggerire un blocco funzione sopratutto per renderlo più chiaro ,per esempio spostare alcuni segmenti. In un altro blocco , è possibile farlo utilizzando queste interfacce?

Prova a riformulare la domanda. Non mi è chiaro l'uso che ne vorresti fare.

Link al commento
Condividi su altri siti

grazie batta contavo in una tua risposta.

ti faccio un esempio rapido per spiegarmi meglio sull'ultimo argomento dove non sono stato chiaro:

segmento 1

U E120.0

= M0.0

adesso io voglio spostare lo stato del assegnazione m0.0 in un altro blocco funzione , per farlo posso usare un interfaccia OUT?

,ma per quale motivo devo riempire lo stesso in un blocco fc la variabili in o out anche se non utilizzate ? per evitare contrasti con altre interfacce delle fc?

grazie mille per la tua disponibilità batta buona domenica

Link al commento
Condividi su altri siti

segmento 1

U E120.0

= M0.0

adesso io voglio spostare lo stato del assegnazione m0.0 in un altro blocco funzione , per farlo posso usare un interfaccia OUT?

Intendi che vuoi modificare lo stato di M0.0 all'interno di un'altra funzione?

Ma per fare questo non hai bisogno di passare parametri.

Ricorda però che si deve stare molto attenti con l'assegnazione dello stato di un bit in più parti del programma.

Se la cosa è voluta e ben studiata, ben venga, ma spesso potrebbe causare comportamenti difficili da controllare.

Ancora però non ho capito che uso vorresti fare di una FC con parametri.

Di solito ha senso se la stessa funzione deve essere richiamata più volte in un programma, ma ogni volta con valori diversi.

Cerco di spiegarlo con un esempio banale.

Supponi di dover fare il calcolo y = ax^2 + bx + c.

Potresti scrivere:

L x

L x

*R

L a

*R

= tmp

L b

L x

*R

L c

+R

L tmp

+R

T y

Se lo stesso calcolo, magari con valori diversi, lo devi fare più volte, hai due scelte: ogni volta riscrivi tutto il codice (usando variabili diverse), oppure fai una funzione alla quale passi i parametri.

Mi pare evidente che la seconda scelta è molto più razionale.

Immagina poi che questo calcolo debba essere modificato. Se hai usato una funzione, ti basta modificare la funzione e la modifica vale per tutti i richiami. Se hai scritto ogni volta il codice, devi modificare tutte le parti di programma.

E che l'uso di FC sia pratico credo risulti ancora più evidente.

Tieni presente che questo è un esempio molto banale.

Qualcosa di più pratico potrebbe essere la gestione di un motore.

Potresti creare una funzione alla quale passi i parametri modo operativo selezionato, stato protezioni, comandi, ecc., e che ti restituisce una variabile di stato, il comando per l'attivazione del motore, e tutto quello che ritieni opportuno.

Se hai dieci motori da trattare tutti allo stesso modo, fai una sola volta la fatica di crearti una funzione e poi, semplicemente, richiami tale funzione collegando le variabili relative al motore interessato.

ma per quale motivo devo riempire lo stesso in un blocco fc la variabili in o out anche se non utilizzate ? per evitare contrasti con altre interfacce delle fc?

In una funzione FB tutte le variabili (escluse solo le TEMP) sono appoggiate al DB di istanza. Quindi non è indispensabile collegare una variabile al parametro, perché comunque tutto viene letto/scritto nel DB di istanza.

Una FC invece non ha il DB di istanza.

Torniamo quindi all'esempio del calcolo . Se io, per esempio, non scrivo il valore della variabile "a", come fa la funzione a calcolare il valore di ax^2?

Mi pare quindi evidente che ad un parametro in ingresso (o anche in/out) devo per forza collegare una variabile, o una costante.

Questo potrebbe non essere indispensabile per un parametro in uscita. Per esempio, nel caso della funzione del motore potrei aver gestito nella funzione i comandi avanti ed indietro, ed usare la funzione per la gestione di un motore per il quale è prevista solo la marcia avanti. In questo caso, verrebbe da pensare che potrei non collegare nulla all'uscita per la marcia indietro. In questo caso si tratta quindi di una scelta di chi ha sviluppato il compilatore.

Non è comunque un problema: basta usare variabili temporanee.

Link al commento
Condividi su altri siti

Chiarissimo come sempre , grazie mille, praticamente io creo un blocco fc che al interno ho la formula per eseguire una equazione di secondo grado , assegno un valore algebrico a ogni dato,che penso che andrò a dichiarare questi nel interfaccia temp ,poi metto tutti i dati algebrici nella variabile in_out , e alla fine creo per esempio altri 2 fc (in cui devi eseguire l'equazione ) e su ognuno assegno nel interfaccia IN a ogni lettera algebrica una variabile per esempio un numero intero , funziona così ? Giusto? . Devo dire che io volevo utilizzare una interfaccia per trasmettere i stati logici di un uscita ad un altro fc , ma ora mi rendo conto che le interfacce tra blocco e blocco non sono nate per questo motivo,o meglio si può senza.(devo utilizzare il riferimento incrociato)praticamente mi ero fissato di utilizzarle per il motivo di essere più chiaro ,ed evitare casini , ho letto appunto che i più noti errori di programmazione sono dovuti a collisioni tra uscite posti in vari blocchi . Ma adesso che circa ho capito come funzionano le interfacce mi eserciterò per impararle alla perfezione .grazie mille della spiegazione comunque .

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

Volevo anche esporre un altro dubbio. , io quando creo una variabile temp per esempio devo inserire un indirizzò della variabile , ma su che memoria vanno interferire questi indirizzi ?hanno una parte di memoria propria per tutte le interfacce? O occupano parte della tabella dei simboli ? Grazie in anticipo , è scusate se chiedo ma voglio essere sicuro dove metto le mani , grazie mille

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

Pensandoci ora ho appena fatto una domanda stupida, perché le variabili temp fanno parte solo della funzione messa in questione e non posso trasmettere questa variabile in un altro fc ,quindi non vado ad interferire con nessun indirizzò ,scusate chiedo scusa , e chiedo se un moderatore mi può eliminare l'ultimi due messaggi

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

Ragazzi , non riesco capire come comunicare ai altri blocchi funzione le interfacce, nel senso che io ho creato una funzione(fc1) dichiarato le interfacce ma non riesco comunicare queste a un altro blocco funzione(fc2) , forse mi sono fatto un idea sbagliata sul uso di queste interfacce? CIAo ragazzi

Inviato dall'app. Mobile di PLC Forum da iPhone6,2

Link al commento
Condividi su altri siti

Io non riesco a capire cosa tu intenda con "comunicare le interfacce agli altri blocchi".

Intendi forse che se in FC1 dichiaro una variabile di ingresso (per esempio: MiaVarIn di tipo INT), tu vorresti vedere la stessa variabile anche in FC2?

Se vuoi dei dati che siano accessibili da tutte le funzioni, devi usare i dati globali, che possono essere i DB, i DB di istanza, i merker, gli ingressi, le uscite.

Oppure, visto che tu alla FC1 dovrai collegare una variabile, per esempio DB10.DBW0, è alla DB10.DBW0 che dovrai accedere in FC2.

Il bello di poter usare FC e FB parametrizzate sta proprio nel fatto che i dati che passi sono relativi a quella e solo a quella funzione.

Per esempio, io posso richiamare due volte la FC1. Al primo richiamo al parametro MiaVarIn collego la variabile DB10.DBW0; poi richiamo un'altra volta FC1, e a MiaVarIn collego la variabile MW40; Poi faccio un altro richiamo di FC1 e a MiaVarIn collego DB20.DBW62.

Prova a fare un esempio pratico di quello che vorresti fare, perché io non riesco a vedere l'utilità di "comunicare le interfacce ad un'altra funzione".

Link al commento
Condividi su altri siti

buonasera batta, mi scuso per avermi spiegato male, ma ora che ho capito avevo sbagliato fin dal principio , praticamente io ero intenzionato di fare questo:

volevo dichiarare all'interno di un FC (FC1) una operazione per incrementare una variabile DINT che conta le aperture di una valvola, l'operazione che volevo fare è questa A=A+B (A=valvola.B=addendo +1) .

allora io ho dichiarato al interno del FC1 questa formula eseguendola con un ADD_DI , ho dichiarato A nella interfaccia IN_OUT e B nella IN,fatto questo io volevo dichiarare A e B su un altra FC (FC2), questo intendevo dire con dichiarare le interfacce in un altro FC , io credevo che potevo visualizzare le interfacce A e B direttamente nella parte (ambiente. interfacce) del FC2, senza richiamare FC1 in un segmento del FC2 , poi cercando di capire sono arrivato alla soluzione bastava che entravo nella lista istruzioni prendevo FC1 e lo trascinavo nel segmento del FC2 , e cosi ho capito,

ti ringrazio infinitamente ,grazie.

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