TIA CTU_DINT mit Arrays versorgen

SanjaDO

Level-1
Beiträge
177
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ganz einfache Frage für den der es weiß:

PV_OUT ist ein Array[0..50] of BOOL;
PV_Reset[15] ist ein Array[0..50] of Struct (Dichtung, Ventil) vom Typ BOOL;
Schaltzyklen_Ventile[15] ist ein Array[0..50] of Struct (Dichtung, Ventil) vom Typ DINT;


So geht's:

Zyklen_Ventile_15 ist ein CTU_DINT

Code:
//#Zyklen_Ventile_15(CU:=#PV_OUT[15],R:=#PV_Reset[15].Dichtung,CV=>#Schaltzyklen_Ventile[15].Dichtung,PV:=2100000000);

So nicht:

Zyklen ist ein Array [0..50] of CTU_DINT

Code:
FOR #i := 0 TO 50 DO
  #Zyklen[#i].CU:=#PV_OUT[#i];
  #Zyklen[#i].R:=#PV_Reset[#i].Dichtung;
  #Zyklen[#i].PV:=2100000000;
  #Zyklen[#i].CV:=#Schaltzyklen_Ventile[#i].Dichtung;
END_FOR;


Ich vermute dass die for-schleife für ein paar aufrufe verzögern sollte, damit der CTU rechnen kann, da dieser mehrere Aufrufe braucht. Wie würdet ihr es machen?

Hab 2 mal 50 Counter, also ich tendiere stark zu der zweiten Lösung!!! Diese funktioniert aber leider net!

Danke!
 
Hallo

Ganz einfache Frage für den der es weiß:

PV_OUT ist ein Array[0..50] of BOOL;
PV_Reset[15] ist ein Array[0..50] of Struct (Dichtung, Ventil) vom Typ BOOL;
Schaltzyklen_Ventile[15] ist ein Array[0..50] of Struct (Dichtung, Ventil) vom Typ DINT;


So geht's:

Zyklen_Ventile_15 ist ein CTU_DINT

Code:
//#Zyklen_Ventile_15(CU:=#PV_OUT[15],R:=#PV_Reset[15].Dichtung,CV=>#Schaltzyklen_Ventile[15].Dichtung,PV:=2100000000);

So nicht:

Zyklen ist ein Array [0..50] of CTU_DINT

Code:
FOR #i := 0 TO 50 DO
  #Zyklen[#i].CU:=#PV_OUT[#i];
  #Zyklen[#i].R:=#PV_Reset[#i].Dichtung;
  #Zyklen[#i].PV:=2100000000;
  #Zyklen[#i].CV[B][COLOR=#ff0000]:=[/COLOR][/B]#Schaltzyklen_Ventile[#i].Dichtung;
END_FOR;


Ich vermute dass die for-schleife für ein paar aufrufe verzögern sollte, damit der CTU rechnen kann, da dieser mehrere Aufrufe braucht. Wie würdet ihr es machen?

Hab 2 mal 50 Counter, also ich tendiere stark zu der zweiten Lösung!!! Diese funktioniert aber leider net!

Danke!

Was genau sagt denn TIA?

Das rot markierte muß aber auf jeden Fall in => geändert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA sagt nichts, der CTU zähl einfach nicht hoch.
Du hast Recht! Es ist ja ein OUTPUT. Mit dem => meckert der Compiler. Das muss eigentlich so aussehen:

Funkt aber auch net....



#Schaltzyklen_Ventile[#i].Dichtung:=#Zyklen[#i].CV;
 
Problem gelöst durch das Ausschreiben jeder Zeile, also ohne for-schleife... Nicht schön aber geht anscheinend nicht anders.
 
Du kannst bei Siemens m.W.n. eine Multiinstanz nicht als Array anlegen. Egal ob FB oder SFB.

Du kannst Dir höchstens einen eigenen Zähler als FC analog zum CTU schreiben und den Zählerwert dann im Gegensatz zum CTU extern anstatt in der Instanz (die ja der FC nicht benötigt/hat) speichern. Dann kannst Du den FC-CTU auch in Deiner FOR-Schleife benutzen.
 
Zurück
Oben