Vai al contenuto
PLC Forum


Step7: Array Come Parametro


Necromante

Messaggi consigliati

Salve a tutti!

Ho una domanda: si puo passare ad una FC come parametro un array (che ho in un DB)?

se si. come?

ovvero

nel mio DBx ho un "array[1..20] of bool" e voglio passarlo a questa FC

come faccio?

grazie

Link al commento
Condividi su altri siti


Piccolo problema!

A questa routine, per leggibilità e semplicità, voglio impostare come parametro in ingresso un array di bool.

Dentro questa FC non ho nessun problema a configurare l'array in ingresso.

Il mio problema è nel passargli questo array che ho nel mio DB.

ovvero:

CALL FC123 //Non gli piace !!

ArrayIn:= DB456.MioArray //Non gli piace !!

qualè la sintassi corretta? (Sempre se si possa fare ciò)

grazie.

Link al commento
Condividi su altri siti

Ciao,...

Non so se posso esserti di aiuto per questo argomento perche l'ho aperto i da poco senza ottenere grandi risultati.

CALL FC123 //Non gli piace !!

domanda stupida hai creato prima del richiamo l'FC123?

Link al commento
Condividi su altri siti

ArrayIn:= DB456.MioArray //Non gli piace !!

Che cosa vorresti fare seconda una tua logica con questa istruzione? a prescindere dalla sintassi , vediamo se insieme riusciamo a fare qualcosa.

Link al commento
Condividi su altri siti

E' strano l'ho appena fatto , tramite la finestra insersci-blocco s7-funzione qui l'ho chiamato FC123, poi sono andato in ob1 e ho inserito CALL FC 123 , non mi ha dato nessun errore.

prova ad andare sopra con il mouse vedi ce tipo di errore ti esce.

Link al commento
Condividi su altri siti

si nell'interfaccia della FC ho dichiarato come prarametro di ingresso un array

e nel db la dimesione dell'array è uguale

la domanda allora diviene: qualè la sintassi per dirgli l'array del db?

ovvero

CALL FC123

ArrayIn:= ??????? // Cosa devo mettere qui? (sintassi puntando al DB)

Link al commento
Condividi su altri siti

prova a fare questo:

clicca con il mouse su FC 123, poi vai su

MODIFICA

RICHIAMO

AGGIORNA..

scrivi esattamente questo l'ho appena fatto:

CALL FC 123

arrayin:=DB456.mioarray

ti faccio solo una premessa io in questa prova ho dichiarato l'arrai come int sia nel fc123 che nel db 456 :

FC123

DICHIARAZIONE IN

NOME:ARRAYIN TIPO DI DATI:ARRAY[1..20] OF INT

fai la stessa cosa vedi che succede a me non mi ha dato nessun errore

Link al commento
Condividi su altri siti

prova a fare questo:

clicca con il mouse su FC 123, poi vai su

MODIFICA

RICHIAMO

AGGIORNA..

per essere piu' preciso mi correggo:

prova a fare questo in OB1:

clicca con il mouse su CALL FC 123, poi vai su

MODIFICA

RICHIAMO

AGGIORNA..

altra cosa se nel FC123 nella dichiarazione non scrivi esattamente questo:

ARRAY[1..20] OF INT

ti dara un errore di compatibilita' di tipo.

Link al commento
Condividi su altri siti

continuando nel discorso;

Il mio problema è nel passargli questo array che ho nel mio DB.

AUF "db456" //apro il blocco dati 456

L "db456".mioarray[1] //carico il valore che ho nel primo dato dell'array

T MW 10 //trasferisco il valore in una mw

Se ti puo' essere di aiuto.

Link al commento
Condividi su altri siti

Ciao ragazzi,

ho appena fatto qualche prova, ho creat un FC (FC1) e un DB (DB1).

Nell'FC1 ho dichiarato come variabile di ingresso/uscita un ARRAY [1..20] OF INT e una variabile di uscita ARRAY[1..20] OF INT. A questo punto ho richiamato l'FC1 nell'OB1 provando a passare come parametro sia una variabile temporanea creata nel'OB1 (es. PIPPO ARRAY[1..20] OF INT) sia una variabile creata nel DB1 nel seguente modo

|PIPPO     |ARRAY[1..20]    |                             |
           |INT             |                             |

(Questa è la vista di dichiarazione)

Quindi ho utilizzato nelle chiamate questa variabile e non ho avuto alcnu problema. Secondo me potrebbe essere che avete commesso qualche errore nelle dichiarazioni delle variabili. Se utilizzate una variabile locale dovete utilizzare solo il nome della variabile per passare il parametro, se utilizzate un DB semplicemente "NomeDB"."NomeVariabile". Fate anche attenzione che dal momento che non state utilizzando parametri ANY (che poi dovreste gestire all'interno del blocco) ma state utilizzando dei tipi array, fate anche attenzione alla dimensione di ciò che dichiarate vale a dire il numero di elementi ma non solo, infatti anche gli indici devono corrispondere. Se avete dichiarato un parametro di IN/OUT in questo modo ARRAY [1..20] OF INT non potete passare come parametro attuale qualcosa di questo tipo ARRAY [2..21] OF INT, infatti la dimensione è uguale ma gli indici non corrispondono, se avete qualche problema inviate pure un MP, vi fornisco la mia e.mail e potete inviarmi il progetto.

Ciao

Modificato: da nick.kelevra
Link al commento
Condividi su altri siti

P.S.

Doveste avere dei dubbi in futuro sui passaggi dei parametri ai blocchi vi rimando al seguente manuale "Programmazione con STEP 7" da pag. 576. Nelle pagine precedenti trovate inoltre riferimenti ai parametri di tipo ANY. Il manuale riporta

Il presente manuale fa parte del pacchetto

di documentazione con il numero di ordinazione:

6ES7810-4CA08-8EW0

Bye

Link al commento
Condividi su altri siti

Risolto il problema la cosa strana è che era gia tutto ok .. a mio parere si era "impastato" siemens

perchè ho riprovato a mettere DbXX.NomeArray nella chiamata della FC (Cosa già fatta) e ha funzionato.

Grazie a tutti!

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