Vai al contenuto
PLC Forum


Richiamo FB all'interno di FB da parametro


Spand

Messaggi consigliati

Non riesco a trovare il modo di dare come parametro in ingresso ad una FB o FC il valore di una FB da richiamare al suo interno.

In alternativa si potrebbe fare un richiamo indicizzato di una FC?

In AWL avrei scritto CALL FC[#indice]();  ma in SCL non capisco come convertire questa scrittura.

 

Link al commento
Condividi su altri siti


Non stò dicendo che funziona, era per far capire il concetto, ma credo dovrò risolvere la cosa in altro modo, mi sembra di capire che non è un problema usuale.

Link al commento
Condividi su altri siti

44 minuti fa, Spand ha scritto:

mi sembra di capire che non è un problema usuale

Mai sentita la necessità di fare una cosa simile.
E, anche fosse possibile, ritengo complicherebbe il debug.

Link al commento
Condividi su altri siti

Il 29/2/2024 alle 14:45 , Spand ha scritto:

Non riesco a trovare il modo di dare come parametro in ingresso ad una FB o FC il valore di una FB da richiamare al suo interno.

In alternativa si potrebbe fare un richiamo indicizzato di una FC?

In AWL avrei scritto CALL FC[#indice]();  ma in SCL non capisco come convertire questa scrittura.

 

Per curiosità lavori nel settore beverage/birrifici? Questo tipo di richiamo indicizzato l'ho trovato spesse volte quando facevo macchine per il beverage perchè le utenze erano scritte in fc fissi e il richiamo di questi fc era indicizzato da un fb che scorreva un indice con tutte le utenze contenute in un DB. Questo tipo di richiamo rende molto semplice aggiungere o rimuovere utenze oppure sequenze (fatte alla stessa maniera) senza nemmeno toccare il codice.

 

In SCL col Tia portal che lavora in simbolico non lo riesci a fare, dovresti trovare un'altra scappatoia.

 

 

Link al commento
Condividi su altri siti

io ho attuato una simile  soluzione quando in funzione della posizione di una navetta dovevo fare diverse cose ma si tratta di Step7.

Adesso si usa agevolmente un bel CASE farcito di tanti bei commenti.

Link al commento
Condividi su altri siti

1 ora fa, Agron92 ha scritto:

Questo tipo di richiamo indicizzato l'ho trovato spesse volte quando facevo macchine per il beverage perchè le utenze erano scritte in fc fissi e il richiamo di questi fc era indicizzato da un fb che scorreva un indice con tutte le utenze contenute in un DB

Ma era indicizzato il richiamo del blocco FC/FB, o solo il DB di istanza?

Link al commento
Condividi su altri siti

Avendo sviluppato per molti anni in AWL non sono informatissimo su tutti i tipi di parametri che si possono scambiare nel richiamo di una FB in SCL (Da . vedo esserci molti tipi di dati a me sconosciuti), mi chiedevo se tra questi si nascondeva la possibilità di passare anche una FC, o un nome simbolico da usare come indice per il richiamo al suo interno.

P.S. Non lavoro nel settore beverage, ma forse ho bevuto troppo negli anni 😛!!!  grazie a tutti

 

Link al commento
Condividi su altri siti

Mattia Spoldi

Vedendo così, stai cercando di fare la funzione callback classica del C/C++, sui 1200/1500 non si può fare, l'unica cosa che si avvicina è creare una funzione, che in base al parametro passato ne richiama una delle altre, es

 

funzioneCallback(int chiVuoiChiamare)

{

    switch(chiVuoiChiamare)
    {
    case 1:
        funzione1();
    case 2:
       funzione2();
    }

}

Link al commento
Condividi su altri siti

Quello che vuoi fare non è possibile perché più che un compilatore servirebbe una specie di interprete. Che dovrebbe essere in grado di risolvere indirizzi di routines la cui posizione in memoria è dinamicamente calcolata in funzione del valore dell'indice specificato. Almeno guardando il tuo esempio iniziale...

Link al commento
Condividi su altri siti

Mattia Spoldi

Non è che serve una specie di interprete, la maggior parte dei linguaggi più evoluti lo fa senza problemi, vedi codesys che implementa tutto il discorso di callback, siemens cercando di limitare l'utilizzo di puntatori ha deciso di non dare questa possibilità, tutto qua.

 

Link al commento
Condividi su altri siti

non mi riferivo al callback ma a quello che lui scriveva nel post iniziale  " CALL FC[#indice]() " in cui mi sembra di capire che volesse fare dinamicamente chiamate a FC diverse indizizzandole... tipo con indice = 1  chiamare FC1 se indice = 456 chiamare FC456.....

 

per quello dicevo "specie di interprete"

 

però forse l'ho frainteso! o forse no! 🤔

Modificato: da drn5
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...