Guten Tag Forum

Ich habe eine kleine Übungsaufgabe für mich gestellt.
Ich habe 5 Schaltern und 5 Ausgänge d.h. wenn ich schalter 1 betätige dann sollte Ausgang 1 aktivieren und wenn ich Schalter 2 betätige dann sollte Ausgang 2 aktivieren und usw. Und es können nur immer 2 aktiv sein und die restlichen die nach dem die 2 aktiv sind gehen in ein Array um zu warten und wenn ich einer der Schalter wieder deaktiviere dann kann der erste der in der Array ist aktiviert wird. Alle Schalter sind rastende Taster und nicht Tipp Schalter

Jeder Schalter hat eine eigene ID d.h. wenn ich schalter 1 drücke dann 1 und usw.
Unten seht ihr mein Pseydocode könnt ihr mir sagen ob es funktioniert, weil ich kein SPS-Programm vor mir habe.

Code:
//Wenn eine Schalter aktiviert wird, 
Schalter_Zustand[1] := Schalter_1 ;
Schalter_Zustand[2] := Schalter_2 ;
Schalter_Zustand[3] := Schalter_3 ;
Schalter_Zustand[4] := Schalter_4 ;
Schalter_Zustand[5] := Schalter_5 ;


// Wenn ein Schalter aktiviert wird dann wird der entsprechende ID in die nächste freie Zelle gespeichert
for i := 1 to 5 by 1 do
	Schalter_Flanke[i] := Schalter_Zustand[i] AND NOT Schalter_Flanke_Speicher[i] ;
	Schalter_Flanke_Speicher[i] := Schalter_Zustand[i] ;
		if schalter_flanke[i] then
			while Plaziert = 0 do
				if puffer[i] = 0 then
					puffer[i] := i;
					plaziert := 1;
				else
					i := i +1;
						if i = 5 then exit
						end_if;
				end_if;
			end_while;
		end_if;
end_for;


// Wenn ein Schalter aktiviert ist und danach deaktiviert wird dann wird der entsprechende ID
// in den Zellen gelöscht und die restlichen ID schieben sich nach unten
for i := 1 to 5 by 1 do
	Schalter_Flanke[i] := NOT Schalter_Zustand[i] AND Schalter_Flanke_Speicher[i] ;
	Schalter_Flanke_Speicher[i] := Schalter_Zustand[i] ;
		if schalter_flanke[i] then
			while Entfernt = 0 do
				if puffer[i] <> 0 then
					puffer[i] := puffer[i+1];
					puffer[i+1] := puffer[i+2];
					puffer[i+2] := puffer[i+3];
					puffer[i+3] := puffer[i+4];
					Entfernt := 1;
				else
					i := i +1;
						if i = 5 then exit
						end_if;
				end_if;
			end_while;
		end_if;
end_for;


// Ansteuerung von den Ausgang
Lampe_Zustand[1] := FALSE ;
Lampe_Zustand[2] := FALSE ;
Lampe_Zustand[3] := FALSE ;
Lampe_Zustand[4] := FALSE ;
Lampe_Zustand[5] := FALSE ;
//
if lampe_zustand[puffer[1]] then
	Lampe_Zustand[puffer[1]] := TRUE ; 
else
	lampe_zustand[puffer[1]] := false ;
end_if;
//
if lampe_zustand[puffer[2]] then
	lampe_Zustand[puffer[2]] := TRUE ; 
else
	lampe_zustand[puffer[2]] := false ;
end_if;
// Ausgang
Lampe_1 := Lampe_Zustand[1] ;
Lampe_2 := Lampe_Zustand[2] ;
Lampe_3 := Lampe_Zustand[3] ;
Lampe_4 := Lampe_Zustand[4] ;
Lampe_5 := Lampe_Zustand[5] ;