DerBenutzer
Level-1
- Beiträge
- 13
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Hallo ich habe mal wieder ein kleines Problem.
Ich bin derzeit dabei ein Fließband zu steuern und zwar wie folgt:
In der Mitte des Fließbandes befindet sich ein Sensor, wenn unter diesem etwas hin und herfährt gibt mir der Sensor dies zurück.
Zu einem festen Zyklus fällt nun in einem vordefinierten Bereich x, links oder rechts vom Sensor, ein Paket auf das Fließband.
Nun soll sich das Band zu jedem Zyklus arretieren, sprich, das Paket fällt runter und das Band fährt einmal nach links und rechts,
damit der Sensor merkt ob ein Paket auf dem Band liegt.
Ist ein Paket da sollen die ersten 5 Pakete nach rechts transportiert werden. Danach sollen die nächste 5 nach links transportiert werden und das wiederholt sich dann immer.
Die Richtung kann man steuern, sowie den Motor an oder aus machen.
Ich habe das Programm eigentlich schon fast fertig, es fehlt lediglich noch der Teil, wo das Paket zu Beginn eines jeden Zyklus nach links und rechts fährt, damit der Sensor sieht ob etwas da ist.
Anmerkung: Es ist immer nur ein Paket gleichzeitig auf dem Fließband.
Als ich den Code so abgegeben habe wurde angemerkt, dass es so nicht funktionieren würde, mit Verweis darauf, dass bei einem neuen Zyklus alle lokal initialisierten variablen wieder resettet werden.
Das wäre sehr schlecht weil ich dann nicht weiss wie ich den Zähler realisieren soll.
Zusätzlich habe ich das Problem das ich nicht weiss wie das mit den Zyklen genau funktioniert und/oder wie ich einen Timer einsetzten kann, der dem Motor sagt das er sich bei jedem Zyklus um einen festen Zeitwert nach links oder rechts drehen soll. Vielleicht blickt ja einer von euch da mehr durch.
Ich suche auch noch immer nach guten Büchern, leider ist die Doku zu ST auf der Beckhoff Seite selbst nicht sehr umfangreich und zu Timern finde ich generell nichts. Ich hatte bisher auch nur mit Ereignisbasierten Sprachen im klassischen PC bereich zu tun, sprich c++ etc. deswegen will mir dieses zyklus konzept nicht ganz einleuchten.
Lg
der Benutzer
Ich bin derzeit dabei ein Fließband zu steuern und zwar wie folgt:
In der Mitte des Fließbandes befindet sich ein Sensor, wenn unter diesem etwas hin und herfährt gibt mir der Sensor dies zurück.
Zu einem festen Zyklus fällt nun in einem vordefinierten Bereich x, links oder rechts vom Sensor, ein Paket auf das Fließband.
Nun soll sich das Band zu jedem Zyklus arretieren, sprich, das Paket fällt runter und das Band fährt einmal nach links und rechts,
damit der Sensor merkt ob ein Paket auf dem Band liegt.
Ist ein Paket da sollen die ersten 5 Pakete nach rechts transportiert werden. Danach sollen die nächste 5 nach links transportiert werden und das wiederholt sich dann immer.
Die Richtung kann man steuern, sowie den Motor an oder aus machen.
Ich habe das Programm eigentlich schon fast fertig, es fehlt lediglich noch der Teil, wo das Paket zu Beginn eines jeden Zyklus nach links und rechts fährt, damit der Sensor sieht ob etwas da ist.
Anmerkung: Es ist immer nur ein Paket gleichzeitig auf dem Fließband.
Code:
[COLOR=#000000]//Deklarierung der Variablen-Eingänge[/COLOR]//Tasten für Steuerrichtungen, Signal der Lichtschranke und Motor Ein-/Auschalten
VAR_INPUT
TasteRechts:BOOL;
TasteLinks:BOOL;
TasteMotor:BOOL;
Lichtschranke:BOOL;
END_VAR
//Ausgänge, Motoransteuerung
VAR_OUTPUT
Links:BOOL;
Rechts:BOOL;
MotorStart:BOOL;
END_VAR
//Wird bei einem Stromausfall gesichert
VAR RETAIN
Zaehler:BYTE;
END_VAR
//Initialisierung
//Am Anfang ist der Motor aus und keine Drehrichtung eingestellt
Motorstart:=False;
Links:=False;
Rechts:=False;
//Wenn die Motortaste gedrückt wird und der Motor aus ist
//wird der Motor eingeschaltet
IF TasteMotor AND NOT Motorstart THEN
MotorStart:=True;
//Wenn die Motortaste gedrückt wird und der Motor an ist
//wird der Motor ausgeschaltet
ELSIF TasteMotor AND Motorstart THEN
Motorstart:=False;
END_IF
//Wenn die Taste für Rechtsbetrieb gedrücht wird
//wird die der Motor in Rechtsbetrieb geschaltet
IF TasteRechts THEN
Links:=False;
Rechts:=True;
//Wenn die Taste für Linksbetrieb gedrücht wird
//wird die der Motor in Linksbetrieb geschaltet
ELSIF TasteLinks THEN
Rechts:=False;
Links:=True;
END_IF
//Solange der Motor an ist und wenn genau eine Richtung vorgegeben wurde
//wird die Schleife ausgeführt
WHILE MotorStart AND (Rechts XOR Links) DO
//Wenn die Lichtschranke ausgelöst wird, erhöht sich der Zähler um 1
IF Lichtschranke THEN
Zaehler:=Zaehler+1;
//Erreicht der Zähler 5 und die Drehrichtung ist links
//ändert sich die Richtung auf rechts und der Zähler wird zurückgesetzt.
//Ist der Zähler kleiner als 5 und es wird die rechte Taste
//betätigt, wird ebenfalls die Richtung geändert.
//Dies ist notwendig um im laufenden Betrieb die Richtung wechseln zu können.
ELSIF (Zaehler>=5 OR TasteRechts) AND Links THEN
Links:=False;
Rechts:=True;
Zaehler:=0;
ELSIF (Zaehler>=5 OR TasteLinks) AND Rechts THEN
Links:=True;
Rechts:=False;
Zaehler:=0;
END_IF;
[COLOR=#000000]END_WHILE;[/COLOR]
Als ich den Code so abgegeben habe wurde angemerkt, dass es so nicht funktionieren würde, mit Verweis darauf, dass bei einem neuen Zyklus alle lokal initialisierten variablen wieder resettet werden.
Das wäre sehr schlecht weil ich dann nicht weiss wie ich den Zähler realisieren soll.
Zusätzlich habe ich das Problem das ich nicht weiss wie das mit den Zyklen genau funktioniert und/oder wie ich einen Timer einsetzten kann, der dem Motor sagt das er sich bei jedem Zyklus um einen festen Zeitwert nach links oder rechts drehen soll. Vielleicht blickt ja einer von euch da mehr durch.
Ich suche auch noch immer nach guten Büchern, leider ist die Doku zu ST auf der Beckhoff Seite selbst nicht sehr umfangreich und zu Timern finde ich generell nichts. Ich hatte bisher auch nur mit Ereignisbasierten Sprachen im klassischen PC bereich zu tun, sprich c++ etc. deswegen will mir dieses zyklus konzept nicht ganz einleuchten.
Lg
der Benutzer