-> Hier kostenlos registrieren
Hallo,
ich bin lange in der FUP/AWL-Welt unterwegs gewesen und muss mich nun mit SCL anfreunden.
Auf folgendes Problem bin ich nun gestoßen:
Bei einer Freigabe soll ein Wert in das erste Array-Element geschrieben werden, bei der nächsten Freigabe in das Zweite Array-Element....
In AWL würde meine Lösung dafür so aussehen:
U "A_Kuka_FreigabeScheibeEinlegen"
FP "Flanke_11.1"
SPBN out
L "d_Sickmessung".Analogwert_Sick1_mm
T "d_Sickmessung".Sick1["d_Sickmessung".Counter]
L "d_Sickmessung".Counter
L 1
+I
T "d_Sickmessung".Counter
L "d_Sickmessung".Counter
L 10
>I
SPBN out
L 1
T "d_Sickmessung".Counter
out: NOP 0
Meine Idee in SCL war folgende:
"Flankenmerker" := "A_Kuka_FreigabeScheibeEinlegen" AND NOT "Impulsmerker";
"Impulsmerker" := "A_Kuka_FreigabeScheibeEinlegen";
WHILE Flankenmerker and "d_Sickmessung".Counter < 11 DO
"d_Sickmessung".Sick1["d_Sickmessung".Counter] := "d_Sickmessung".Analogwert_Sick1_mm;
"d_Sickmessung".Counter := "d_Sickmessung".Counter + 1;
END_WHILE;
IF "d_Sickmessung".Counter >= 11 THEN
"d_Sickmessung".Counter := 1;
END_IF;
Das funktioniert natürlich nicht weil die Schleife in einem SPS-Zyklus alle 10 Werte mit einer Freigabe beschreibt.
Leider habe ich keine Idee wie das sonst funktionieren soll. (klar ich könnte mit der Case-Anweisung jeden Wert einzeln zuweisen, aber das ist für größere Arrays keine Option)
hat jemand eine Idee?
Gruß
ich bin lange in der FUP/AWL-Welt unterwegs gewesen und muss mich nun mit SCL anfreunden.
Auf folgendes Problem bin ich nun gestoßen:
Bei einer Freigabe soll ein Wert in das erste Array-Element geschrieben werden, bei der nächsten Freigabe in das Zweite Array-Element....
In AWL würde meine Lösung dafür so aussehen:
U "A_Kuka_FreigabeScheibeEinlegen"
FP "Flanke_11.1"
SPBN out
L "d_Sickmessung".Analogwert_Sick1_mm
T "d_Sickmessung".Sick1["d_Sickmessung".Counter]
L "d_Sickmessung".Counter
L 1
+I
T "d_Sickmessung".Counter
L "d_Sickmessung".Counter
L 10
>I
SPBN out
L 1
T "d_Sickmessung".Counter
out: NOP 0
Meine Idee in SCL war folgende:
"Flankenmerker" := "A_Kuka_FreigabeScheibeEinlegen" AND NOT "Impulsmerker";
"Impulsmerker" := "A_Kuka_FreigabeScheibeEinlegen";
WHILE Flankenmerker and "d_Sickmessung".Counter < 11 DO
"d_Sickmessung".Sick1["d_Sickmessung".Counter] := "d_Sickmessung".Analogwert_Sick1_mm;
"d_Sickmessung".Counter := "d_Sickmessung".Counter + 1;
END_WHILE;
IF "d_Sickmessung".Counter >= 11 THEN
"d_Sickmessung".Counter := 1;
END_IF;
Das funktioniert natürlich nicht weil die Schleife in einem SPS-Zyklus alle 10 Werte mit einer Freigabe beschreibt.
Leider habe ich keine Idee wie das sonst funktionieren soll. (klar ich könnte mit der Case-Anweisung jeden Wert einzeln zuweisen, aber das ist für größere Arrays keine Option)
hat jemand eine Idee?
Gruß