Moin,
ich bin gerade dabei während ich in der Firma bin eine alte Messeanlage neu zu Programmieren (KRC4 compact 8.3.29) bei dem Programm werden Stifte zwischen verschiedenen Nestern hin und her Sortiert. In der Variable i[1-30] wird gespeichert ob ein Stift vorhanden ist. Die einzelnen Nester werden weiter oben (außerhalb des Ausschnittes) abgefahren und bereits Vorsortiert (i[1-30] ist resettet und wieder gefüllt worden) für das gesamte Sortieren werden alte Programmteile wieder verwendet, im Einzelschritt (also Zeile für Zeile) funktioniert das ganze auch zuverlässig, in den beiden anderen Durchlaufarten des Teach-Betriebes (also Normal mit GO oder mit Stopp nach der nächsten Bewegung) aber nicht, keine Ahnung warum... ich habe bereits versucht in den Schleifen Wartezeiten zu verbauen (0,05s), leider ohne Veränderung. Ist euch sowas schonmal passiert? Hab ich irgendeinen Fehler in meinem Programm der sowas verursachen könnte?
;Check ob umsortiert werden muss
FOR fach = 1 to 20
hilf1 = fach-10
;Greifer öffnen
IF di_b_greifer_zu AND NOT di_b_greifer_offen THEN
do_b_Greifer_schliessen = FALSE
do_b_Greifer_oeffnen = TRUE
ENDIF
;Check ob umsortiert werden muss
IF i[fach] == 0 THEN
Diese If-Bedingung funktioniert im Einzelschritt, im normalen durchlauf ist sie immer falsch
i[fach] = 1
fachz = 20
fachs = 0
;z Fächer zurück legen
WHILE fachs == 0
IF i[fachz] == 1 THEN
fachs = fachz
ELSE
fachz = fachz-1
ENDIF
ENDWHILE
IF hilf1 == fachs THEN
;
ELSE
BASE_DATA[30] = BASE_DATA[1]
i[fachs] = 0
fachs = fachs-10
WHILE fachs > 1
BASE_DATA[30] = BASE_DATA[30]:{x 0, y 45, z 0, a 0, b 0, c 0}
fachs = fachs -1
ENDWHILE
;Aufnahmepunkte (fachs), Vorpunkt, Aufnahmepunkt
;FOLD LIN P105 Vel=2 m/s CPDAT13 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P105, 3:, 5:2, 7:CPDAT13
;FOLD LIN P104 Vel=2 m/s CPDAT12 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P104, 3:, 5:2, 7:CPDAT12
;Greifer schliessen
do_b_Greifer_oeffnen = FALSE
do_b_Greifer_schliessen = TRUE
WAIT FOR di_b_greifer_zu AND NOT di_b_greifer_offen
;Ausheben des Stifts
;FOLD LIN P105 Vel=2 m/s CPDAT13 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P105, 3:, 5:2, 7:CPDAT13
ENDIF
;FOLD PTP HOME Vel= 50 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
;Ablage Nest4
;IF fach>11 THEN
;Ablageframe
BASE_DATA[30] = BASE_DATA[4]
WHILE hilf1 > 0
BASE_DATA[30] = BASE_DATA[30]:{x 0, y 45, z 0, a 0, b 0, c 0}
hilf1 = hilf1 -1
ENDWHILE
;Anfahrt ablagepunkt (fach)
;FOLD LIN P0 Vel=2 m/s CPDAT0 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P0, 3:, 5:2, 7:CPDAT0
;
;Ablagepunkt
;FOLD LIN P4 Vel=2 m/s CPDAT6 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P6, 3:, 5:2, 7:CPDAT6
;
;Greifer öffnen
do_b_Greifer_schliessen = FALSE
do_b_Greifer_oeffnen = TRUE
WAIT FOR NOT di_b_greifer_zu AND di_b_greifer_offen
;
;Greifer freifahren
;FOLD LIN P5 Vel=2 m/s CPDAT7 Tool[1]:STIFTGREIFER Base[30];%{PE}%R 8.3.43,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P5, 3:, 5:2, 7:CPDAT7
;ENDIF
;FOLD PTP HOME Vel= 50 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
ENDIF
ENDFOR
Achso was ich noch dazu sagen sollte i[1-30] wird bisher nur von 1-20 genutzt und ist global, die anderen Variablen (fach, fachs, fachz, hilf1, hilf2, hilf3 (nicht alle verwendet) sind lokal definiert.
Danke im Voraus, falls ich es selbst noch rausfinden sollte melde ich mich hier nochmal