Vai al contenuto
PLC Forum


Come passare un puntatore ad una FC???


Messaggi consigliati

Inserito:

Salve sapete come passare con TIA 13 un puntatore ad una FC?

Vorrei creare una funzione che passando come parametro la dimensione dell'array e l'indirizzo dell'array (in simbolico magari) mi calcoli la somma e mi restituisca il salore di questa.

Non so come dichiarare le variabili di ingresso della funzione, sapete come si fa?

Ho visto che esistono i tipi POINTER e VARIANT, presumo siano i Pointer quelli che fanno al caso mio.....


Inserita:

Mi sto avvicinando, ho creato una funzione alla quale gli passo l'array (D) come InOut di tipo Variant.

L'array che parrerò sara di tipo Bool.

Ho poi dichiarato:

x : Int

N : UDInt

p :Bool

 

Poi ho scritto il seguente codice:

IF IS_ARRAY(#Arr) AND NOT(IS_NULL(#Arr)) THEN
    #N := CountOfElements(#Arr);
    IF TypeOf(#Arr) = Bool THEN
        FOR #x := 0 TO UDINT_TO_INT(#N) -1  DO
            VariantPut(SRC := #Arr[#x],
                       DST := #p);
        END_FOR;
    END_IF;
END_IF

 

che non ha molto senso ma mi serve per capire come estrapolare i dati dall'array. In pratica p dovrebbe assumere il valore di #Arr[#x].

Ora ho il problema su "VariantPut(SRC := #Arr[#x], DST := #p);", non gli piace "#Arr", potete aiutarmi?

 

Inserita:

Prima di entrare nel loop passa #arr in un array locale grande quanto il massimo array che prevedi di usare.

usa variantGet per passare il variant alla variabile temporanea. Non credo che tu possa utilizzare la sintassi #Arr[#x], in quanto #Arr non è un array.

 

ad esempio:

tArr: array[0..100] of bool;

 

IF IS_ARRAY(#Arr) AND NOT(IS_NULL(#Arr)) THEN

   VariantGet(SRC := #Arr,
                       DST := #tArr);

ELSE

    RETURN;

END_IF;

 

e nel tuo codice usa #tArr[#x].

 

Spero di esserti stato utile!

M

 

 

Inserita:

Risolto!

 

Immagine.png

 

Se conoscete altri modi fatemi sapere.

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