Florian0511
Level-1
- Beiträge
- 4
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hey,
habe aktuell ein Problem mit meiner Programmierung.
Zum Fall:
Habe 4 Datensätze (String) am Eingang
Wenn alle 4 Datensätze vorhanden sind, kein Problem. Alles läuft wunderbar.
Wenn jetzt aber kein Datensatz da ist und am ersten Datensatz kommen wieder Daten, dann wird mir dies am Ausgang "nächste" nicht raus gegeben. Erst wenn die vierte Stelle wieder belegt ist.
Vielleicht kann mir ja ein SCL Profi oder Laie :-D hier weiter helfen.
Hier mal der Code:
PIN 1-4 sind die Eingänge
Nächste Pin ist der Ausgang
#PIN_an_Band[0] := #PIN_1;
#PIN_an_Band[1] := #PIN_2;
#PIN_an_Band[2] := #PIN_3;
#PIN_an_Band[3] := #PIN_4;
REGION Circular_buffer
(******* Flankenbildung ******************************************************)
#R_TRIG_Ink_Puffer(CLK := #Benutzt_Naechste_PIN);
IF #R_TRIG_Ink_Puffer.Q THEN
FOR #i := 1 TO 3 BY 1 DO
#PIN_FM[4 - #i] := #PIN_FM[3 - #i];
END_FOR;
#PIN_FM[0] := #Naechste_PIN;
END_IF;
END_REGION
REGION Nechste_PIN
// PIN
IF #Naechste_PIN = '' THEN
FOR #j := 1 TO 4 BY 1 DO
#Kein_Arbeit := FALSE;
#Tmp_String := '';
FOR #i := 1 TO 4 BY 1 DO
#Tmp_String := LEFT(IN:=#PIN_an_Band[4 - #j],L:=1);
IF #PIN_an_Band[4 - #j] = #PIN_FM[#i - 1] AND #Kein_Arbeit = FALSE AND #Naechste_PIN = ''
AND #PIN_an_Band[4 - #j] <> '' AND #Tmp_String <>' ' THEN
#Kein_Arbeit := true;
END_IF;
END_FOR;
IF #Kein_Arbeit = FALSE AND #Naechste_PIN = '' THEN
#Naechste_PIN := #PIN_an_Band[4 - #j];
END_IF;
END_FOR;
END_IF;
// Reset PIN van gehet raus von arbeit platz
IF #Naechste_PIN <> '' THEN
#Reset_N_PIN := false;
FOR #i := 1 TO 4 BY 1 DO
IF #PIN_an_Band[4 - #i] = #Naechste_PIN THEN
#Reset_N_PIN := true;
END_IF;
END_FOR;
IF #Reset_N_PIN = false OR #Benutzt_Naechste_PIN THEN
#Naechste_PIN := '';
END_IF;
END_IF;
END_REGION
#Naechste_PIN_Num := #Naechste_PIN;
habe aktuell ein Problem mit meiner Programmierung.
Zum Fall:
Habe 4 Datensätze (String) am Eingang
Wenn alle 4 Datensätze vorhanden sind, kein Problem. Alles läuft wunderbar.
Wenn jetzt aber kein Datensatz da ist und am ersten Datensatz kommen wieder Daten, dann wird mir dies am Ausgang "nächste" nicht raus gegeben. Erst wenn die vierte Stelle wieder belegt ist.
Vielleicht kann mir ja ein SCL Profi oder Laie :-D hier weiter helfen.
Hier mal der Code:
PIN 1-4 sind die Eingänge
Nächste Pin ist der Ausgang
#PIN_an_Band[0] := #PIN_1;
#PIN_an_Band[1] := #PIN_2;
#PIN_an_Band[2] := #PIN_3;
#PIN_an_Band[3] := #PIN_4;
REGION Circular_buffer
(******* Flankenbildung ******************************************************)
#R_TRIG_Ink_Puffer(CLK := #Benutzt_Naechste_PIN);
IF #R_TRIG_Ink_Puffer.Q THEN
FOR #i := 1 TO 3 BY 1 DO
#PIN_FM[4 - #i] := #PIN_FM[3 - #i];
END_FOR;
#PIN_FM[0] := #Naechste_PIN;
END_IF;
END_REGION
REGION Nechste_PIN
// PIN
IF #Naechste_PIN = '' THEN
FOR #j := 1 TO 4 BY 1 DO
#Kein_Arbeit := FALSE;
#Tmp_String := '';
FOR #i := 1 TO 4 BY 1 DO
#Tmp_String := LEFT(IN:=#PIN_an_Band[4 - #j],L:=1);
IF #PIN_an_Band[4 - #j] = #PIN_FM[#i - 1] AND #Kein_Arbeit = FALSE AND #Naechste_PIN = ''
AND #PIN_an_Band[4 - #j] <> '' AND #Tmp_String <>' ' THEN
#Kein_Arbeit := true;
END_IF;
END_FOR;
IF #Kein_Arbeit = FALSE AND #Naechste_PIN = '' THEN
#Naechste_PIN := #PIN_an_Band[4 - #j];
END_IF;
END_FOR;
END_IF;
// Reset PIN van gehet raus von arbeit platz
IF #Naechste_PIN <> '' THEN
#Reset_N_PIN := false;
FOR #i := 1 TO 4 BY 1 DO
IF #PIN_an_Band[4 - #i] = #Naechste_PIN THEN
#Reset_N_PIN := true;
END_IF;
END_FOR;
IF #Reset_N_PIN = false OR #Benutzt_Naechste_PIN THEN
#Naechste_PIN := '';
END_IF;
END_IF;
END_REGION
#Naechste_PIN_Num := #Naechste_PIN;