- Configuring LinuxCNC
- Advanced Configuration
- EtherCAT
- Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Leadshine 2CS3E-D507 / Cia402 almost working - help please!
- jrc
- Away
- New Member
-
Less
More
- Posts: 11
- Thank you received: 1
03 Oct 2025 10:31 #335768
by jrc
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
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:
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
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?
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:
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
[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 or Create an account to join the conversation.
- jrc
- Away
- New Member
-
Less
More
- Posts: 11
- Thank you received: 1
03 Oct 2025 10:33 #335769
by jrc
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
The complete error file is attached here
Please Log in or Create an account to join the conversation.
- Hakan
- Offline
- Platinum Member
-
Less
More
- Posts: 901
- Thank you received: 315
03 Oct 2025 14:30 - 03 Oct 2025 14:33 #335783
by Hakan
Replied by Hakan on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
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.
linuxcnc.org/docs/html/man/man9/motion.9.html
Hopefully someone that knows how to work with carousels can jump in.
Last edit: 03 Oct 2025 14:33 by Hakan.
Please Log in or Create an account to join the conversation.
- Configuring LinuxCNC
- Advanced Configuration
- EtherCAT
- Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Time to create page: 0.153 seconds