Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Control 3 Positioners as A7, A8, A9

#1
Hey team!

I need some help setting up 3 positioners to be controlled from my Comau robot A7, A8, A9.

I've been playing around with the configuration and reading other forum posts (like this one) to set up the mechanisms but have had little success. The only way I can define all 3 positioners is with one of the positioners linked to A7, and the other two as standalone positioners (essentially an A1 each). 

This works fine inside the RoboDK simulation, and I have created python scripts to manipulate the positioners as expected. However, the problem is when I generate the robot program.

Any control command (move just robot, move robot & positioners, move just positioners) is generated as a move robot command with 7 axes. 
E.g.   MOVE TO {A1, A2, A3, A4, A5, A6, E1} 

This means that trying to move just the robot will also move the positioner in E1. 
E.g. my MoveRobotHome.py is exported with the following move command.
      MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} 
      robot is moved to home AND positioner 1 is moved to 90 deg

Similarly, when I try to move just positioner A8 or A9 it will generate it as essentially just an A1 move
E.g. MovePositioner2(90) is exported with the following move command.
      MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000}
      This moves A1 to 90 and all other joints (including positioner 1 in A7) to 0, instead of just positioner 2 to 90 deg.

I need to be able to export my move commands with all axes by defining the positioners as A7, A8 and A9 inside RoboDK so the exported move commands are:
   MOVE TO {A1, A2, A3, A4, A5, A6, E1, E2, E3} 

Any ideas?

I am using RoboDK v5.7.4
Robot: Comau S-13
Post Processor: Comau C5G

See below raw script dump. This script should move robot to home, then positioners 2 and 3 to home, then positioner 1.
MoveToStation1.py

Code:
# You can also use the new version of the API:
from robodk import robolink    # RoboDK API
from robodk import robomath    # Robot toolbox
RDK = robolink.Robolink()



# ----------------- move robot to home -----------------

# get comau robodk
comau = RDK.Item('Comau S-13', robolink.ITEM_TYPE_ROBOT)

# check comau is valid
if not comau.Valid():
    raise Exception("Could not find JIG 1")

# set speed
comau.setSpeed(-1, 30, -1, -1)  # 30 deg/s joint speed

# initialise joints
joints_comau = comau.Joints()

# update joints to home position
joints_comau[0] = 0
joints_comau[1] = -60
joints_comau[2] = -110
joints_comau[3] = 0
joints_comau[4] = 90
joints_comau[5] = 0

# move to joints
comau.MoveJ(joints_comau)

# ------------------------------------------------------



# --------------------- move JIG 1 ---------------------

# get jig1 robodk
jig_1 = RDK.Item('JIG1', robolink.ITEM_TYPE_ROBOT)

# check jig1 is valid
if not jig_1.Valid():
    raise Exception("Could not find JIG 1")

# set speed
jig_1.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed

# initialise joints
joints_jig1 = jig_1.Joints()

# update jig1 target angle
joints_jig1[0] = 90

# move to target angle
jig_1.MoveJ(joints_jig1)

# ------------------------------------------------------



# --------------------- move JIG 2 ---------------------

# get jig2 robodk
jig_2 = RDK.Item('JIG2', robolink.ITEM_TYPE_ROBOT)

# check jig2 is valid
if not jig_2.Valid():
    raise Exception("Could not find JIG 2")

# set speed
jig_2.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed

# initialise joints
joints_jig2 = jig_2.Joints()

# update jig2 target angle
joints_jig2[0] = 90

# move to target angle
jig_2.MoveJ(joints_jig2)

# ------------------------------------------------------



# -------------------- move JIG MAIN -------------------

# get main jig robodk
jig_main = RDK.Item('MAIN JIG', robolink.ITEM_TYPE_ROBOT)

# check main jig is valid
if not jig_main.Valid():
    raise Exception("Could not find MAIN JIG")

# set speed
jig_main.setSpeed(-1, 10, -1, -1)  # 20 deg/s rotation speed

# initialise joints
joints_jigmain = jig_main.Joints()

# update jig main target angle
joints_jigmain[0] = 0

# move to target angle
jig_main.MoveJ(joints_jigmain)

# ------------------------------------------------------

Comau output

Code:
PROGRAM MoveToStation1
VAR
ROUTINE R_MoveToStation1 EXPORTED FROM MoveToStation1 GLOBAL

ROUTINE R_MoveToStation1
VAR
BEGIN
  $ORNT_TYPE := RS_WORLD
  $MOVE_TYPE := JOINT
  $JNT_MTURN := TRUE
  $CNFG_CARE := TRUE
  $TURN_CARE := TRUE
  $SING_CARE := FALSE
  $TERM_TYPE := NOSETTLE
  $FLY_TYPE := FLY_CART
  $FLY_TRAJ := FLY_PASS
  $FLY_DIST := -1.000
  $STRESS_PER:= 65
  -- Program generated by RoboDK v5.7.4 for Comau S-13 on 11/03/2026 12:35:30
  $ROT_SPD := 0.524
  $UFRAME := POS(-62.0000, -140.0000, -2000.0000, -90.0000, 90.0000, 0.0000, '')
  $TOOL := POS(0.0000, 0.0000, 510.0000, -104.9996, 120.0002, 150.0002, '')
  MOVE TO {0.00000,-60.00000,-110.00000,0.00000,90.00000,0.00000,90.00000} -- move COMAU only
  $ROT_SPD := 0.175
  $UFRAME := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')
  $TOOL := POS(0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '')
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG1 only
  $ROT_SPD := 0.175
  MOVE TO {90.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move JIG2 only
  $ROT_SPD := 0.175
  MOVE TO {0.00000,0.00000,0.00000,0.00000,0.00000,0.00000,0.00000} -- move MAIN JIG only
END R_MoveToStation1

BEGIN
  R_MoveToStation1
END MoveToStation1


Attached Files Thumbnail(s)
Screenshot 2026-03-12 085123.png   
#2
You need to modify the pos_2_str postprocessor function in such a way as to take into account the positioner axis values, which are defined as separate mechanisms.

Also, you could create two separate stations for each of the work sides. This may simplify the task of modifying the postprocessor and allow you to calibrate each side separately.

Please contact our technical support for more details.
  




Users browsing this thread:
1 Guest(s)