aleb2 Inserito: 5 marzo 2013 Segnala Share Inserito: 5 marzo 2013 Ho una variabile dichiarata come array [1..360] of Struct, composta da un valore Real e da un bool; volevo creare una FC che facesse la media dei valori Real, ma con la variabile Array non sembra funzioni il ciclo FOR per fare la somma, c'è qualcosa che mi sfugge; p.s non volevo usare i puntatori Link al commento Condividi su altri siti More sharing options...
batta Inserita: 5 marzo 2013 Segnala Share Inserita: 5 marzo 2013 Magari l'errore è nel codice. Ma se non alleghi il codice... Link al commento Condividi su altri siti More sharing options...
aleb2 Inserita: 6 marzo 2013 Autore Segnala Share Inserita: 6 marzo 2013 non è il codice il problema; dovendo fare una somma tra gli elementi dell'array, non ho capito come far incrementare l'indice dell'array per fare la somma usando il ciclo for Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 marzo 2013 Segnala Share Inserita: 6 marzo 2013 Usa uno degli accumulatori come puntatore; lo carichi prima di iniziare il ciclo di "for". Al termine del ciclo, prima della ripetizione incrementi l'accumulatore che hai usato come puntatore. Link al commento Condividi su altri siti More sharing options...
aleb2 Inserita: 6 marzo 2013 Autore Segnala Share Inserita: 6 marzo 2013 #SOMMA:=0; FOR #I:= 1 TO 360 DO IF (#DATO_EL[#I].VALIDO=1) THEN #SOMMA:=#DATO_EL[#I].VALORE+#SOMMA; #MEDIA_ORARIA:=#SOMMA/360; END_IF; END_FOR; DATO_EL Array [1..360] of Struct Output MEDIA_ORARIA Real InOut J Int Temp SOMMA Real ... I Int ... Return Ret_Val Void Il mio problema e` come passare il parametro attuale a #DATO_EL Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 6 marzo 2013 Segnala Share Inserita: 6 marzo 2013 Non mi ero accorto che la richiesta era relativa a SCL Link al commento Condividi su altri siti More sharing options...
batta Inserita: 6 marzo 2013 Segnala Share Inserita: 6 marzo 2013 (modificato) ma con la variabile Array non sembra funzioni il ciclo FOR per fare la somma Il mio problema e` come passare il parametro attuale a #DATO_EL Mi pare che tu stia dicendo due cose completamente diverse. A questo punto, non capisco più quale sia il tuo problema. Non mi stancherò mai di ripeterlo: punto fondamentale per poter avere risposte chiare, è porre domande chiare. Se la domanda riguarda come collegare il parametro "DATO_EL" alla FC, la risposta è che devi collegare un array identico a quello dichiarato all'interno della FC. Per fare questo, credo si possa usare solo il simbolico. Per esempio, se hai creato un DB chiamato DB_Media, all'interno del quale c'è un ARRAY di nome "DATO" (che deve essere composto da 360 STRUCT formate da una variabile BOOL e una REAL), la sintassi da usare è: "DB_Media".DATO Io ho fatto una prova e, come era facile supporre, funziona. Nel tuo codice però ci sono alcune cose che non capisco: 1) perché ci sono tutti quei caratteri "#" ? 2) la dichiarazione delle variabili è incompleta. Cosa ti costava fare un copia/incolla completo delle dichiarazioni delle variabili? Modificato: 6 marzo 2013 da batta Link al commento Condividi su altri siti More sharing options...
aleb2 Inserita: 6 marzo 2013 Autore Segnala Share Inserita: 6 marzo 2013 i dati con # sono i parametri formali dellFC; Pensavo anch io ma quando vado a passare il parametro attuale richiamando l`FC ,non accetta DBX.DATO_ELEMENTARE dove dato elementare e` una variabile ARRAY[1..360] of Struct identica Link al commento Condividi su altri siti More sharing options...
batta Inserita: 6 marzo 2013 Segnala Share Inserita: 6 marzo 2013 i dati con # sono i parametri formali dellFC; Ok, stai usando TIA Portal. Magari scriverlo non sarebbe stata una cattiva idea. Te l'avevo chiesto perché in Step7 in scl non viene usato il #. non accetta DBX.DATO_ELEMENTARE A me lo accetta, sia scrivendo DBxxx.NomeVariabile, sia scrivendo "NomeDB".NomeVariabile Devi solo cancellare le paretesi [] Link al commento Condividi su altri siti More sharing options...
aleb2 Inserita: 7 marzo 2013 Autore Segnala Share Inserita: 7 marzo 2013 Cavoli! con il TIA ogni tanto succedono di queste cose...grazie Link al commento Condividi su altri siti More sharing options...
batta Inserita: 7 marzo 2013 Segnala Share Inserita: 7 marzo 2013 Due piccole note: 1) la riga di codice IF (#DATO_EL[#I].VALIDO=1) THEN può diventare IF #DATO_EL[#I].VALIDO THEN 2) creando una struttura con una variabile BOOL e una REAL, vengono usati 6 byte. Tutto dipende ovviamente da come vai a scrivere i valori nel tuo array di variabili STRUCT, ma potresti anche gestire due array distinti, uno per le variabili BOOL e uno per le variabili REAL. Link al commento Condividi su altri siti More sharing options...
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