External Axis and External Machine Mechanical Units and ExtAx

I have this setup: One ABB robot (6-axes) with an linear external axis and a TurnTable with 1 axis (connected to ABB's controller). Robot and linear external axis are on MechanicalUnit1 (MCU1), and Turntable on MCU2.

My question is how am I supposed to read the Position of such machines. Essentially I want to know where does the TT position is. When I do getPosition()  on MCU1, I would get RobAx=(x,x,x,x,x,x) and ExtAx=(x,g,g,g,g,g) (where x is data, and g is garbage values). When I ready MCU2, am I supposed to get RobAx=(g,g,g,g,g,g) and ExtAx=(g,x,g,g,g,g) (or ExtAx=(x,g,g,g,g,g))?

In other words, the values of RobAx and ExtAx no matter the distribution of MCUs, do they ever overlap, or they each take an independent position in the ExtAx variable (but only filled when the variable correspond to that particular MCU)?

In the case for instance of a robot with 2 external axes and two independent machines, how would be the setup. Would it be, MCU1 for the robot with 2 ext axes, MCU2 for machine1 and MCU3 for machine2? Then would the variables be:
MCU1 -> RobAx=(x,x,x,x,x,x) and ExtAx=(x,x,g,g,g,g)
MCU2 -> RobAx=(g,g,g,g,g,g) and ExtAx=(g,g,x,g,g,g)
MCU3 -> RobAx=(g,g,g,g,g,g) and ExtAx=(g,g,g,x,g,g)?

I have a software that wants to communicate flexibly to many different setups, so some extra questions:
  1. When do external axis go into independent Mechanical Units? In other words, why is the external linear axis on the same Mechanical Unit as the robot but not the turntable? Is it possible to have them all in one MCU or all in separate MCUs?
  2. Can I simulate MCUs of a TT in RoboStudio?
Thanks for your time!!

Answers

  • Tompanhuhu
    Tompanhuhu Sweden
    I will try to answer your questions.
    1. 
    If a external axis is in a seperate task or belongs as external axis in robottask has to do with Mechanical Unit Groups.
    If you go to system parameters -> Controller -> Mechanical Unit Group you can add the external axis to the robottask.
    But then they won't be able to move without a move instruction in the robottask.
    If you put them i separate MechUnitGroups they can be controlled by different task's. 
    I have a cell with 2 robots and a turntable, my setup looks like this.
     


    Then in the task option you specify what motion group the motion task controls.



    2.
    It's fully possible to simulate external axis with robotstudio.
    Here is a screenshot of the simulation cell the parameter screenshot's come from.

    The external axis in the middle controls a turntable with 4 stations.
    I had to remove the geometries because they belong to a customer, but you get the point.


    To setup external axis in robotstudio I use the addin "External Axis Wizard", you can download it from the Addin tab in robotstudio.

    First add libraries to the cell, robots and external axis from the ABB Library tab. 
    Second build a virtual controller with the robots you want to use.
    After that, click here to add the external axis to the controller that you created before. 


    Follow the wizard instruction and load the generated MOC file to the virtual controller.
    Then you can start jogging and control the external axis.

    I hope this helps you :smile: !
    Systemintegrator - Web / C# / Rapid / Robotstudio

    If I helped, please press Vote Up  :smile:
  • marc_cayuela
    marc_cayuela Barcelona
    It does help!

    So in theory, the only reason why you'd have different mechanical units is if you want to run each of the machines from different tasks. So even if the machines do not belong to the same kinematic structure they can belong to same mechanical units?

    I really appreciate your answer, but my question remains in how the outputs from the mechanical units look like. Using the PCSDK and the getPosition().

    Considering you setup, and that you have 3 mechanical units, I am even more confused on how the output of the getPosition() function would look like. Because what I have seen is that mechanical units seem to share the getPosition().RobAx and ExtAx...


  • Tompanhuhu
    Tompanhuhu Sweden
    Hi, sorry if I was unclear. 

    When you greate a mechanical unit group in the robotcontroller, you can select what mechanic is stored in what "slot" in the task. 

    If you look at the screenshot below.
    If you want to put your linear axis on ExtAx.a declare it in Mechanical unit 1 in the robotgroup. 
    If you want to put your turntable on ExtAx.b declare it in Mechanical unit 2 in the robotgroup.

    if you want your turntable in a seperate task so it can move independently, put it in it's own group and specifiy that group to a task.  


    In the SDK you can get the position for the current task.
    This then outputs the position for your task, if you have your turntable in a seperate task, you can get the position of that task.
    Class Task (robotstudio.com)

    There is an example in the documentation. 

    Systemintegrator - Web / C# / Rapid / Robotstudio

    If I helped, please press Vote Up  :smile:
  • marc_cayuela
    marc_cayuela Barcelona
    No! Don't be sorry, you are helping me a lot already! Thanks for your answers I will owe you a beer someday!

    If I might ask one small follow-up.

    If like in the example you propose. If MCU1 has a robot with a double linear axis, then the values would go to ExtAx.a and ExtAx.b. And if MCU2 is a part holder with 2 axes it would go to ExtAx.c and ExtAx.d?

    So essentially the values in ExtAx are filled sequentially by the order of the mechanical units?

    Therefore, you cannot configure MCU1 to fill ExtAx.c and ExtAx.d and MCU2 ExtAx.a and ExtAc.b, right?
  • Tompanhuhu
    Tompanhuhu Sweden
    No! Don't be sorry, you are helping me a lot already! Thanks for your answers I will owe you a beer someday!

    If I might ask one small follow-up.

    If like in the example you propose. If MCU1 has a robot with a double linear axis, then the values would go to ExtAx.a and ExtAx.b. And if MCU2 is a part holder with 2 axes it would go to ExtAx.c and ExtAx.d?

    So essentially the values in ExtAx are filled sequentially by the order of the mechanical units?

    Therefore, you cannot configure MCU1 to fill ExtAx.c and ExtAx.d and MCU2 ExtAx.a and ExtAc.b, right?

    If I understand your question correctly, you don't have to fill your ExtAx values from A and upwards.
    You can start where ever you want.

    If you just get ExtAx=(g,x,g,g,g,g) instead of ExtAx=(x,g,g,g,g,g).

    Also if you want to control 1 external axis with one task without a robot, you specifiy the unit in the "robot" field like my screenshot irbp1. Then that axis is avalible in AxtAx.A
    If you then want to add another external axis to the same task, you put that one in MechanicalUnit 2 to get the value at B (iirc) . I know it sounds a little confusing but it's pretty easy to get a grip off!
    Systemintegrator - Web / C# / Rapid / Robotstudio

    If I helped, please press Vote Up  :smile: