-> Hier kostenlos registrieren
Hallo zusammen,
vorab: ich erwarte nicht, dass hier mein Code von jemand anderem geschrieben wird. Ich stelle hier nur das Problem und meinen Code für das Verständnis meines Problems hier ein.
ich arbeite jetzt seit einer Woche mit CoDeSys und habe noch ein paar Probleme.
Ich arbeite mit folgender Installation:
An dem Messverstärker HMB PMX ist eine Waage angeschlossen die kontinuierlich den aktuellen Wert bereitstellt.
Folgendes möchte ich in CoDeSys realisieren:
Die Waage ist so eingestellt, dass wenn eine spezielle Box auf die Waage gestellt wird, ungefähr der Wert 0 angezeigt wird. Nacheinander sollen nun 4 Werkstücke eingelegt werden. Bei den Werkstücken handelt es sich um zwei Größen von Quadern. Wird ein Werkstück eingelegt, wird überprüft, ob es im Toleranzbereich für einen kleinen oder großen Quader liegt. Ist dies der Fall soll eine grüne Lampe angehen. Der aktuelle Wert wird manuell tariert und es kann das nächste Werkstück eingelegt werden.
Liegt ein Werkstück nicht im Toleranzbereich geht eine rote Lampe an. Werden große und kleine Quader gemischt, geht eine rote Lampe an.
Ich habe nur wie folgt begonnen für die Überprüfung eines kleines Quaders:
Dabei habe ich noch folgende Fragen/Probleme:
Vielen Dank schonmal.
vorab: ich erwarte nicht, dass hier mein Code von jemand anderem geschrieben wird. Ich stelle hier nur das Problem und meinen Code für das Verständnis meines Problems hier ein.
ich arbeite jetzt seit einer Woche mit CoDeSys und habe noch ein paar Probleme.
Ich arbeite mit folgender Installation:
An dem Messverstärker HMB PMX ist eine Waage angeschlossen die kontinuierlich den aktuellen Wert bereitstellt.
Folgendes möchte ich in CoDeSys realisieren:
Die Waage ist so eingestellt, dass wenn eine spezielle Box auf die Waage gestellt wird, ungefähr der Wert 0 angezeigt wird. Nacheinander sollen nun 4 Werkstücke eingelegt werden. Bei den Werkstücken handelt es sich um zwei Größen von Quadern. Wird ein Werkstück eingelegt, wird überprüft, ob es im Toleranzbereich für einen kleinen oder großen Quader liegt. Ist dies der Fall soll eine grüne Lampe angehen. Der aktuelle Wert wird manuell tariert und es kann das nächste Werkstück eingelegt werden.
Liegt ein Werkstück nicht im Toleranzbereich geht eine rote Lampe an. Werden große und kleine Quader gemischt, geht eine rote Lampe an.
Ich habe nur wie folgt begonnen für die Überprüfung eines kleines Quaders:
Code:
PROGRAM PLC_PRG
VAR
MeasVal : REAL; (*Messwert*)
Weight_KB : REAL := 0.598; (*Gewicht der Kanbanbox*)
//Maße der Böden
D25Side : REAL := 0.0394;
D25Depth : REAL := 0.0207;
D40Side : REAL := 0.0592;
D40Depth : REAL := 0.0207;
Dens : REAL := 2850; (*[kg/m^3]*)
//Gewichtsgrenzwerte der Böden
D25Max : REAL;
D25Min : REAL;
D25Tol : REAL := 0.05;
D40Max : REAL;
D40Min : REAL;
D40Tol : REAL := 0.05;
LampGreen : BOOL := FALSE;
LampRed : BOOL := FALSE;
LampYellow : BOOL := FALSE;
PartCount : DINT; (*Zähler der Teile [1..4]*)
TableCount : DINT; (*Zähler in der Tabelle*)
Counter : DINT := 0; (*Zähler für alle Teile*)
Reject : DINT := 0; (*Ausschusszähler*)
Table : ARRAY[1..50] OF REAL; (*Tabelle*)
TarHandle : DINT;
TarSwitch : BOOL; (*Fußtaster*)
Alarm : BOOL;
Info : BOOL;
END_VAR
//Kalkulation der Grenzwerte
D25Max := WeightCal(D25Side, D25Side, D25Depth, Dens) + D25Tol;
D25Min := WeightCal(D25Side, D25Side, D25Depth, Dens) - D25Tol;
D40Max := WeightCal(D40Side, D40Side, D40Depth, Dens) + D40Tol;
D40Min := WeightCal(D40Side, D40Side, D40Depth, Dens) - D40Tol;
IF (MeasVal <= -0.5) THEN
LampGreen := FALSE;
LampRed := FALSE;
LampYellow := FALSE;
TarSwitch := FALSE;
END_IF
// Wird die Kanban-Box erkannt, geht die gelbe Lampe an
IF (MeasVal >= -0.03) THEN
LampYellow := TRUE;
PartCount := 0;
IF (MeasVal >= D25Min AND MeasVal <= D25Max) THEN
FOR PartCount := 1 TO 4 BY 1 DO
IF (MeasVal >= D25Min AND MeasVal <= D25Max) THEN
Counter := Counter + 1;
// Grüne Lampe an
LampGreen := TRUE;
// Zähler um eins erhöhen
PartCount := PartCount + 1;
// Nächste freie Zeile in der Tabelle ermitteln bestimmen
IF (TableCount >= 50) THEN
TableCount := 1;
END_IF;
// Wert in Tabelle schreiben
Table[TableCount] := MeasVal;
TableCount := TableCount + 1;
// Messwert tarieren (für Kanal 2.1), Grüne Lampe aus (aus Beispielprogramm von HBM, Waage hängt aber an Kanal 2.1)
IF (HBM_PMX_LIBRARY.isFinished(TarHandle)) THEN
IF(TarSwitch = TRUE) THEN
TarHandle := HBM_PMX_LIBRARY.setToZero(2,1);
TarSwitch := FALSE;
LampGreen := FALSE;
END_IF;
END_IF;
ELSE
LampRed := TRUE;
LampGreen := FALSE;
Info := 1;
Counter := Counter + 1;
Reject := Reject + 1;
END_IF;
END_FOR;
ELSE
LampRed := TRUE;
LampGreen := FALSE;
Alarm := 1;
Counter := Counter + 1;
Reject := Reject + 1;
END_IF;
END_IF;
Dabei habe ich noch folgende Fragen/Probleme:
- Das Programm läuft endlos und der Zähler wird kontinuierlich erhöht. Was muss ich ändern, damit das Programm beim tarieren unterbrochen wird?
Vielen Dank schonmal.