Vai al contenuto
PLC Forum


IEC 61131  Error E: S5004: Function blocks instances are invalid


marco

Messaggi consigliati

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

open_pcs_1.jpg

open_pcs_2.jpg

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