Guten morgen,
ich möchte die $Axis_Act.A1 - A6 sowie $Axis_Act.E1 - E6 an eine Doppelwort Variable von der Übergeordneten SPS übergeben um dies dann auf der HMI darzustellen. Wie kann ich das übergeben im Verschachtelungs Editor von Work Visual lassen sich systemvariablen nicht verschachteln.
Achs Ist Koordinaten an übergeordnete Steuerung
- Frozen1909
- Erledigt
-
-
Das geht so nicht, da muss man ein klein wenig programmtechnisch nachhelfen.
Man gibt die Achswerte im SPS.Sub auf die entsprechenden Ausgänge aus. -
Hallo,
Ich habe das mal in der .dat Datei so deklariertCode
Alles anzeigen&ACCESS RVO1 &REL 31 &PARAM EDITMASK = * &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe DEFDAT Send_Axis_Act PUBLIC ;Definition Variablen GLOBAL INT AxisAct[12] ;Definition der Signalverknuepfungen (anpassbar) GLOBAL SIGNAL AxisActA1 $OUT[145] TO $OUT[176] GLOBAL SIGNAL AxisActA2 $OUT[177] TO $OUT[208] GLOBAL SIGNAL AxisActA3 $OUT[209] TO $OUT[240] GLOBAL SIGNAL AxisActA4 $OUT[241] TO $OUT[272] GLOBAL SIGNAL AxisActA5 $OUT[273] TO $OUT[304] GLOBAL SIGNAL AxisActA6 $OUT[305] TO $OUT[336] GLOBAL SIGNAL AxisActE1 $OUT[337] TO $OUT[368] GLOBAL SIGNAL AxisActE2 $OUT[369] TO $OUT[400] GLOBAL SIGNAL AxisActE3 $OUT[401] TO $OUT[432] GLOBAL SIGNAL AxisActE4 $OUT[433] TO $OUT[464] GLOBAL SIGNAL AxisActE5 $OUT[465] TO $OUT[496] GLOBAL SIGNAL AxisActE6 $OUT[497] TO $OUT[528] ENDDAT
und in der .src datei dann die übergabeCode
Alles anzeigen&ACCESS RVO1 &REL 31 &PARAM EDITMASK = * &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe DEF Send_Axis_Act( ) ;Achswerte von Systemvariable * 1000 multiplizieren und zwischenspeichern ;Zwischengespeicherte Achswerte ueber die Signalverknuepfungen auf den Feldbus schreiben AxisAct[1] = $AXIS_ACT.A1 * 10 AxisActA1 = AxisAct[1] AxisAct[2] = $AXIS_ACT.A2 * 10 AxisActA2 = AxisAct[2] AxisAct[3] = $AXIS_ACT.A3 * 10 AxisActA3 = AxisAct[3] AxisAct[4] = $AXIS_ACT.A4 * 10 AxisActA4 = AxisAct[4] AxisAct[5] = $AXIS_ACT.A5 * 10 AxisActA5 = AxisAct[5] AxisAct[6] = $AXIS_ACT.A6 * 10 AxisActA6 = AxisAct[6] AxisAct[7] = $AXIS_ACT.E1 * 10 AxisActE1 = AxisAct[7] AxisAct[8] = $AXIS_ACT.E2 * 10 AxisActE2 = AxisAct[8] AxisAct[9] = $AXIS_ACT.E3 * 10 AxisActE3 = AxisAct[9] AxisAct[10] = $AXIS_ACT.E4 * 10 AxisActE4 = AxisAct[10] AxisAct[11] = $AXIS_ACT.E5 * 10 AxisActE5 = AxisAct[11] AxisAct[12] = $AXIS_ACT.E6 * 10 AxisActE6 = AxisAct[12] END
von den A1...A6 bekomm ich eine Real wert auf den SPS Eingang angezeigt doch von E1...E6 nicht.
Dann noch wie kann ich den eingehenden Real wert von den A1 ... A6 in grad umformen bzw. E1...E3 für xyz in mm und E4..E6 für ABC in Grad.
Die .src Datei wird dann in der SPS.sub aufgerufen. -
$axis_act.x beinhaltet den aktuellen Achsenwert.
- Rotierend definierte Achsen in Grad
- Lineare Achsen in Millimeter.
A1-A6 sind normalerweise Roboterachsen, bei Standard-Robis normalerweise rotierend definiert (Ausser Scara's)
E1-E6 externe Achsen. (Verfahrachsen normalerweise Linear, Drehtische rotierend definiert)
Hast Du externe Achsen an Deinem System? Wäre ein Grund für keinen Wert bei E1-E6.
Was Du jetzt umformen willst,mit den E-Werten verstehe ich nicht. Kannste mal genau erläutern?Gruss SJX
-
Hallo SJX
Externe Achsen verwende ich keine bei meinen Robotern. Ich habe gedacht E1 – E6 definiert die Achsen X Y Z und A B C.
Ich möchte die X Y Z Werte in mm, A B C in Grad und A1 – A6 in Grad.
Wie kann ich das mit $axis_act.x am besten machen finde in der Kuka Systemvariablen Dokumentation über diese Systemvariable eine Beschreibung. -
Hallo Frozen1909,
$pos_act ist dein Freund. Liefert Werte bezogen auf aktuelles Tool /Base.
Gibt diverse Posts darüber.
Schau mal hier:
https://www.roboterforum.de/ro…2/10282/msg49143#msg49143
Auch gleich mit der Problematik, wenn kein Tool aktiv.
Gruss SJX -
Hallo SJX
Ich habe den Post zu dem Thema gelesen und das ganze jetzt so probiert aufzubauen:
in der dat Datei SPS Signale:Code
Alles anzeigen&ACCESS RVO1 &REL 31 &PARAM EDITMASK = * &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe DEFDAT Send_Pos_Act PUBLIC ;Definition der Signalverknuepfungen (anpassbar) GLOBAL SIGNAL POZActX $OUT[337] TO $OUT[368] GLOBAL SIGNAL POZActY $OUT[369] TO $OUT[400] GLOBAL SIGNAL POZActZ $OUT[401] TO $OUT[432] GLOBAL SIGNAL POZActA $OUT[433] TO $OUT[464] GLOBAL SIGNAL POZActB $OUT[465] TO $OUT[496] GLOBAL SIGNAL POZActC $OUT[497] TO $OUT[528] ENDDAT
und in der src datei:Code
Alles anzeigen&ACCESS RVO1 &REL 31 &PARAM EDITMASK = * &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe DEF Send_Pos_Act( ) DECL POS AKT_POZ ON_ERROR_PROCEED AKT_POZ=$POS_ACT IF $ERR.NUMBER == 0 THEN ;Übergabe der Achs Position an SPS POZActX = $POS_ACT.X POZActY = $POS_ACT.Y POZActZ = $POS_ACT.Z POZActA = $POS_ACT.A POZActB = $POS_ACT.B POZActC = $POS_ACT.C ELSE ;Wert fuer Tool ungueltig, wenn kein Tool POZActX=123456 POZActY=123456 POZActZ=123456 POZActA=123456 POZActB=123456 POZActC=123456 ERR_CLEAR($ERR) ENDIF END
und in der sps.sub die src Datei dann aufgerufen.
Jetzt bekomm ich große real Werte auf die Eingangsdoppelwörter. Sprich das was auf dem Smart Pad in der Istposition steht stimmt nicht mit dem überein. Woran könnte das liegen?
LG
Frozen -
Hallo,
Siemens SPS?
Wenn ja High/Low Byte drehen im Wort.
auf SPS Seite einfach Eingangswort nur mit TAD drehen
Gruß LoipeBTW ist nicht real Nachkommastellen werden abgeschnitten. Schreib auf den Gruppenausgang die Komponente von Pos_akt * 10 dann hst du es in der SPS in Zehntel mm und auf SPS Seite wieder /10
-
Danke Loipe,
das hat funktioniert
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen