Vielen Dank für die Antworten. Es war das Problem mit zu großen Blending. Hab dies nun angepasst und jetzt funktionierts wie ich mir das vorstelle.
Beiträge von al3x
-
-
Hallo zusammen,
könnt ihr mir mit folgendem Problem / Verständisproblem helfen:
Ein Programm hat folgenden Ablauf (ScaraRoboter)
moveJ(appro(PosX)
moveJ PosX
waitEndMove
Teil ablegen
nMoveID = moveJ(appro(PosX)
waitEndMovewait(GetMoveId()>=nMoveID + 0.5)
Danach ist das Programm beendet und falls Teil Abholen ansteht wird das ähnliche Programm zum abholen aufgerufen.
Zuerst hatte ich nur waitEndMove: Bewegung wird komplett ausführt und Programm beendet -> Problem: Taktzeitverlust da letzte Bewegung nicht überschliffen wird.
Ohne die beiden Wait-Befehle die letzte Bewegung nicht ausgeführt und Programm beendet -> erst wenn nächstes Programm gestartet wird wird die Bewegung ausgeführt
(Ich verstehe nicht was den Roboter zum anhalten bringt)
Mit wait(GetMoveID) bleibt der Roboter in dieser Zeile stehen. Ich würde erwarten nach 50% der Bewegung wird Programm beendet.
Ziel:
Roboter soll am Ende vom Programm auf eine bestimmte Vorposition fahren. Falls zu diesem Zeitpunkt schon ein neuer Auftrag ansteht überschleifen.Ich hofe ihr versteht mein Problem.
Wäre es evtl. besser alles in ein Programm zu packen?
-
Wie kann ich eigentlich die Achsgrenzen einstellen? Am SP2 gibts Achsgrenzen für Arm und Zelle. (den Unterschied hab ich noch nicht ganz verstanden)
Wenn ich hier was ändern möchte, kommt immer die Fehlermeldung "the arm would be out of the new joint range", obwohl die aktuelle Position innerhalb der Grenzen ist.
-
konnte das Problem gestern noch mit Hilfe des Supports lösen.
zu Beachten: wenn wann mit SRS 2022 per Safety Exportieren die Safety Konfig auf den Roboter überträgt, funktioniert dies nicht. kA was dort übertragen wird.
Das ganze funktioniert erst ab der Safety Version 202.xxx
Weitere Frage: Wie würde die Betriebsartenanwahl über SPS funktionieren?
-
ich hab nun Mode_WMS auf Null gesetzt.
Trotzdem kommt die Meldung "Keine Betriebsart von der CPU (die Sicherheitsapplikation benötigt eine WMS9 es ist aber keine angeschlossen)".
-
Hallo zusammen,
was ist zu beachten wenn ich den Roboter ohne WMS-Box sondern die Betriebsarten über die SPS bzw. direkt am SP2 anwählen möchte?
-
ne, ist ein normaler Eingang, kann ich aber mal prüfen ob ich auf das Signal in der AutExt Schnittstelle switchen kann...
-
ich hab deinen Code auch schon getestet, aber du hast bei StopMove auch RESUME drin. -> UP wird abgebrochen
Mein Vorhaben ist eigentlich ganz einfach:
Für jedes UP gibts eine Fahrfreigabe der SPS. Fehlt das Signal bleibt Roboter stehen. Kommt Signal wieder fährt Roboter weiter.
Außerdem muss von jeder Position aus eine Grundstellungsfahrt möglich sein.
-
Nochmal langsam, ich glaub wir haben aneinander "vorbeigeredet".
Ich möchte mit Interrupt 20 StopMove() das UP ja garnicht abbrechen sondern nur anhalten bis Fahrfreigabe wieder gesetzt ist. Dann fährt Roboter weiter.
Das Funktioniert auch.
Der Interrupt 9 GST() funktioniert soweit auch.
Problem ist nur dass wenn Störung ist und Fahrfreigabe weg geht, steht Roboter in StopMove. Nur möchte ich aber von dort nicht weitermachen sondern über Interrupt 9 das GST() Programm aufrufen.
Das müsste doch auch irgendwie funktionieren. Oder geht das gar nicht?
-
ich kapiers nicht. Im Vorschlag von woodys ist doch auch das DECLARE im Main und ganz unten in der gleichen Ebene das RESUME.
Wenn ich im MAIN den Interrupt Deklariere mit dem Aufruf StopMove() muss ja StopMove auch im Main Programm vorhanden sein, und nicht im UP
-
ich denke es liegt am Vorlaufzeiger. Hab es nun so probiert:
CodeUP1: CONTINUE INTERRUPT DECL 20 WHEN NOT $IN[90] DO StopMove() WAIT FOR ( $IN[90] ) INTERRUPT ON 20 $ADVANCE=3
CodeDEF StopMove() INTERRUPT OFF 20 BRAKE WAIT FOR ( $IN[90] ) INTERRUPT ON 20 RESUME $ADVANCE=0 END
Er springt dann aber immer (obwohl IN 90) da ist in der StopMove und bleibt mit "Unzulässige Programmstruktur für RESUME" stehen.
-
Ich bringen nun zuerst IN[90] und 1sec. später IN[50]. Funktioniert leider trotzdem nicht.
Das eigentlich Programm läuft weiter und reagiert nicht auf den Interrupt 9, welcher 1sec. später kommt...
-
VIelen Dank schonmal für die vielen Antworten.
Das CycleFlag hab ich gebildet um nur einmal pro Unterprogramm den Eingang anpassen zu müssen.
Hab ich nun aber mal gelöscht und direkt den Eingang verwendet.IrrerPolterer: Die Fahrfreigabe soll nicht nur einmal Abgefragt werden, sondern über den ganzen Fahrweg, deshalb DEF Stop()
Ich teste jetzt mal die Verzögerung vom Eingang 90 zum Eingang 50 ob das Problem dann immer noch besteht...
-
Hallo zusammen,
ich hab mein Programm (KSS8.7.1) bzw. Grundstellungsfahrt/Rückzugstrategie wie folgt aufgebaut:
Im Main wird über Interrupt 9 das GST() aufgerufen:
CodeMain() SPTP Home INTERRUPT DECL 9 WHEN $IN[50] DO GST() INTERRUPT ON 9 .. Aufrufe Unterprogramme END DEF GST()
Die UP sind wie folgt aufgebaut:
Code
Alles anzeigenUP1() $CYCLEFLAG[10] = $IN[90] ; Fahrfreigabe INTERRUPT DECL 20 WHEN NOT CYCFLAG[10] DO Stop() INTERRUPT ON 20 SPTP abcd END DEF Stop() BRAKE WAIT FOR $CYCFLAG[10] END
Das funktioniert soweit auch.
Nur manchmal bleibt das UP1 aktiv wenn Eingang 50 kommt.
Hängt es evtl. damit zusammen dass er im Programm bei BRAKE steht?
Wie handhabt ihr sowas?
-
Hat wirklich keiner eine Idee?
-
Hätte ich auch gedacht. Ist aber leider nicht so...
Oder muss das Einlesen irgendwie neu angestoßen werden? -
Hallo zusammen,
ist es möglich in der Anzeige der Greifer Texte zu den Eingängen hinterlegen?KRC v8.3.22
Gripper & SpotTech v3.2.2 -
So. Nachdem ich euch eine Weile mit komischen Fragen genervt hab, möchte ich euch jetzt auch mal mein Ergebnis vorstellen:
http://www.youtube.com/watch?v=RYP3dahRUmQ
Die Anlage ist zwar noch nicht ganz ausgereift, also ist bis jetzt eher als Prototyp anzusehen, aber die Zeit für die Technikerarbeit ist leider vorbei...
-
Hallo,
Ich habe drei Programme (Slot1-3) gleichzeitig laufen. Wenn ich jetzt die Priorität von Slot 1 auf 1 Stelle und von Slot 2-3 auf 2, dann heißt das, dass Prg. 1 eine Zeile, dann Prg. 2 zwei Zeilen, dann Prg. 3 zwei Zeilen und danach wieder von vorne Prg.1 eine Zeile ausgeführt wird.
Was passiert aber wenn jetzt ein DLY 5 oder ein MOV Befehl in Prg. 1 abgearbeitet wird, warten dann die anderen Programme so lange?
Und gibts ne Möglichkeit die Zykluszeit zu messen, oder kann mir einer nen Anhaltspunkt nennen wie lang der Robi ungefähr für ein paar Zeilen braucht?
mfg
Alex -
bin grad dabei das mit Visio zu machen. komm aber nicht so wirklich weiter.
hat nicht zufällig jemand an screenshot wie das aussieht wenns fertig ist?
irgendein beispielprogramm oder so?!