Hallo Zusammen,
ich bin Neuling in der SPS Welt und moechte in SCL eine Steuerung entwickeln, die Abhängig von Bits in einem Array Bits in einem anderen Array schreibt.
Erste Funktion: Die Steuerung soll Bits, die in dem Array1= 1 sind erkennen und ggf. Nullen ueberspringen. Ich komme in die Funktion mit einem Impuls, der alle 5 Sekunden erzeugt wird.
Es soll bei jedem Impuls an der Stelle, wo im Array1 eine 1 eingetragen ist in das Array2 an der selben Stelle eine 1 eingetragen werden.
Meine Loesung dazu ist:
IF Impuls=1 THEN
FOR i:= 1 TO 8 BY +1 DO
IF Array1[i] = true THEN
IF Zwischenspeicher_Array[i] =0 THEN
Array2[i] := true;
Zwischenspeicher_Array[i] := true;
EXIT;
END_IF;
END_IF;
END_FOR;
END_IF;
Dies funktioniert soweit ich das einschaetzen kann auch. Es wird bei jedem Impuls das Bit in Array2=1 gesetzt, welches vorher in Array1 angewaehlt wurde. (Und das in Abhaengigkeit vom Impuls)
Eine zweite Funktion, die Aehnlich aufgebaut ist, setzt die Bits des Array2 wieder auf Null! (Wieder bei einem (anderen) Impuls)
Nun habe ich aber noch folgendes Problem:
Ich moechte auf jeden Fall, dass jedes Bit des Array2 gesetzt wird. Ist z. B. Array1[2]=1 und Array1[4]=1 und Array1[5]=1 und Array1[7]=1 und ich bekomme drei Mal einen Impuls zu "Bits auf eins setzen" funktioniert auch alles (Array2[2]=1 und Array2[4]=1 und Array2[5]=1).
Folgt jetzt ein Impuls zum "Bits auf Null setzen" wird Array2[2]=0 gesetzt, was auch noch korrekt ist.
Folgt jetzt wieder ein Impuls zum "Bits auf eins setzen" wird Array2[2]=1 gesetzt, da die FOR Schleife vorne wieder anfängt...
Ich moechte aber, dass in dem Fall das Bit Array2[7]=1 gesetzt wird, da dies in diesem Fall ja noch nicht eins war.
Es soll sozusagen so laufen, dass die Bits, die als erstes eingeschaltet wurden auch als erstes ausgeschaltet werden. (Funktioniert ja automatisch ueber die Schleifen Variable i)
Und anders herum, die Bits die in Array1 angewählt sind und die "kuerzeste Laufzeit" haben sollen als nächstes eingeschaltet werden.
Es muss sich also in irgendeiner Weise die FOR Schleife die Stelle merken, wo in dem Array1 die nächste eins ist und zusätzlich alle Nullen überspringen, damit bei jedem Impuls auch wirklich nur die Einsen geschaltet werden. (Ist sozusagen FIFO Prinzip)
Ich hoffe ich habe mich einigermassen verständlich ausgedrueckt und bedanke mich im Voraus.