Forum: PC-Programmierung Taskproblem und Optimierung bei Codesys


von Andreas Z. (codesys123456)


Angehängte Dateien:

Lesenswert?

Guten Morgen miteinander,

gleich vorweg ich bin noch Anfänger in Sachen Strukturierter Text und 
bitte um Eure Hilfe, ins besondere im ersten Fall

1.Problem
Ich habe im beigefügten CoDeSys-Programm ein Programm 
"Werkstueck_Verwaltung" welches ich mit einem weiteren "Visu_Band" in 
einen Task mit einer Zyklenzeit von 1s und der Priorität 5 (niedrigste 
meines Programms) eingefügt habe.
Ursprünglich hatte ich die Fehlermeldung beim Starten des Programms, in 
der Simulation, die Fehlermedlung:Endlos-Schleife (nur bei Priorität:2 
nicht bei 5). Ich habe die letzte Anweisung (in Werkstueck_Verwaltung in 
eine IF-Anweisung (zuvor While) umgeändert und es ging

Mein Problem ist nun, wenn ich die Variable "Stueck-Annahme" auf True 
setzte/force wird bei Priorität 5 die IF-Anweisung nicht ausgeführt, bei 
Priorität 2 klappt dies teilweise.

Ich habe bewusst, die zyklische Zeit auf lediglcih 1s gesetzt, da die 
anderern Programmteile Vorrang haben müssen.

-> Was habe ich falsch gemacht????

2.Frage/Vereinfachung

Auch in diesem Programm "WErkstueck_Verwalt" habe ich versucht, mit den 
zwei Case-Anwendungen Werte in die Visu zu schreiben und anschließend 
programminterne Variable wieder mit dem neuen, evtl. durch Eingabe, 
veränderten Wert, zu beschreiben. Kann man hier evtl. [i],.. arbeiten?

Das Ergebnis sollte sein, es gibt ca. 30 verschiedene Werkstücke mit 
jeweils ca. 12 Parametern (siehe 1. Zeile Case =vollständig), dass diese 
Variablen über die Visu geändert werden können.

Wird nun in der Visuvalisierung z.B. das Werkstück 15 aufgerufen, so 
sollen die 12 Parameter in die Visu PLC_VISU geladen werden (alle 12 
Variabeln stammen aus z.B.Werkstueck_15 und werden auf die Variable 
..._NrX geschrieben).
Wird nun der Wert über die nummerische Anzeige geändert oder 
boolsche_Elemente angeklickt, müssen anschließend die Änderungen oder 
einfach alle Parameter wieder in das Programm z.B. Werkstueck_15 
geschrieben werden.

3a.Visu-Frage

Ein Linienzug soll mit einem variablen Ende und einem fixen Ende in der 
Visu angezeigt werden. Wie ist dies möglich, denn das eine Ende darf 
sich nicht bewegen und das andere Ende bewegt sich lediglich in 
X-Richtung (Folge: Pfreillänge wird kleiner und gleichzeitg weißt diese 
dann immer wieder einen anderen Winkel auf +


3b.Visu-Frage

Ein Viereck soll sich in x-richtung bewegen (realisiert) und gleichzeitg 
soll die X-Länge variabel sein; die y-Richtung jedoch nur eine fixe oder 
zwei fixe Größen annehmen (=nicht skaliert).

Vielen Dank für Eure Hilfe und Eurer Verständnis, bzgl. der falschen, 
technischen Ausdrucksweise. Ich freue mich über Eure Ratschläge.

Grüße

Codesys123456

von CoDeSys123456 (Gast)


Lesenswert?

Leider, hat sich noch niemand dem Thema angenommen, evtl. habe ich auch 
einfach zu viel verschiedenen Punkte auf einmal aufgegriffen.
Daher nochmals ein zweiter Anlauf, bezieht sich nur auf den Punkt 
Vereinfachung:

Ich möchte kurz erklären, was ich vorhabe; wahrscheinlich ist mein 
Ansatz völlig falsch:

In der Visuvalisierung (PLC_VISU) habe ich 5 Eingabefelder 
(Word-Variablen, [%s mm]) und mehrere boolsche "Taster" [Pfeile und 
Quadrate mit Nummmern].
Diese Eingabefelder und boolschen Taster können bei den bis zu 30 
Werkstücken verschiedene Stellungen und Eingaben annehmen, die im 
jeweiligen Programm Werkstueck_1, Werksteuck_2, ... _30 benötigt und 
"gespeichert" werden müssen; zur weiteren Berechnung und falls vom 
Bediener wieder gewünscht, in die VISU geladen werden.

Ich versuchs nun mal mit einem Beispiel:
Wird das Werkstück 1 (blaues Rechteck in der PLC_VISU) angeglickt oder 
aber die Werkstücknummer bei den drei roten Fragezeichen (beides noch 
nicht realisiert) eingegeben so sollen die 5 Eingabefelder 
(Word-Variablen, [%s mm]) und mehrere boolsche "Taster" mit den Werten 
aus dem Programm des angeklickten Werkstücks (z.B. 8 für 
Werksteuck_:cool: "beschrieben werden". Anschließend kann der Benutzer 
die Werte der Eingabefelder ändern oder boolschen Taster betätigen und 
dies wird sofort im Werksteuck_8 geändert; innerhalb einer Sekunde 
(Zyklenzeit, da das Werkstück, bzw. deren Parameter auch eine Stunde 
lang aufgerufen sein kann.
Wird nun ein anderes Werkstüeck ausgewählt, so muss vom jeweiligen 
Programm (z.B. Werkstueck_5) die jeweiligen WErte wieder neu geladen 
werden und anschließend wieder in diesem Programm (z.B. Werkstueck_5) 
geschieben werden.


Beispiel am Programm:
Ausgangslage, die Variable VISU_WerksteuckNR_Eingabe verändert sich, 
z.B. in 3 (durch Eingabe ??? = 3, in der VISU).

Zuerst werden die benötigen Variabeln aus dem Programm, hier im 
Beispiel: Werksteuck_3 [VISU_S1_SX_3] gelesen und zwar nur einmal, 
deshalb dachte ich an eine Repeat-Schleife und anschließend in der Visu 
angezeigt [VISU_S1_SX_NrX].

Durch die nachfolgende Gleichsetzung der internen Variable 
"VISU_WerksteuckNR_Eingabe_Speicherung", wird die Repeat-Schleife nur 
einmal durchlaufen und anschließend sorgt die IF-Schleife für die 
Aktualisierung, bei einer Eingabe in der Visu, der jeweiligen Variabeln 
im Programm Werksteuck_3 [VISU_S1_SX_3], bis sich die 
VISU_WerksteuckNR_Eingabe ändert.
.
VISU_WerksteuckNR_Eingabe_Speicherung:= VISU_WerksteuckNR_Eingabe;

REPEAT
CASE VISU_WerksteuckNR_Eingabe OF
1:
VISU_S1_SX_NrX := VISU_S1_SX_1;
VISU_Anfangswert_1_NrX := VISU_Anfangswert_1_WzSt_1; (vereinfacht mit 
nur zwei Variablen, insgesamt pro
Werkstück >10
2: ...
3:
VISU_S1_SX_NrX := VISU_S1_SX_3;
VISU_Anfangswert_1_NrX := VISU_Anfangswert_1_WzSt_3;

END_CASE
UNTIL VISU_WerksteuckNR_Eingabe_Speicherung = VISU_WerksteuckNR_Eingabe 
END_REPEAT

IF VISU_WerksteuckNR_Eingabe_Speicherung = VISU_WerksteuckNR_Eingabe 
THEN
CASE VISU_WerksteuckNR_Eingabe OF
1:
VISU_S1_SX_1 := VISU_S1_SX_NrX;
VISU_Anfangswert_1_WzSt_1; := VISU_Anfangswert_1_NrX ;
2: ...
3:
VISU_S1_SX_3; := VISU_S1_SX_NrX;
VISU_Anfangswert_1_WzSt_3;:= VISU_Anfangswert_1_NrX;
END_CASE END_IF

Wie kann man dies nun einfacher realisieren, bzw. überhaupt korrekt 
realisieren?


Beispiel am Programm:
Zu diesem Auslesen/Anzeigen/Eingeben/Schreiben, oder wie auch immer 
:rolleyes:

Nun kommt noch eine kleine Nebenbedingung hinzu: Die Werte, wie z.B. 
[VISU_S1_SX_3] müssen, wenn das Stück aktiviert wird (kein Zusammenhang 
mit der Visu, sondern eine interne Freigabe des Programms Werstueck_1), 
einmalig mit dem Wert der boolschen Eingabe in der PLC_VISU (rote 
Rechtecke, auch mit Zahlen, über dem langen grünen Rechteck) 
[VISU_Supp_1_AN_Allgm] " nur beschrieben werden" und weitere Werte 
(deklinierte Word-Variablen) werden genullt.
.
[Werkstueck_1], leicht abgeändert
R_TRIG(CLK: Stueck_3_aktiv = FALSE , Q=
VISU_S1_SX_3 := VISU_Supp_1_AN_Allgm;
VISU_Anfangswert_1_WzSt_3 := 0)

(Problem R_TRIG ist keine Funktion, die Ausführung soll einmalig, bei 
Wechsel von [Steuck_3_aktiv] vonTrue auf False erfolgen)

Ich habe dies erwähnt, nicht dass hieraus eine unmögliche Abhängigkeit 
entsteht,...

Würde mich über Eure Rückmeldunge freuen, auch evtl. über die anderen 
Punkte.

viele GRüße

von Andreas Z. (codesys123456)


Lesenswert?

Hallo miteinander, das urdprüngliche Problem mit der Realisierung der 
austauschbaren Variablen über die Visu und das Programm haben sich 
erledigt.

Nachfolgend habe ich einen Programmabschnitt, der sich zwölf mal 
wiederholen würde und dieses Paket wiederum zwanzig Mal.
Voerst würde ich gerne wissen, kann man diesen nachfolgenden 
Programmteil (ersichtlich ist 1. und 2., wie gesagt es ginge bis 
12.)vereinfachen (z.B. mit Arrays)?

Diese "Abschnitte" sollten jedoch immer parallel bzw. direkt 
nacheinander abgearbeitet werden, sofern z.B.
1. Stueck_1_aktiv = TRUE AND VISU_S1_SX_[1] = TRUE
2. Stueck_1_aktiv = TRUE AND VISU_S1_SX_[1] = TRUE, ... sind;also in 
einem Zyklus, nacheinander????

Ich habe nun die Variabeln, die sich zwischen 1. und 2. bzw. bis 12. 
verändern, orange markiert und die, die bereits ein Array erhalten und 
dich ändern sowie die bereits vorhandenen Arrys grün, diese verändern 
sich in 1-12 nicht. Siehe auch nachfolgendes Programm

(*Support 1. Standart-Bearbeitung oder 
Sonderstück-Bearbeitung*)[size=150] 1.[/size]
IF Stueck_1_aktiv = TRUE AND VISU_S1_SX_[1] = TRUE
THEN IF VISU_S1_SX_AKTIV_[1] = TRUE AND VISU_Anfangswert_1_WzSt_[1] >0
THEN IF VISU_S1_MsNullp + VISU_S1_Start_Sonder + 
VISU_Anfangswert_1_WzSt_[1] < Anfangspos_Maschine_1 THEN A1 :=TRUE; ELSE 
A1 :=FALSE; END_IF
ELSE IF VISU_S1_MsNullp - VISU_S1_StRefp < Anfangspos_Maschine_1 THEN A2 
:=TRUE; ELSE A2 :=FALSE; END_IF END_IF
IF VISU_S1_SX_AKTIV_[1] = TRUE AND VISU_Anfangswert_3_WzSt_[1] >0
THEN IF VISU_S1_MsNullp - VISU_S1_Ende_Sonder > Anfangspos_Maschine_1 - 
VISU_Bearbeitungswert_2_WzSt_[1] - VISU_Anfangswert_1_WzSt_[1] THEN B1 
:=TRUE; ELSE B1 :=FALSE; END_IF
ELSE IF VISU_S1_MsNullp + VISU_S1_EndRefp > Anfangspos_Maschine_1 - 
Stuecklaenge_1 THEN B2 :=TRUE; ELSE B2 :=FALSE; END_IF END_IF
IF VISU_S1_SX_AKTIV_[1] = TRUE AND VISU_Bearbeitungswert_4_WzSt_[1] >0
THEN IF VISU_S1_MsNullp + VISU_S1_Start_Sonder + 
VISU_Anfangswert_3_WzSt_[1] + VISU_Bearbeitungswert_2_WzSt_[1] + 
VISU_Anfangswert_1_WzSt_[1] < Anfangspos_Maschine_1 THEN C :=TRUE; ELSE 
C :=FALSE; END_IF END_IF
IF VISU_S1_SX_AKTIV_[1] = TRUE AND VISU_Endwert_5_WzSt_[1] >0
THEN IF VISU_S1_MsNullp - VISU_S1_Ende_Sonder > Anfangspos_Maschine_1 - 
Stuecklaenge_1 + VISU_Endwert_5_WzSt_[1] THEN D1 :=TRUE; ELSE D1 
:=FALSE; END_IF
ELSE IF VISU_S1_MsNullp + VISU_S1_EndRefp > Anfangspos_Maschine_1 - 
Stuecklaenge_1 THEN D2 :=TRUE; ELSE D2 :=FALSE; END_IF END_IF END_IF
IF (A1 = TRUE OR A2 = TRUE) AND (B1 = TRUE OR B2 = TRUE OR C =TRUE) AND 
(D1 = TRUE OR D2=TRUE) THEN S1_AN := TRUE; ELSE S1_AN := FALSE; END_IF
(*Support 2. Standart-Bearbeitung oder Sonderstück-Bearbeitung*) 
-[size=150]2.[/size]
IF Stueck_1_aktiv = TRUE AND VISU_S2_SX_[1] = TRUE
THEN IF VISU_S2_SX_AKTIV_[1] = TRUE AND VISU_Anfangswert_1_WzSt_[1]>0
THEN IF VISU_S2_MsNullp + VISU_S2_Start_Sonder + 
VISU_Anfangswert_1_WzSt_[1]< Anfangspos_Maschine_1 THEN A21 :=TRUE; ELSE 
A21 :=FALSE; END_IF
ELSE IF VISU_S2_MsNullp - VISU_S2_StRefp < Anfangspos_Maschine_1 THEN 
A22 :=TRUE; ELSE A22 :=FALSE; END_IF END_IF
IF VISU_S2_SX_AKTIV_[1] = TRUE AND VISU_Anfangswert_3_WzSt_[1] >0
THEN IF VISU_S2_MsNullp - VISU_S2_Ende_Sonder > Anfangspos_Maschine_1 - 
VISU_Bearbeitungswert_2_WzSt_[1] - VISU_Anfangswert_1_WzSt_[1] THEN B21 
:=TRUE; ELSE B21 :=FALSE; END_IF
ELSE IF VISU_S2_MsNullp + VISU_S2_EndRefp > Anfangspos_Maschine_1 - 
Stuecklaenge_1 THEN B22 :=TRUE; ELSE B22 :=FALSE; END_IF END_IF
IF VISU_S2_SX_AKTIV_[1] = TRUE AND VISU_Bearbeitungswert_4_WzSt_[1] >0
THEN IF VISU_S2_MsNullp + VISU_S2_Start_Sonder + 
VISU_Anfangswert_3_WzSt_[1] + VISU_Bearbeitungswert_2_WzSt_[1] + 
VISU_Anfangswert_1_WzSt_[1] < Anfangspos_Maschine_1 THEN C2 :=TRUE; ELSE 
C :=FALSE; END_IF END_IF
IF VISU_S2_SX_AKTIV_[1] = TRUE AND VISU_Endwert_5_WzSt_[1] >0
THEN IF VISU_S2_MsNullp - VISU_S2_Ende_Sonder > Anfangspos_Maschine_1 - 
Stuecklaenge_1 + VISU_Endwert_5_WzSt_[1] THEN D21 :=TRUE; ELSE D21 
:=FALSE; END_IF
ELSE IF VISU_S2_MsNullp + VISU_S2_EndRefp > Anfangspos_Maschine_1 - 
Stuecklaenge_1 THEN D22 :=TRUE; ELSE D22 :=FALSE; END_IF END_IF END_IF
IF (A21 = TRUE OR A22 = TRUE) AND (B21 = TRUE OR B22 = TRUE OR C2 =TRUE) 
AND (D21 = TRUE OR D22=TRUE) THEN S2_AN := TRUE; ELSE S2_AN := FALSE; 
END_IF

Bitte um Eure Ratschläge
Vielen Dank

von Andreas Z. (codesys123456)


Lesenswert?

Hallo miteinander,

ich habe nun, das Ganze in ein Programm integriert, mit 
einanderverflochtene Arrays. Nun meine Frage, wie kann dieser Komplez am 
schnellsten abgearbeitet werden, sodass die Berechnung gleich schnell 
erfolgt, wie wenn man das ganze komplett ausführlich (12*20) aufgliedern 
würde.

MEines Erachtens ist nun ein Schleife mit:
1. Zähler 1-12 [Supp]
2. Zähler 1-20 [Werks]
einzufügen.
= [Werks]= 1, Zähler 1=+1: [Supp] 1,2,3,...12 , dann Zähler 2+1
dann
= [Werks]= 2, Zähler 1=+1: [Supp] 1,2,3,...12
...
= [Werks]= 12, Zähler 1=+1: [Supp] 1,2,3,...12, dann Zähler 1 und 2 = 
wieder Reset:1

[list=]Wäre dies so korrekt? Und was für eine Schleife oder wie wäre der 
Zählring auzubauen?
Wie sind die Tasks aufzubauen (freilaufend oder zyklisch? des weiteren 
sind noch andere Programmteile, die die gleiche Priorität haben sowie 
einige, die z.B. nur jede Sekunde ablaufen brauchen, vorhanden???[/list]

VAR_GLOBAL RETAIN PERSISTENT
IF1pos_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
IF1neg_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [0..12] OF BOOL;
IF2pos_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
IF2neg_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
IF3pos_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
IF4pos_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
IF4neg_Supp_ay2_vWerk_ay1_On: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
S_ay2_Werks_ay1AN: ARRAY [0..20] OF ARRAY [1..12] OF BOOL;
VISU_SUP_ay1_MsNullp_: ARRAY [1..12] OF WORD; (*Support 1-12 
Maschienennullpunkt*)
VISU_SUP_ay1_StRefp_: ARRAY [1..12] OF BYTE; (*Support 1-12 
Startrefernzpunkt* vom Mittelpunkt des Supports + Bearbeitung*)
VISU_SUP_ay1_EndRefp_: ARRAY [1..12] OF BYTE; (*Support 1-12 
Endtrefernzpunkt, vom Mittelpunkt des Supports + Bearbeitung*)
VISU_SUP_ay1_Start_Sonder_: ARRAY [1..12] OF BYTE; (*Support 1-12 
Startrefernzpunkt, vom Mittelpunkt des Supports - SonderBearbeitung*)
VISU_SUP_ay1_Ende_Sonder_: ARRAY [1..12] OF BYTE; (*Support 1-12 
Endtrefernzpunkt, vom Mittelpunkt des Supports - SonderBearbeitung*) 
VISU_Anfangswert_1_WzSt_: ARRAY [0..20] OF WORD; (*Eingabe in Visu 
Anfangswert_1_ von Werkstueck 1-20 keine Bearbeitung; Visuvalisierung 
Stueck-Berabeitungs-Laengen*)
VISU_Bearbeitungswert_2_WzSt_: ARRAY [0..20] OF WORD; (*Eingabe in Visu 
Bearbeitungswert_2_ von Werkstueck 1-20 Bearbeitun; Visuvalisierung 
Stueck-Berabeitungs-Laengen*)
VISU_Anfangswert_3_WzSt_: ARRAY [0..20] OF WORD; (*Eingabe in Visu 
Anfangswert_3_ von Werkstueck 1-20 keine Bearbeitung; Visuvalisierung 
Stueck-Berabeitungs-Laengen*)
VISU_Bearbeitungswert_4_WzSt_: ARRAY [0..20] OF WORD; (*Eingabe in Visu 
Bearbeitungswert_4_ von Werkstueck 1-20, keine Bearbeitung; 
Visuvalisierung Stueck-Berabeitungs-Laengen*)
VISU_Endwert_5_WzSt_: ARRAY [0..20] OF WORD; (*Eingabe in Visu 
Bearbeitungswert_5_ von Werkstueck 1-20 keine Bearbeitung; 
Visuvalisierung Stueck-Berabeitungs-Laengen*)
VISU_Stuecklaenge_: ARRAY [0..20] OF WORD; (Visu-Stuecklänge)
VISU_SUP_ay2_ST_ay1_: ARRAY [0..20]OF ARRAY [1..12]OF BOOL; (*Support 
1-12, für jeweiliges Werkstueck 1-20, Bearbeitung aktiv, Visuvalisierung 
Support Zustand Bearbeitung aktiv *)
VISU_SUP_SONDERaktiv_ay2_ST_ay1_: ARRAY [0..20]OF ARRAY [1..12]OF BOOL; 
(*Support 1, füR jeweiliges Werkstueck 1-20, Sonderlaengen-Bearbeitung 
aktiv, Visuvalisierung Support Zustand Sonderlaengen-Bearbeitung aktiv 
*)
END_VAR


(*Werkstueck 1 bis 20 für je Support 1-12. Standart-Bearbeitung oder 
Sonderstück-Bearbeitung*)
IF Stueck_ay1_aktiv_[Werks] = TRUE AND VISU_SUP_ay2_ST_ay1_[Werks][Supp] 
= TRUE
THEN IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND 
VISU_Anfangswert_1_WzSt_[Werks] >0
THEN IF VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_Start_Sonder_[Supp] + 
VISU_Anfangswert_1_WzSt_[1] < Anfangspos_Maschine_ay1_[Werks] THEN 
IF1pos_Supp_ay2_vWerk_ay1_On :=TRUE; ELSE 
IF1pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF
ELSE IF VISU_SUP_ay1_MsNullp_[Supp] - VISU_SUP_ay1_StRefp_[Supp] 
<Anfangspos_Maschine_ay1_[Werks] THEN IF1neg_Supp_ay2_vWerk_ay1_On 
:=TRUE; ELSE IF1neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF 
END_IF

IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND 
VISU_Anfangswert_3_WzSt_[Werks] >0
THEN IF VISU_SUP_ay1_MsNullp_[Supp] - VISU_SUP_ay1_Ende_Sonder_[Supp] > 
Anfangspos_Maschine_ay1_[Werks] - VISU_Bearbeitungswert_2_WzSt_[Werks] - 
VISU_Anfangswert_1_WzSt_[Werks] THEN 
IF2pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; ELSE 
IF2pos_Supp_ay2_vWerk_ay1_On :=FALSE; END_IF
ELSE IF VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_EndRefp_[Supp] > 
Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks] THEN 
IF2neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; ELSE 
IF2neg_Supp_ay2_vWerk_ay1_On :=FALSE; END_IF END_IF

IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND 
VISU_Bearbeitungswert_4_WzSt_[Werks] >0
THEN IF VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_Start_Sonder_[Supp] + 
VISU_Anfangswert_3_WzSt_[Werks] + VISU_Bearbeitungswert_2_WzSt_[Werks] + 
VISU_Anfangswert_1_WzSt_[Werks] < Anfangspos_Maschine_ay1_[Werks] THEN 
IF3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; ELSE 
IF3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp :=FALSE; END_IF END_IF

IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND 
VISU_Endwert_5_WzSt_[Werks] >0
THEN IF VISU_SUP_ay1_MsNullp_[Supp] - VISU_SUP_ay1_Ende_Sonder_[Supp] > 
Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks] + 
VISU_Endwert_5_WzSt_[Werks] THEN 
IF4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; ELSE 
IF4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF
ELSE IF VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_EndRefp_[Supp] > 
Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks] THEN 
IF4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; ELSE 
IF4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF END_IF END_IF

IF (IF1pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR 
IF1neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE) AND ( 
IF2pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR 
IF2neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR 
IF3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] =TRUE) AND 
(IF4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR 
IF4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp=TRUE) THEN 
S_ay2_Werks_ay1AN[Werks][Supp] := TRUE; ELSE 
S_ay2_Werks_ay1AN[Werks][Supp] := FALSE; END_IF

von Andreas Z. (codesys123456)


Lesenswert?

FOR Werks:=1 TO 20 DO OR 1 TO (Stueckzahlnummer)[/color]
FOR Supp:=1 TO 12 DO
1
IF  Stueck_ay1_aktiv_[Werks] = TRUE AND VISU_SUP_ay2_ST_ay1_[Werks][Supp] = TRUE
2
     THEN   
3
               IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND VISU_Anfangswert_1_WzSt_[Werks] >0
4
                           THEN   
5
                                 IF VISU_SUP_ay1_MsNullp_[Supp] +  VISU_SUP_ay1_Start_Sonder_[Supp] + 
6
                                     VISU_Anfangswert_1_WzSt_[1] < Anfangspos_Maschine_ay1_[Werks]       
7
                                            THEN 
8
                                                  1pos_Supp_ay2_vWerk_ay1_On :=TRUE;  
9
                                             ELSE    
10
                                                  1pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE ; END_IF
11
                           ELSE  
12
                                 IF VISU_SUP_ay1_MsNullp_[Supp] - VISU_SUP_ay1_StRefp_[Supp]  
13
                                    <Anfangspos_Maschine_ay1_[Werks]
14
                                             THEN 
15
                                                   1neg_Supp_ay2_vWerk_ay1_On :=TRUE;  
16
                                              ELSE 
17
                                                   1neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF END_IF
18
19
                IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND VISU_Anfangswert_3_WzSt_[Werks] >0
20
                           THEN  
21
                                  IF  VISU_SUP_ay1_MsNullp_[Supp] - VISU_SUP_ay1_Ende_Sonder_[Supp]  > 
22
                                       Anfangspos_Maschine_ay1_[Werks] - VISU_Bearbeitungswert_2_WzSt_[Werks] - 
23
                                       VISU_Anfangswert_1_WzSt_[Werks]     
24
                                             THEN
25
                                                     2pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE;  
26
                                              ELSE 
27
                                                     2pos_Supp_ay2_vWerk_ay1_On :=FALSE; END_IF
28
                            ELSE    
29
                                  IF  VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_EndRefp_[Supp]          > 
30
                                       Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks]
31
                                              THEN  
32
                                                      2neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; 
33
                                              ELSE
34
                                                      2neg_Supp_ay2_vWerk_ay1_On :=FALSE; END_IF END_IF
35
36
                IF VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND VISU_Bearbeitungswert_4_WzSt_[Werks] >0
37
                            THEN  
38
                                      IF  VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_Start_Sonder_[Supp] + 
39
                                           VISU_Anfangswert_3_WzSt_[Werks] + VISU_Bearbeitungswert_2_WzSt_[Werks] +
40
                                           VISU_Anfangswert_1_WzSt_[Werks]  < Anfangspos_Maschine_ay1_[Werks]   
41
                                                 THEN 
42
                                                         3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE;  
43
                                                  ELSE 
44
                                                         3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp :=FALSE; END_IF END_IF
45
46
                 IF  VISU_SUP_SONDERaktiv_ay2_ST_ay1_[Werks][Supp] = TRUE AND VISU_Endwert_5_WzSt_[Werks] >0
47
                           THEN    
48
                                       IF VISU_SUP_ay1_MsNullp_[Supp] -  VISU_SUP_ay1_Ende_Sonder_[Supp]   > 
49
                                           Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks] + 
