-> Hier kostenlos registrieren
Hallo zusammen,
momentan habe ich ein beiläufiges Projekt in meiner Firma welches mit einer BECKHOFF CX8190 sowie einer Vielzahl von Digitalen Eingangsmodulen (EL1809) sowie Ausgangsmodulen (EL2809)
realisiert werden soll.
Ich selber hatte noch nie Erfahrungen mit diesem System sowie auch keine mit der Sprache "Strukturierter Text" (komme aus der C/C++ und Assembler- Sparte).
Nun gut jetzt zu dem groben Aufbau meines Modells,
Die Anlage soll quasi als Durchgangsprüfer fungieren, ein Signal soll über einen Ausgang in unserem Fall ein Modul vom Typ EL2809 rausgeschickt werden.
Der Ausgang hat eine zu prüfende Leitung vor sich durch die er 24V DC schickt, am anderen Ende dieser Leitung ist ein EL1809 verbaut.
Dieser soll Prüfen ob dort Spannung anliegt, bzw. ob die Leitung "Durchgang" hat.
Soweit so gut. Ich habe das Programm bis jetzt sauber aufgeteilt in Variablenlisten, Hauptprogramm(MAIN) sowie einzelne Programme welche als Methoden fungieren, diese rufe ich in der MAIN nacheinander auf. Alle Variablen wurden auch korrekt mit den jeweiligen Modulen (EL 1809 und EL 2809) verknüpft.
Mein Problem ist nun, ich würde gerne alle Leitungen einmal durchprüfen lassen und dies nacheinander. Wenn eine Leitung geprüft wurde soll diese für den nächsten Ablauf gesperrt werden(so dass diese nicht mehr angelaufen wird). Zudem soll das Ergebnis des Tests in einem String gespeichert werden.
Jedoch habe ich folgende Probleme:
- die Zählervariable welche die einzelnen IF -Schleifen "aktiviert" zählt nicht korrekt
- die PLC läuft immer wieder nacheinander den Ablauf durch
- die Prüfschritte werden nicht bis zum Ende durchgeführt
hier ein Auszug aus meinem Code:
Variablen:
Ablauf:
Ich hoffe ihr habt einen Tipp oder eine Idee für mich um dieses Problem zu lösen.
Viele Grüße
Kon
momentan habe ich ein beiläufiges Projekt in meiner Firma welches mit einer BECKHOFF CX8190 sowie einer Vielzahl von Digitalen Eingangsmodulen (EL1809) sowie Ausgangsmodulen (EL2809)
realisiert werden soll.
Ich selber hatte noch nie Erfahrungen mit diesem System sowie auch keine mit der Sprache "Strukturierter Text" (komme aus der C/C++ und Assembler- Sparte).
Nun gut jetzt zu dem groben Aufbau meines Modells,
Die Anlage soll quasi als Durchgangsprüfer fungieren, ein Signal soll über einen Ausgang in unserem Fall ein Modul vom Typ EL2809 rausgeschickt werden.
Der Ausgang hat eine zu prüfende Leitung vor sich durch die er 24V DC schickt, am anderen Ende dieser Leitung ist ein EL1809 verbaut.
Dieser soll Prüfen ob dort Spannung anliegt, bzw. ob die Leitung "Durchgang" hat.
Soweit so gut. Ich habe das Programm bis jetzt sauber aufgeteilt in Variablenlisten, Hauptprogramm(MAIN) sowie einzelne Programme welche als Methoden fungieren, diese rufe ich in der MAIN nacheinander auf. Alle Variablen wurden auch korrekt mit den jeweiligen Modulen (EL 1809 und EL 2809) verknüpft.
Mein Problem ist nun, ich würde gerne alle Leitungen einmal durchprüfen lassen und dies nacheinander. Wenn eine Leitung geprüft wurde soll diese für den nächsten Ablauf gesperrt werden(so dass diese nicht mehr angelaufen wird). Zudem soll das Ergebnis des Tests in einem String gespeichert werden.
Jedoch habe ich folgende Probleme:
- die Zählervariable welche die einzelnen IF -Schleifen "aktiviert" zählt nicht korrekt
- die PLC läuft immer wieder nacheinander den Ablauf durch
- die Prüfschritte werden nicht bis zum Ende durchgeführt
hier ein Auszug aus meinem Code:
Variablen:
Code:
PROGRAM DSP_Modul
VAR
// delay für verzögerung
delay1 : TON;
delay2 : TON;
delay3 : TON;
delay4 : TON;
delay5 : TON;
delay6 : TON;
delay7 : TON;
delay8 : TON;
delay9 : TON;
delay10 : TON;
delay11 : TON;
delay12 : TON;
testStep: INT :=0; // Geändert
END_VAR
Ablauf:
Code:
;// Prüfungsabschnitt der einzelnen Stecker- PINS beginnt
testStep:= testStep +1; // Geändert
//Signal.In_DSP_KL30_UB := TRUE;
testStep := 1; // Inkrementierung zum nächsten Testablauf
//1:
//CHANNEL 1
//zu KL 31 GND
IF testStep = 1 THEN
Signal.Out_DSP_A1 := TRUE; //CHANNEL 2
delay1(IN :=TRUE, PT :=T#1S); // DELAY 1 SEKUNDE
IF delay2.Q THEN
IF Signal.Out_DSP_A1 AND Signal.In_DSP_KL31_GND THEN
StringList.Str_DSP_KL30_UB := 'A2 nach KL30 ERFOLGREICH';
ELSIF Signal.Out_DSP_A1 AND NOT Signal.In_DSP_KL31_GND THEN
StringList.Str_DSP_KL30_UB := 'A2 nach KL30 FEHLGESCHLAGEN';
END_IF
Signal.Out_DSP_A1 := FALSE; // Ausgang sendet 0;
delay2(IN := FALSE); //Delay FALSE
testStep := testStep +1; // Inkrementierung zum nächsten Testablauf
END_IF
END_IF
testStep := testStep +1; // Inkrementierung zum nächsten Testablauf
Signal.Out_DSP_A1 := FALSE; // Ausgang sendet 0;
//CHANNEL 2
//zu KL 31 GND
IF testStep = 2 THEN
Signal.Out_DSP_A2 := TRUE; //CHANNEL 2
delay1(IN :=TRUE, PT :=T#1S); // DELAY 1 SEKUNDE
IF delay2.Q THEN
IF Signal.Out_DSP_A2 AND Signal.In_DSP_KL30_UB THEN
StringList.Str_DSP_KL30_UB := 'A2 nach KL30 ERFOLGREICH';
ELSIF Signal.Out_DSP_A2 AND NOT Signal.In_DSP_KL30_UB THEN
StringList.Str_DSP_KL30_UB := 'A2 nach KL30 FEHLGESCHLAGEN';
END_IF
Signal.Out_DSP_A2 := FALSE; // Ausgang sendet 0;
delay2(IN := FALSE);
testStep := testStep +1; // Inkrementierung zum nächsten Testablauf
END_IF
END_IF
//3:
IF testStep = 3 THEN
//CHANNEL 3
// zu LS-Stecker 6
Signal.Out_DSP_A7 := TRUE; //CHANNEL 5 x
delay3(IN :=TRUE, PT :=T#1S); // DELAY 1 SEKUNDEN
IF delay3.Q THEN
IF Signal.Out_DSP_A7 AND Signal.In_DSP_LS_Stecker_6 THEN
StringList.Str_DSP_A7 := 'A7 nach LS-Stecker 6 ERFOLGREICH';
ELSIF Signal.Out_DSP_A7 AND NOT Signal.In_DSP_LS_Stecker_6 THEN
StringList.Str_DSP_A7 := 'A2 nach LS-Stecker 6 FEHLGESCHLAGEN';
END_IF
Signal.Out_DSP_A7 := FALSE; // Ausgang sendet 0;
delay3(IN := FALSE);
testStep := testStep +1; // Inkrementierung zum nächsten Testablauf
END_IF
END_IF
//4:
IF testStep = 4 THEN
//CHANNEL 4
// zu LS-Stecker 4
Signal.Out_DSP_A8 := TRUE; //CHANNEL 5 x
delay4(IN :=TRUE, PT :=T#1S); // DELAY 1 SEKUNDE
IF delay4.Q THEN
IF Signal.Out_DSP_A8 AND Signal.In_DSP_LS_Stecker_4 THEN
StringList.Str_DSP_A8 := 'A8 nach LS-Stecker 4 ERFOLGREICH';
ELSIF Signal.Out_DSP_A8 AND NOT Signal.In_DSP_LS_Stecker_4 THEN
StringList.Str_DSP_A8 := 'A8 nach LS-Stecker 4 FEHLGESCHLAGEN';
END_IF
Signal.Out_DSP_A8 := FALSE; // Ausgang sendet 0;
delay4(IN := FALSE);
testStep := testStep +1; // Inkrementierung zum nächsten Testablauf
END_IF
END_IF
//5:
Ich hoffe ihr habt einen Tipp oder eine Idee für mich um dieses Problem zu lösen.
Viele Grüße
Kon
Zuletzt bearbeitet: