-> Hier kostenlos registrieren
Guten morgen,
ich möchte Schritt für Schritt eine Inspektion von identischen Bauteilen auf einem Drehteller durchführen. Zuerst sollen zum Beispiel 10 Bauteile detektiert und anschließend werden die Bauteile in einem Register mit 10 Speicherplätzen geschrieben. Der Encoder zählt von 0 bis 6000. Wenn der Encoder den Wert 6000 erreicht hat, dann zählt er wieder ab 0 bis 6000. usw
Wenn der erste Bauteil detektiert wird, wird der aktuelle Encoder-Wert mit einem festen Offset-Wert addiert und dann im ersten Speicherplatz des Registers geschrieben. Gleichzeitig zählt der Encoder weiter, bis der zweite Bauteil detektiert wird. Wenn der zweite Bauteil detektiert wird, wird der aktuelle Encoder-Wert mit dem festen Offset-Wert addiert und dann im zweiten Speicherplatz des Registers geschrieben. Parallel zählt der Encoder weiter, bis der dritte Bauteil detektiert wird. Bis Hier komme ich klar.
Danach sollen die Bauteile Schritt für Schritt abgeblasen oder nicht abgeblasen werden, Wenn der Encoder nacheinander beim Zählen gleich mit den Werten der Position von Bauteilen, die vorher im Register geschrieben wurde, ist. Ich habe dem Code geschrieben, aber es funktioniert nicht gut. Manchmal wird die IF-Abfrage nicht abgearbeitet, wenn der Encoder gleich mit dem Wert der Position von einem Bauteil, der schon im Register geschrieben wurde, sein soll. Also , Die IF-Anweisungen mit dem Variable "HSC1_Encoder" werden manchmal nicht abgearbeitet und ich verstehe das nicht.
Hat jemand eine Idee, wie ich das Problem lösen kann?
Danke im Voraus für eure Hilfe.
Hier der Code für die Detektion der Bauteile
Hier der Code, wenn der Encoder gleich nacheinander mit den Werten der Position von Bauteilen, die im Register geschrieben wurde, sind.
ich möchte Schritt für Schritt eine Inspektion von identischen Bauteilen auf einem Drehteller durchführen. Zuerst sollen zum Beispiel 10 Bauteile detektiert und anschließend werden die Bauteile in einem Register mit 10 Speicherplätzen geschrieben. Der Encoder zählt von 0 bis 6000. Wenn der Encoder den Wert 6000 erreicht hat, dann zählt er wieder ab 0 bis 6000. usw
Wenn der erste Bauteil detektiert wird, wird der aktuelle Encoder-Wert mit einem festen Offset-Wert addiert und dann im ersten Speicherplatz des Registers geschrieben. Gleichzeitig zählt der Encoder weiter, bis der zweite Bauteil detektiert wird. Wenn der zweite Bauteil detektiert wird, wird der aktuelle Encoder-Wert mit dem festen Offset-Wert addiert und dann im zweiten Speicherplatz des Registers geschrieben. Parallel zählt der Encoder weiter, bis der dritte Bauteil detektiert wird. Bis Hier komme ich klar.
Danach sollen die Bauteile Schritt für Schritt abgeblasen oder nicht abgeblasen werden, Wenn der Encoder nacheinander beim Zählen gleich mit den Werten der Position von Bauteilen, die vorher im Register geschrieben wurde, ist. Ich habe dem Code geschrieben, aber es funktioniert nicht gut. Manchmal wird die IF-Abfrage nicht abgearbeitet, wenn der Encoder gleich mit dem Wert der Position von einem Bauteil, der schon im Register geschrieben wurde, sein soll. Also , Die IF-Anweisungen mit dem Variable "HSC1_Encoder" werden manchmal nicht abgearbeitet und ich verstehe das nicht.
Hat jemand eine Idee, wie ich das Problem lösen kann?
Danke im Voraus für eure Hilfe.
Hier der Code für die Detektion der Bauteile
Code:
IF (Detekt = 1) THEN
"DB".HSC1_Encoder := "HSC1_Encoder"; // Mitteilung der Detektion-Position "DB".Liste_Ausschleusung["DB".m] := ("DB".HSC1_Encoder + "DB".Offset); // Ausschleusung-Position
IF (("DB".Liste_Ausschleusung["DB".m] > 6000)) THEN
"DB".Liste_Ausschleusung["DB".m] := ("DB".Liste_Ausschleusung["DB".m] - 6000);
END_IF;
"DB".m := "DB".m + 1;
END_IF;
Hier der Code, wenn der Encoder gleich nacheinander mit den Werten der Position von Bauteilen, die im Register geschrieben wurde, sind.
Code:
IF ("DB".m > 0 AND "Counter" < 10) THEN
IF (("HSC1_Encoder" >= "DB".Liste_Ausschleusung["Counter"]) AND ("Counter" < 10) AND ("HSC1_Encoder" <= 4500)) THEN
"Counter":= "Counter"+ 1;
ELSIF (("HSC1_Encoder" = "DB".Liste_Ausschleusung["Counter"]) AND ("Counter" < 10) AND ("HSC1_Encoder" > 4500 AND "HSC1_Encoder" <= 6000)) THEN
"Counter":= "Counter"+ 1;
END_IF;
END_IF;