ottoz Inserito: 23 aprile 2020 Segnala Inserito: 23 aprile 2020 SCL (*Richiamo in un'assegnazione di valore, per "MyFC" è stato definito un valore della funzione*) #MyOperand := "MyFC" (MyInput1 := 3, MyInput2 := 2, MyInput3 := 8.9, MyInOut := "Tag1"); è fattibile questa funzione? , #MyOperand che tipo di dati deve avere (INT) o altro? a me sembra strano mettere i valori di una funzione in uno operando anzi credo che non si possa fare
batta Inserita: 23 aprile 2020 Segnala Inserita: 23 aprile 2020 Sì, certo che è possibile. Il tipo di dati di ritorno, come tutti gli altri dati, lo definisci nell'interfaccia delle variabili della funzione, come valore di ritorno che, di default, non è usato ed è quindi impostato come "Void". Ma, una sola domanda: non fai più presto a provare che a chiedere e attendere risposta?
ottoz Inserita: 23 aprile 2020 Autore Segnala Inserita: 23 aprile 2020 ho provato la funzione ma di da errore quindi dove ce il void devo mettere operando proverò anche se non so cosa è iltipo di dati ritorno
batta Inserita: 23 aprile 2020 Segnala Inserita: 23 aprile 2020 Se scrivi: #MyOperand := "MyFC" (MyInput1 := 3, MyInput2 := 2, MyInput3 := 8.9, MyInOut := "Tag1"); significa che vuoi assegnare il valore di ritorno della funzione alla variabile #MyOperand . Se lasci "Void", significa che la funzione non avrà un valore di ritorno, quindi se vuoi assegnare un valore di ritorno (che non c'è) ad una variabile, chiaro che ti dà errore. Il valore di ritorno della funzione lo devi scrivere all'interno della funzione stessa. Non è molto diverso da un parametro di uscita. Il valore di ritorno, solitamente, si usa per restituire un codice di errore, oppure il risultato di un calcolo. Potrebbe anche essere una variabile booleana, che assume lo stato TRUE se sono state rispettate certe condizioni. Si usa moltissimo in altri linguaggi (esempio, nel C e suoi derivati), molto meno nella programmazione dei PLC. Sempre per restare nell'esempio del C, potresti scrivere: if (myFunction(a, b, c)) { ... ... } Se la funzione restituisce un valore diverso da zero, vengono eseguite le istruzioni all'interno dell'IF. Oppure: if (myValret = myFunction(a, b, c)) { ... ... ... } In un colpo solo, assegni il valore di ritorno della funzione a myValret, e crei la condizione per eseguire l'IF. Nei linguaggi soliti dei plc, non lo puoi fare, nemmeno in testo strutturato. In strutturato, dovresti scrivere qualcosa del genere: myValret := myFunction(a, b, c); IF myValret THEN ...; ,,,; END_IF; A questo punto, se myValret lo colleghi ad un parametro di uscita della funzione piuttosto che rilevarlo come valore di ritorno, poco cambia.
ottoz Inserita: 25 aprile 2020 Autore Segnala Inserita: 25 aprile 2020 Ciao Batta sono un po duro di comprendonio non è che puoi farmi sue righe di esempio? non so il #MyOperand lo devo mettere nell interfaccia dove mi trovo la funzione return?
batta Inserita: 25 aprile 2020 Segnala Inserita: 25 aprile 2020 2 ore fa, ottoz ha scritto: non so il #MyOperand lo devo mettere nell interfaccia dove mi trovo la funzione return? #MyOperand, che ho ripreso dal tuo esempio, è una qualsiasi variabile, che deve essere dello stesso tipo della variabile restituita dalla funzione che richiami. Nell'interfaccia delle variabili di una FC, ti trovi le seguenti voci: - Input - Output - InOut - Temp - Constant - Return Come Return ti trovi il nome stesso della FC, e come tipo di dati, di default, ti trovi Void. Void significa che la FC non restituisce nessun valore di ritorno. Se chiedi come usare il valore di ritorno, immagino tu abbia un motivo e, in base a questo motivo, deciderai che formato (tipo di dati) assegnare al valore di ritorno. Se, come tipo di dati, imposti INT, significa che la funzione ti restituirà un valore in formato INT. Quale sarà questo valore? Quello che tu assegnerai nel codice all'interno della FC. Tanto che, se nella FC non scrivi da nessuna parte che valore assegnare, il compilatore ti dà errore. E come si usa il valore di ritorno? In testo strutturato: Supponiamo di avere una FC con due parametri in Input e un parametro in Output, senza valore di ritorno. Avrai qualcosa simile a questo: "myFc"(In_1 := 123, In_2 := 456, Out_1 => #OutValue); Ai parametri di tipo Input puoi collegare sia variabili che costanti, mentre ai parametri Output, ovviamente, non puoi collegare costanti. Vediamo ora cosa succede se la stessa funzione ha un valore di ritorno: #ValoreDiRitorno := "myFc"(In_1 := 123, In_2 := 456, Out_1 => #OutValue); Quindi, quello che la funzione restituisce come valore di ritorno, viene assegnato alla variabile #ValoreDiRitorno. In ladder si presenta così: Ovvero, si presenta come se fosse un parametro in uscita. E, in effetti, da un punto di vista pratico, è un valore in uscita. Allora, perché usare il valore di ritorno di una FC? Come ti ho già detto, nei PLC non è che si usi moltissimo. Tanto per fare un esempio, potremmo voler creare una FC per il calcolo di due resistenze in parallelo: Rp = (R1 * R2) / (R1 + R2) Sia chiaro, è solo un esempio, data la banalità del calcolo. Potresti creare una FC senza valore di ritorno, ed il richiamo in testo strutturato sarebbe così: Nel caso invece di FC con valore di ritorno, sarebbe così:
ottoz Inserita: 25 aprile 2020 Autore Segnala Inserita: 25 aprile 2020 ora e chiaro, grazie mille Batta ciao
leleviola Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 Il 23/4/2020 alle 19:22 , batta ha scritto: Se lasci "Void", significa che la funzione non avrà un valore di ritorno, quindi se vuoi assegnare un valore di ritorno (che non c'è) ad una variabile, chiaro che ti dà errore. Il valore di ritorno della funzione lo devi scrivere all'interno della funzione stessa. Scusami batta ma dove si definisce se la Funzione ha valore di ritorno nella Funzione? Definisci le varibili di ingresso e Uscita etc. ma la variabile di ritorno dove viene definita e come, scusami ma sono abituato a usare direttamente i parametri In e Out della funzione ma non capisco dove assegnare direttamente la variabile di Ritorno perchè così puoi assegnare direttamente a una variabile esterna magari il risultato di una funzione
Mattia Spoldi Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 lo dichiari nel box dove dichiari le variabili IN-OUT-TEMP, devi andare verso il basso e vedrai il nome del tuo fc con scritto void di fianco, ti basta cambiare il void in int,real,bool ecc
step-80 Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 (modificato) 2 ore fa, leleviola ha scritto: Scusami batta ma dove si definisce se la Funzione ha valore di ritorno nella Funzione? Definisci le varibili di ingresso e Uscita etc. ma la variabile di ritorno dove viene definita e come, scusami ma sono abituato a usare direttamente i parametri In e Out della funzione ma non capisco dove assegnare direttamente la variabile di Ritorno perchè così puoi assegnare direttamente a una variabile esterna magari il risultato di una funzione @leleviola se usi Mitsubishi avrai forse usato qualche volta una 'funzione' al posto di un FB. Sostanzialmente simili ma la funzione è priva di istanza e può avere solo un valore di ritorno che definisci quando crei la funzione: Definisci gli input: il codice, dove il valore di uscita si chiama come la funzione: Modificato: 27 aprile 2020 da step-80
batta Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 Il valore di ritorno lo trovi solo nelle FC. Nelle FB non c'è. Di default, quando crei una nuova FC, c'è Void, quindi la FC non restituisce un valore di ritorno. Se vuoi avere un valore di ritorno, ti basta definire il tipo di dato al posto di Void.
leleviola Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 1 ora fa, il toby ha scritto: lo dichiari nel box dove dichiari le variabili IN-OUT-TEMP, devi andare verso il basso e vedrai il nome del tuo fc con scritto void di fianco, ti basta cambiare il void in int,real,bool ecc Infatti io mi riferivo a una DB d'istanza di una funzione FB per il calcolo di una funzione matematica, il valore di ritorno lo si ha ha con una FC non con una DB d'istanza, nella DB d'istanza il risultato di una funzione matematica lo hai nella variabile output che definisci a seconda degli operandi che hai in ingresso, credevo fosse possibile anche con le DB d'istanza
leleviola Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 Si @step-80 in Mitsubishi lo so, quello è con GX-Works2 poi con GX-Works3 ancora meglio, puoi crearti FB d'istanza con varie uscite sia in FBD che il Ladder che in ST, credevo che il ritorno in Siemens fosse possibile pure con DB d'istanza è che con FC non ho l'abitudine di usarlo, le FC spesso io le creo solo per il richiamo da OB1 per suddividere il programma nei vari sottoprogrammi non per questa funzionalità a quel punto meglio l'uscita/e predisposta/e nel FB e nella relativa DB d'istanza
Mattia Spoldi Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 scusa, non avevo capito che parlassi di FB, solo gli FC possono avere un valore di ritorno
batta Inserita: 27 aprile 2020 Segnala Inserita: 27 aprile 2020 1 ora fa, leleviola ha scritto: credevo che il ritorno in Siemens fosse possibile pure con DB d'istanza Non mi è chiaro cosa intendi.
leleviola Inserita: 28 aprile 2020 Segnala Inserita: 28 aprile 2020 6 ore fa, batta ha scritto: Non mi è chiaro cosa intendi. Credevo che nelle FB come nelle FC fosse possibile impostare il valore di ritorno della funzione in realtà ciò è possibile solo nelle FC, nelle FB hai l'uso delle DB d'istanza con le variabili che hai impostato nella FB ma non il ritorno
batta Inserita: 28 aprile 2020 Segnala Inserita: 28 aprile 2020 5 ore fa, leleviola ha scritto: il valore di ritorno della funzione in realtà ciò è possibile solo nelle FC Sì, non so per quale motivo, ma è così. Immagino sia perché il valore di ritorno risulta comodo per un uso come quello che ho descritto nell'esempio del calcolo del parallelo di due resistenze, ovvero nelle situazioni in cui passi dei parametri, e ti aspetti solo un valore di ritorno. Difficilmente una FB viene usata in questo modo. Personalmente, faccio uso raramente del valore di ritorno.
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora