Leadshine 2CS3E-D507 / Cia402 almost working - help please!

More
1 year 4 weeks ago #335768 by jrc
 Many thanks!That got it to work beautifully and I can now easily jog the motors etc., the machine e-stop and machine start buttons on the screen work etc.

However, this was done with each motor associated with an axis (X, Y, Z), and what I am ultimately aiming for is to get the steppers on the 2CS3E-D507 to drive joints in a carousel instead of axis in a coordinate system, so they need to be "joints without an associated axis letter" and still work.

How does one achieve this?

The existing working config has a dual-axis 2CS3E-D507 driving X and Y, and a second 2CS3E-D507 driving Z, with one spare motor left.

I tried setting that one up as a new "joint without associated axis" [JOINT_3] in the config, and this caused it to stop working again.The updated hal file using the spare stepper as an extra joint is:
Code:
loadrt [KINS]KINEMATICS loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=4 loadusr -W lcec_conf ethercat-conf.xml loadrt lcec loadrt cia402 count=4 addf lcec.read-all            servo-thread addf cia402.0.read-all        servo-thread addf cia402.1.read-all        servo-thread addf cia402.2.read-all        servo-thread addf cia402.3.read-all        servo-thread addf motion-command-handler   servo-thread addf motion-controller        servo-thread addf cia402.0.write-all       servo-thread addf cia402.1.write-all       servo-thread addf cia402.2.write-all       servo-thread addf cia402.3.write-all       servo-thread addf lcec.write-all           servo-thread #******************* #  X axis  lcec.0.0 arm (x) cia402.0 joint.0 (y) lcec.0.0 cia402.1 joint.1 z lcec.0.1 cia402.1 joint 2 #******************* setp cia402.0.enable 1 setp cia402.0.csp-mode 1 setp cia402.0.pos-scale 4000 # ethercat to cia402 driver net x-statusword      lcec.0.0.srv-1-cia-statusword  => cia402.0.statusword net x-opmode-display  lcec.0.0.srv-1-opmode-display  => cia402.0.opmode-display net x-drv-act-pos     lcec.0.0.srv-1-actual-position => cia402.0.drv-actual-position net x-drv-act-vel     lcec.0.0.srv-1-actual-velocity => cia402.0.drv-actual-velocity # cia402 driver to ethercat net x-controlword         cia402.0.controlword         => lcec.0.0.srv-1-cia-controlword net x-modes-of-operation  cia402.0.opmode              => lcec.0.0.srv-1-opmode net x-drv-target-pos      cia402.0.drv-target-position => lcec.0.0.srv-1-target-position #from motion to cia net x-enable    <= joint.0.amp-enable-out => cia402.0.enable net x-amp-fault => joint.0.amp-fault-in   <= cia402.0.drv-fault net x-pos-cmd   <= joint.0.motor-pos-cmd  => cia402.0.pos-cmd net x-pos-fb    => joint.0.motor-pos-fb   <= cia402.0.pos-fb ## Y axis ## setp cia402.1.enable 1 setp cia402.1.csp-mode 1 setp cia402.1.pos-scale 4000 # ethercat to cia402 driver net y-statusword      lcec.0.0.srv-2-cia-statusword  => cia402.1.statusword net y-opmode-display  lcec.0.0.srv-2-opmode-display  => cia402.1.opmode-display net y-drv-act-pos     lcec.0.0.srv-2-actual-position => cia402.1.drv-actual-position net y-drv-act-vel     lcec.0.0.srv-2-actual-velocity => cia402.1.drv-actual-velocity # cia402 driver to ethercat net y-controlword         cia402.1.controlword         => lcec.0.0.srv-2-cia-controlword net y-modes-of-operation  cia402.1.opmode              => lcec.0.0.srv-2-opmode net y-drv-target-pos      cia402.1.drv-target-position => lcec.0.0.srv-2-target-position #from motion to cia net y-enable    <= joint.1.amp-enable-out => cia402.1.enable net y-amp-fault => joint.1.amp-fault-in   <= cia402.1.drv-fault net y-pos-cmd   <= joint.1.motor-pos-cmd  => cia402.1.pos-cmd net y-pos-fb    => joint.1.motor-pos-fb   <= cia402.1.pos-fb ## Z axis ## setp cia402.2.enable 1 setp cia402.2.csp-mode 1 setp cia402.2.pos-scale 4000 # ethercat to cia402 driver net z-statusword      lcec.0.1.srv-1-cia-statusword  => cia402.2.statusword net z-opmode-display  lcec.0.1.srv-1-opmode-display  => cia402.2.opmode-display net z-drv-act-pos     lcec.0.1.srv-1-actual-position => cia402.2.drv-actual-position net z-drv-act-vel     lcec.0.1.srv-1-actual-velocity => cia402.2.drv-actual-velocity # cia402 driver to ethercat net z-controlword         cia402.2.controlword         => lcec.0.1.srv-1-cia-controlword net z-modes-of-operation  cia402.2.opmode              => lcec.0.1.srv-1-opmode net z-drv-target-pos      cia402.2.drv-target-position => lcec.0.1.srv-1-target-position #from motion to cia net z-enable    <= joint.2.amp-enable-out => cia402.2.enable net z-amp-fault => joint.2.amp-fault-in   <= cia402.2.drv-fault net z-pos-cmd   <= joint.2.motor-pos-cmd  => cia402.2.pos-cmd net z-pos-fb    => joint.2.motor-pos-fb   <= cia402.2.pos-fb ## extra joint with no associated axis (for later use in carousel)## setp cia402.3.enable 1 setp cia402.3.csp-mode 1 setp cia402.3.pos-scale 4000 # ethercat to cia402 driver net extra-statusword      lcec.0.1.srv-2-cia-statusword  => cia402.3.statusword net extra-opmode-display  lcec.0.1.srv-2-opmode-display  => cia402.3.opmode-display net extra-drv-act-pos     lcec.0.1.srv-2-actual-position => cia402.3.drv-actual-position net extra-drv-act-vel     lcec.0.1.srv-2-actual-velocity => cia402.3.drv-actual-velocity # cia402 driver to ethercat net extra-controlword         cia402.3.controlword         => lcec.0.1.srv-2-cia-controlword net extra-modes-of-operation  cia402.3.opmode              => lcec.0.1.srv-2-opmode net extra-drv-target-pos      cia402.3.drv-target-position => lcec.0.1.srv-2-target-position #from motion to cia net extra-enable    <= joint.3.amp-enable-out => cia402.3.enable net extra-amp-fault => joint.3.amp-fault-in   <= cia402.3.drv-fault net extra-pos-cmd   <= joint.3.motor-pos-cmd  => cia402.3.pos-cmd net extra-pos-fb    => joint.3.motor-pos-fb   <= cia402.3.pos-fb

I basically added an extra copy of the z axis cia402 bits and replaced "z" with "extra" and cia402.2 with cia402.3

The ini file with the extra "joint with no axis letter name" is
Code:
[EMC] MACHINE = machine_xyz VERSION = 1.1 DEBUG=0x00000242 [DISPLAY] DISPLAY = axis MAX_LINEAR_VELOCITY = 1 [TASK] TASK = milltask CYCLE_TIME = 0.001 [RS274NGC] PARAMETER_FILE = machine_xy.var [EMCIO] EMCIO = io CYCLE_TIME = 0.100 [EMCMOT] EMCMOT = motmod SERVO_PERIOD = 1000000 [HAL] HALFILE = 2CS3E_D507xyz.hal # NOTE: Must have consistent values for # [TRAJ]COORDINATES = LETTERS # [KINS]JOINTS      = Number_of_JOINTs # [KINS]KINEMAITICS = trivkins coordinates=LETTERS [TRAJ] COORDINATES = XYZ LINEAR_UNITS = mm ANGULAR_UNITS = degree DEFAULT_LINEAR_VELOCITY = 2.50 MAX_LINEAR_VELOCITY = 25.00 [KINS] JOINTS = 4 KINEMATICS = trivkins coordinates=XYZ #*** AXIS_X ******************************* [AXIS_X] MAX_VELOCITY = 50.0 MAX_ACCELERATION = 750.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 [JOINT_0] TYPE = LINEAR HOME = 0.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0 #*** AXIS_Y ******************************* [AXIS_Y] MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 [JOINT_1] TYPE = LINEAR HOME = 0.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0 #*** AXIS_Z ******************************* [AXIS_Z] MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 [JOINT_2] TYPE = LINEAR HOME = 0.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0 [JOINT_3] TYPE = LINEAR HOME = 0.0 MIN_LIMIT = -300.0 MAX_LIMIT = 300.0 MAX_VELOCITY = 25.0 MAX_ACCELERATION = 750.0

The reason for wanting a pure joint instead of a joint linked to an axis is that that is supposed to be the preferable way to drive the carousel component (as opposed to repurposing unused axis letters, eg. out of XZYABC recycling the B and C to drive the carousel if you only have a 4 axis machine.

However, when I add this extra joint the previously working 3 axis (XYZ) system fails to start. The error might be hinting at a mismatch between the number of joints and axes:

Traceback (most recent call last):
  File "/usr/bin/axis", line 3655, in <module>
    ja_id = aletter_for_jnum(jnum)
            ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/bin/axis", line 3642, in aletter_for_jnum
    return trivkinscoords.upper()[jnum]
           ~~~~~~~~~~~~~~~~~~~~~~^^^^^^
IndexError: string index out of range

Any ideas on what could be going on?
 

Please Log in to join the conversation.

More
1 year 4 weeks ago #335769 by jrc
The complete error file is attached here

Please Log in to join the conversation.

More
1 year 3 weeks ago #335783 by Hakan
You have something called extrajoints, maybe that is what you are looking for?
linuxcnc.org/docs/html/man/man9/motion.9.html

Hopefully someone that knows how to work with carousels can jump in.

Please Log in to join the conversation.

Time to create page: 0.858 seconds
Powered by Kunena Forum