marco Inserito: 1 dicembre 2020 Segnala Inserito: 1 dicembre 2020 Buongiorno, Ho Intenzione di acquistare un PLC che fa fa uso del software OpenPCS: IEC 61131 https://infoteam.de/en/our-know-how/plc-programming-systems/ Il Plc ha un simulatore con il quale e' possibile testate piccoli programmi. In passato (10 anni fa ) usavo lo Step7 V5.2. Ora questo nuovo sistema di sviluppo (OpenPCS) fa uso dello standard IEC 61131, ed e' stato un po come prendermi una badilata in testa. Vado al Dunque. Ho realizzato una funzione che chiamo FC_TEST Questa funzione ha due ingressi, uno digitale (bool) e uno di tipo Time ed una uscita ti tipo (bool). Esempio per intenderci. _________ E0.0 --| FC_TEST |--(Q) T#2s--| | Se compilo il progetto senza richiamare la Funzione FC_TEST non ho nessun errore. Quando nel programma principale , diciamo OB1 richiamo la funzione FC_TEST ho questo errore: Function blocks instances are invalid in "FUNCTION"-POUs, STRUCTs, and in ARRAYs. An instance of a function block has been defined in a variable section of a function or as a member of a STRUCT or an ARRAY type. IEC61131-3 doesn't allow declarations of function block instances in functions. Function block instances as members of STRUCT and ARRAY types are not supported by OpenPCS. Ora mi pare di capire che in una Funzione Custom non e' possibile inserire Funzione standard come Temporizzatori o Contatori (TON, CDT....) ho capito bene? Esempio del programma. Tra l'altro le Funzioni che ritornano un Valore si possono solo scrivere in Linguaggio Strutturato, no KOP (* --------- Dichiaro le variabile della funzione --------- *) VAR_INPUT T_1 : TIME ; (* Tempo del temporizzatore *) START : BOOL; (* Start per avviare il temporizzatore *) END_VAR VAR MY_TON : TON; (* Instanzio la variabile TON*) END_VAR (* --------- Semplice programma --------- *) MY_TON(IN := START , PT := T_1 ); FC_TEST := MY_TON.Q; (* quanto il temporizzatore si attiva scrivo sull uscita della funzione *) ---- Qui invece Nel programma principale richiamo la funzione FC_TEST (* tmp2 e' un bool *) (* I0_0 e' un ingresso digitale*) tmp2 := FC_TEST(T#2s, I0_0); Se c'e' un errore non lo vedo, un po per la ruggine che ho sugli occhi un po perché non ho molta dimestichezza con lo ST Grazie Marco
marco Inserita: 3 dicembre 2020 Autore Segnala Inserita: 3 dicembre 2020 Risolto. Bisogna usare un Function Block.
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