50
                                           VISU_Endwert_5_WzSt_[Werks]    
51
                                                THEN 
52
                                                        4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE; 
53
                                                 ELSE 
54
                                                        4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF
55
                              ELSE   
56
                                       IF VISU_SUP_ay1_MsNullp_[Supp] + VISU_SUP_ay1_EndRefp_[Supp]            > 
57
                                           Anfangspos_Maschine_ay1_[Werks] - Stuecklaenge_ay1_[Werks] 
58
                                                THEN
59
                                                        4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=TRUE;  
60
                                                ELSE 
61
                                                        4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] :=FALSE; END_IF END_IF END_IF
62
63
IF         (pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] =  TRUE OR 1neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE) 
64
     AND 
65
           (2pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR  2neg_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE
66
            OR    3pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] =TRUE) 
67
     AND 
68
           (4pos_Supp_ay2_vWerk_ay1_On[Werks][Supp] = TRUE OR 4neg_Supp_ay2_vWerk_ay1_On[Werks][Supp=TRUE) 
69
70
             THEN  
71
                     S_ay2_Werks_ay1AN[Werks][Supp] := TRUE; 
72
             ELSE  
73
                     S_ay2_Werks_ay1AN[Werks][Supp] := FALSE; END_IF
END_FOR
END_FOR

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.