Step 7 Schleife in SCL

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

habe in SCL mal folgende Schleife gebastelt:

Code:
IF Merker THEN
  FOR index := 25 TO 2 BY -1 DO
     ArrayOfUDT[index] := ArrayOfUDT[index - 1];
  END_FOR;
  Merker := 0;
END_IF;


DB10: Array[1..25] of UDT1; Name Test


Wenn ich jetzt nur den Index[1] im DB10 mit Zahlenwerten vorbesetze, dann würde ich erwarten, dass nach einem Schleifendurchlauf auch der Index[2] mit den Zahlenwerten aus Index[1] belegt ist.

Dem ist zwar auch so; allerdings sind auch Index[3] bis Index[25] mit den gleichen Zahlen belegt. Warum ist das so? :confused:

Diese sollten doch auch weiterhin alle Null aufweisen.
 
So, bin ein kleines Stückchen weiter.

"Merker" ist in dem FB als IN_OUT deklariert. Wenn ich nun beim Aufruf "Merker" eine boolsche Variable übergebe und diese steuere, dann funktioniert es.

Allerdings soll es so sein, dass "Merker" im FB selbst auf Status 1 gesetzt wird - und dann klappt es plötzlich nicht mehr; woran liegt das?
 
"Merker" ist in dem FB als IN_OUT deklariert. Wenn ich nun beim Aufruf "Merker" eine boolsche Variable übergebe und diese steuere, dann funktioniert es.

Allerdings soll es so sein, dass "Merker" im FB selbst auf Status 1 gesetzt wird - und dann klappt es plötzlich nicht mehr; woran liegt das?

Im FB auch als Stat deklariert? wird er auch wirklich nur einmal auf 1 gesetzt und nicht durch die vorhergehende bedingung immer auf 1 gehalten?
Das hat definitiv nichts mit der Schleife zu tun sondern dein Merker wird durch irgendwas immer vor der Schleife auf 1 gehalten.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo René,

ich habe vor der Schleife ein "Case Schrittkette of" programmiert und da:

Merker := (Schrittkette = 7);


Und danach gleich die Schleife:

Code:
IF Merker THEN
  FOR index := 25 TO 2 BY -1 DO
     ArrayOfUDT[index] := ArrayOfUDT[index - 1];
  END_FOR;
  Merker := 0;
END_IF;


Insofern sollte hier doch der Merker nicht auf 1 gehalten werden, oder?
 
ich präzisiere: weil der merkerbeschreibende Mechanismus nicht flankengetriggert ist.

Ah, ja wie doof von mir - glaube jetzt hat es klick gemacht!

Hatte deine Aussage auf "Merker" bezogen und nicht auf "Eingang".

Kaum macht frau es richtig, schon geht es!

Übrigens ist es dabei gleichgültig, ob "Merker" im FB als IN_OUT oder STAT deklariert ist ...


Ich teste noch ein wenig und wenn ich mich nicht mehr melde, dann klappt alles! :p
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Funktioniert es, wenn Du außen beim FB-Aufruf am IN_OUT eine DB-Variable (DBabc.DBXd.e) statt einem Merker (Mx.y) dranhängst?

Harald

Geht auch mit einem "normalen" Merker, Harald!


Und "Eingang" ist eine Flanke?
Und Schrittkette wird danach wieder auf 0 gesetzt?

Naja René,

das war dann wohl das Entscheidende - hatte "Eingang" eben nicht als Flanke!

Aber wow - die SPS ist ja ganz schön schnelle - hatte nur ganz kurz den "Eingang" anliegen und es wurde gleich der ganze DB vollgedonnert ... :p :p
 
hatte nur ganz kurz den "Eingang" anliegen

wenn das der einzige Code in deiner Steuerung ist, dürfte die Zykluszeit bei ca. 2ms liegen ...
um auf das optische Signal (grüne LED geht an) zu reagieren benötigt der Mensch ca. 150..200ms

75 Zyklen ... kannst du ja mal mit einem Zähler (Addition ohne Flankenauswertung) ermitteln
 
Zurück
Oben