-> Hier kostenlos registrieren
Hallo,
Programiersoftware:
TwinCAT PLC Control - Strukturierter Text
Ich habe für jedes Feld eine X- (Spalten) und Y- (Reihen) Position, die ich schon vorher abgelegt habe.
Nun möchte ich diesen Feldern diese Spalten und Reihen Position in folgendem Algorythmus übergeben (siehe Bild)
Ich habe für die Reihen die Positionen errechnet und abgelegt. Ich muss diese Positionen errechnen, da die Feldgröße verstellbar ist. Diese Felder werden dann in ein fixes definiertes Fenster gelegt (also je nach Feldgröße (immer quadrate) gibt eine bestimmte Anzahl an Reihen und Spalten).
Mein Problem liegt jetzt darin, das ich z.B beim Feld 7 bereits die Position des Feldes 8 übergebe (siehe Bild). Ich mache einen Spaltenwechsel aber auch gleichzeitig eine Reihenverringerung/Reihenerhöhung. Ich dürfte aber nur einen Spaltenwechsel machen und KEINE Reihenerhöhung bzw. Reihenverringerung:
Aktueller Programmcode:
(* Initialisieren *)
IF NOT InitOk THEN
m:= 1;
IdxReihe:= 1;
IdxSpalte:= 1;
Invers:= FALSE;
InitOk:= TRUE;
END_IF
WHILE IdxSpalte <= MaxAnzSpalten DO
Felder[m].PosX:= Spalten[IdxSpalte].PosX; (* X-Übergabe aus Spalte *)
Felder[m].PosY:= Reihen[IdxReihe].PosY; (* Y-Übergabe aus Reihe *)
m:= m+1; (* Feldererhöhung *)
(* Überprüfung oben *)
IF IdxReihe = MaxAnzReihen THEN (* danach Spaltenwechsel *)
IdxSpalte:= IdxSpalte + 1; (* Spaltenerhöhung *)
Invers:= TRUE; (* Reihenverlauf nach unten *)
END_IF
(* Überprüfung unten *)
IF IdxReihe = 1 AND Invers THEN (* danach Spaltenwechsel *)
IdxSpalte:= IdxSpalte + 1; (* Spaltenerhöhung *)
Invers:= FALSE; (* Reihenverlauf nach oben *)
END_IF
(* Reihenerhöhung/Reihenverringerung *)
IF Invers THEN
IdxReihe:= IdxReihe - 1;
ELSE
IdxReihe:= IdxReihe + 1;
END_IF
END_WHILE
Ich hoffe es kann mir jemand helfen. Den richtigen Gedanken habe ich schon, ich weiß nur leider nicht, wie ich das Softwaremäßig umsetzen kann und soll.
Danke für euer Bemühen!
Programiersoftware:
TwinCAT PLC Control - Strukturierter Text
Ich habe für jedes Feld eine X- (Spalten) und Y- (Reihen) Position, die ich schon vorher abgelegt habe.
Nun möchte ich diesen Feldern diese Spalten und Reihen Position in folgendem Algorythmus übergeben (siehe Bild)
Ich habe für die Reihen die Positionen errechnet und abgelegt. Ich muss diese Positionen errechnen, da die Feldgröße verstellbar ist. Diese Felder werden dann in ein fixes definiertes Fenster gelegt (also je nach Feldgröße (immer quadrate) gibt eine bestimmte Anzahl an Reihen und Spalten).
Mein Problem liegt jetzt darin, das ich z.B beim Feld 7 bereits die Position des Feldes 8 übergebe (siehe Bild). Ich mache einen Spaltenwechsel aber auch gleichzeitig eine Reihenverringerung/Reihenerhöhung. Ich dürfte aber nur einen Spaltenwechsel machen und KEINE Reihenerhöhung bzw. Reihenverringerung:
Aktueller Programmcode:
(* Initialisieren *)
IF NOT InitOk THEN
m:= 1;
IdxReihe:= 1;
IdxSpalte:= 1;
Invers:= FALSE;
InitOk:= TRUE;
END_IF
WHILE IdxSpalte <= MaxAnzSpalten DO
Felder[m].PosX:= Spalten[IdxSpalte].PosX; (* X-Übergabe aus Spalte *)
Felder[m].PosY:= Reihen[IdxReihe].PosY; (* Y-Übergabe aus Reihe *)
m:= m+1; (* Feldererhöhung *)
(* Überprüfung oben *)
IF IdxReihe = MaxAnzReihen THEN (* danach Spaltenwechsel *)
IdxSpalte:= IdxSpalte + 1; (* Spaltenerhöhung *)
Invers:= TRUE; (* Reihenverlauf nach unten *)
END_IF
(* Überprüfung unten *)
IF IdxReihe = 1 AND Invers THEN (* danach Spaltenwechsel *)
IdxSpalte:= IdxSpalte + 1; (* Spaltenerhöhung *)
Invers:= FALSE; (* Reihenverlauf nach oben *)
END_IF
(* Reihenerhöhung/Reihenverringerung *)
IF Invers THEN
IdxReihe:= IdxReihe - 1;
ELSE
IdxReihe:= IdxReihe + 1;
END_IF
END_WHILE
Ich hoffe es kann mir jemand helfen. Den richtigen Gedanken habe ich schon, ich weiß nur leider nicht, wie ich das Softwaremäßig umsetzen kann und soll.
Danke für euer Bemühen!