22. Juli 2019, 03:53:43
Roboterforum.de - Die Industrieroboter- Anwender und Experten Community

[gelöst] Achseweise Bewegung mittels Variablen


normal_post Autor Thema: [gelöst] Achseweise Bewegung mittels Variablen  (Gelesen 1408 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

22. November 2018, 09:50:38
Gelesen 1408 mal
Offline

newbiemechatronic


Hallo zusammen,
Ich hab bei uns gestern eine Mast-Slave Anwendung mit einem KR6 in Betrieb genommen. Der Robi bekommt von einem Master Modell Werte fĂŒr die Achsen zugeschickt und folgt dann anschließend den Bewegungen des Master Modells. Soweit funktioniert alles. Ich kann die Achswerte an die Steuerung senden und auch in Bewegungne umsetzen. Umgesetzt habe ich das ganze Programm so Ă€hnlich wie in dem Post https://www.roboterforum.de/roboter-forum/kuka-roboter/3/ptp-axis-variablen-beschreiben/1261/msg2254#msg2254 . Bei testen ist mir nur aufgefallen, dass der Roboter nicht alle Achsen gleichzeitig bewegt, sondern immer nur eine Achse nach der anderen. Bedeutet ich bewege im Modell die 1 und die 2 Achse gleichzeitig und der Robi bewegt zuerst nur die erste und dann die zweite Achse. Wie schaffe ich es, dass alle Achsen zugleich bewegt werden. Dazu gleich einmal der Code den ich verwende:

DEF MasterSlave( )
INI

SPTP HOME Vel=15 % DEFAULT ;%{PE}

LOOP
SlavePos.A1 = MA1
SlavePos.A2 = MA2
SlavePos.A3 = MA3
SlavePos.A4 = MA4
SlavePos.A5 = MA5
SPTP SlavePos
ENDLOOP

SPTP HOME Vel=15 % DEFAULT

END

SlavePos ist bei mir als AXIS im .dat hinterlegt. Bei der Programmierung bin ich davon ausgegangen, dass zuerst die einzelnen werte eingelesen werden und dann alle Achsen, den zugewiesenen Wert annehmen, jetzt zeigt sich in den Tests aber, dass eine Achse nach der anderen ausgerichtet werden. Hat jemand einen Tipp, mit welchem Verfahrbefel ich eine gleichzeitige Bewegung erreichen kann. ZusĂ€tzlich wĂŒrde ich gerne die Geschwindigkeit bei den achseweisen Bewegungen unabhĂ€ngig von den SPTP Home Befehlen steuern. Gefunden hab ich dazu nur den Befehl $VEL_AXIS[1]=SVEL_JOINT(15). Muss ich hier fĂŒr jede Achse einzeln die Geschwindigkeit festlegen, oder kann ich das gleich fĂŒr alle Achsen mit einem Befehl machen?
GrĂŒĂŸe
newbie
« Letzte Änderung: 22. November 2018, 16:41:59 von newbiemechatronic »
  • gefĂ€llt mir    Danke

Heute um 03:53:43
Antwort #1

Werbung

Gast

22. November 2018, 11:33:48
Antwort #1
Offline

SJX

Global Moderator
Hallo Newbie,
Liest Du die Daten ein via sps.sub? Poste mal dieses Prog.
Wie es aussieht fehlt die Koordination zwischen den beiden Interpretern.

Gruss SJX
  • gefĂ€llt mir    Danke
Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

22. November 2018, 12:46:38
Antwort #2
Offline

newbiemechatronic


Hi,
die Daten werden von mir mittels eines Python-Scripts und KukaVarProxy direkt auf die Steuerung geschrieben. Ich hab die Variablen MA1 - MA5 in der $config.dat angelegt und kann sie mittels VarProxy beschreiben. DAS MasterSlave.src greift auf die globalen Variablen zu. Daher passiert nichts im SPS.sub. Du meinst ich muss eine Synchronisierung zwischen dem schreibenden Python-Scritp und dem lesenden Roboter aufbauen? 
  • gefĂ€llt mir    Danke

22. November 2018, 13:06:55
Antwort #3
Offline

Hahni85


Hallo,
du musst natĂŒrlich sowas einbauen wie einen Handshake zwischen deinem Hauptprogramm und der Schnittstelle.Du hattest jetzt immer ein zeitliches Problem. Du hast deine SlavePos beschrieben da stand noch gar nicht in allen MA`s was drin. 
Rein theoretisch muss du mit deinem Varproxy noch eine Variable machen die meldet neue Daten bereit. Das heisst du hast alle uebergeben.
Wenn das Signal kommt machst du dein beschreiben der SlavePos und wenn das durchgelaufen ist setzt du eine weiter lokale Variable, die dann wiederum abgefragt wird um den Fahrbefehl zu starten. Diese lokale Variable setzt du nach dem Bewegungsbefehl gleich wieder auf False. 
Noch besser ist es dieses beschreiben der SlavePos im Sub zu machen und im SRC eine If wenn das erfolgt ist, dann Fahrbefehl.
Kannst alles schön mit kleinen UPs machen.
VG
  • gefĂ€llt mir    Danke

22. November 2018, 16:15:39
Antwort #4
Offline

newbiemechatronic


Ich hab jetzt probiert einen Handshake mit zwei zusĂ€tzlichen Variablen einzubauen, aber der Roboter bewegt immer noch eine Achse nach der anderen. EingefĂŒhrt habe ich die Variablen  MWriting (Master schreibt) und SMoving (Slave bewegt sich). Im KUKA Programm ĂŒberprĂŒfe ich ob der Master Schreibt. Wenn nicht geschrieben wird. Setze ich SMoving auf TRUE und sperre damit jede weiteren Schreibbefehl. Dann lese ich die Achsen aus und bewege mich. Sobald der Robi fertig ist wird SMoving auf FALSE gesetzt. Der KRL Code dafĂŒr sieht vollgendermaßen aus.

DEF MasterSlave( )
SPTP HOME Vel=15 % DEFAULT ;
LOOP
IF (MWriting == FALSE) THEN
SMoving = TRUE
SlavePos.A1 = MA1
SlavePos.A2 = MA2
SlavePos.A3 = MA3
SlavePos.A4 = MA4
SlavePos.A5 = MA5
SPTP SlavePos
SMOVING = FALSE
ENDIF
ENDLOOP
SPTP HOME Vel=15 % DEFAULT

In Python hab ich natĂŒrlich auch den Handshake eingebaut :
flag = robot.read("SMoving")
        
if flag == 'FALSE':
    robot.write("MWriting", True)
    robot.write("MA1",A_1)
    robot.write("MA2",A_2)
    robot.write("MA3",A_3)
    robot.write("MA4",A_4)
    robot.write("MA5",A_5)
    robot.write("MWriting", False)
Die Daten werden nach wie vor ĂŒbertragen, die Achsbewegungen finden nur nacheinander statt.
  • gefĂ€llt mir    Danke

Heute um 03:53:43
Antwort #5

Werbung

Gast

22. November 2018, 16:41:49
Antwort #5
Offline

newbiemechatronic


Ich hab den Fehler gerade gefunden. Anscheinend benötigt man eine Wartezeit sowohl im Python Script als auch im KUKA Programm bevor man den Handshake abschließt.Wenn man vor "[font="dejavu sans mono", monaco, "lucida console", "courier new", monospace]SMOVING = FALSE[/font]" und "[font="dejavu sans mono", monaco, "lucida console", "courier new", monospace]robot.write("MWriting", FALSE)[/font]" jeweils eine Pause einbaut, funktioniert das Programm wie gewĂŒnscht und er bewegt mehrere Achsen zusammen.
  • gefĂ€llt mir    Danke

22. November 2018, 17:14:23
Antwort #6
Offline

Programmiersklave


Aber auch nur zufĂ€llig, weil Du die Wahrscheinlichkeit drastisch erhöhst, dass der eine dem anderen nicht in die Schleife grĂ€tscht. Ein Handshake ist das nĂ€mlich nicht. 
"Roll" deine Ketten innerhalb der Schleife mal, dann wirst Du feststellen, dass SMOVING=FALSE und SMOVING=TRUE zeitlich unmittelbar aufeinanderfolgen. Klar, da kann man jetzt eine Pause reindengeln und hoffen, dass der andere Partner immer in die Pause schießt - wird er aber nicht. 
 
FĂŒr einen Handshake brĂ€uchtest Du mehr. p: "Solang du fĂ€hrst, mache ich nix, aber wenn du fertig bist mit fahren, dann warte mal - ich hab da was" - r: "okay, verstanden, ich höre jetzt, gibs mir" - p: "so, jetzt hast du alles, kannst loslegen" - r: "okay, ich leg jetzt los" - p: von vorne....

Mag fĂŒr Dich gerade pragmatisch egal sein, aber besser ist es, sich gleich ĂŒber solche Probleme bewusst zu werden. Diese Fehlannahmen zu Interaktionen zwischen mehreren Tasks sind nĂ€mlich, generalisiert, die berĂŒhmten FĂ€lle, in denen man wochenlang auf der Baustelle verbringt, weil undefiniert zweimal tĂ€glich irgendwas knallt, was zwischendurch 42000 mal klappt. Sei gewarnt. 

GrĂŒĂŸe,
Michael
  • gefĂ€llt mir    Danke

22. November 2018, 21:15:52
Antwort #7
Offline

newbiemechatronic


Zitat
Aber auch nur zufĂ€llig, weil Du die Wahrscheinlichkeit drastisch erhöhst, dass der eine dem anderen nicht in die Schleife grĂ€tscht. Ein Handshake ist das nĂ€mlich nicht. 
@Programmiersklave: Vielen Dank fĂŒr das Feedback. Ich hab mir deinen Rat jetzt nochmal angeschaut und daraufhin die beiden Programme nochmals von neuem ĂŒberarbeitet. Mit dem Python Code werde ich hier aber nicht quĂ€len, da es dafĂŒr andere Orte gibt. Nur zum KRL Code hĂ€tte ich noch ein paar Fragen. Ich habe den Code in der Loop einmal in zwei Bereiche geteilt. Einmal ist keine neue Information vom Master erhĂ€ltlich, heißt folglich, ich muss keine neuen Werte lesen und kann mich bewegen. Ist Available gesetzt so warte ich bis MWriting einmal True gesetzt wird. Danach wird gewartet, dass MWriting wieder False wird. Jetzt mĂŒsste sichergestellt sein, dass der Master die Daten vollstĂ€ndig geschrieben hat. Danach ließt der Robi gleich einmal die neuen Werte ein und setzt ein Signal, dass er die neu eingelesene werte noch nicht abgearbeitet hat. Jetzt VerfĂ€hrt der Roboter und meldet anschließend wieder, dass alles abgearbeitet wurde. 


PTP  HOME

LOOP

IF (MAvailable == FALSE) THEN
SMoving = TRUE
SPTP SlavePos
WAIT SEC 0.1
SMoving = FALSE
SWorking = FALSE

ELSE
WAIT FOR(MWriting == TRUE)
WAIT FOR(MWriting == FALSE)
SlavePos.A1 = MA1
SlavePos.A2 = MA2
SlavePos.A3 = MA3
SlavePos.A4 = MA4
SlavePos.A5 = MA5
SWorking = TRUE

ENDIF
ENDLOOP

PTP  HOME
  
Ich hoffe ich habe deine Anregungen richtig interpretiert und auch in einer Form umgesetzt, bei der man nicht ewig den Fehler suchen muss, weil "irgendwas knall".
GrĂŒĂŸe
Bernhard
  • gefĂ€llt mir    Danke

23. November 2018, 11:23:26
Antwort #8
Offline

Programmiersklave


Hallo Bernhard,

sieht nun eindeutiger aus, was "Master" und "Slave" angeht, kann mich jetzt nicht in Details hÀngen.

Das Problem zieht sich generell subtil durch alle Bereiche, wo mehrere unabhÀngige serielle ProgrammablÀufe miteinander agieren und Daten und Signale austauschen. Im extremsten Fall kommt es dann sogar vor, dass beide Parteien gleichzeitig den Sperrmerker des anderen abfragen, keine Sperre sehen, und dann gleichzeitig in der folgenden Anweisung den eigenen Sperrmerker setzen. Wenn dann noch eine IO-Karte mit 20 ms Pollrate involviert ist....

GrĂŒĂŸe,
Michael
  • gefĂ€llt mir    Danke

Heute um 03:53:43
Antwort #9

Werbung

Gast

29. November 2018, 07:47:00
Antwort #9
Offline

DerWerner


Hallo newbiemechatronic,
der zweite Teil deiner Frage (die VerÀnderung der Verfahrgeschwindigkeit) ging glaube ich etwas unter. Falls du es mittlerweile nicht selbst rausbekommen hast:
BAS (#VEL_PTP, X) wobei "X" fĂŒr die prozentuale Verfahrgeschwindigkeit steht.
GrĂŒĂŸe
DerWerner
  • gefĂ€llt mir    Danke

03. Dezember 2018, 09:29:34
Antwort #10
Offline

newbiemechatronic


Hallo DerWerner,
Vielen Dank fĂŒr den Tipp mit der Verfahrgeschwindigkeit.
GrĂŒĂŸe
newbie
  • gefĂ€llt mir    Danke


Teile per facebook Teile per linkedin Teile per pinterest Teile per reddit Teile per twitter
 

ĂŒber das Roboterforum

Nutzungsbedingungen Impressum DatenschutzerklÀrung

Sponsoren des Roboterforums

ROBTEC GmbH