Search Results (Searched for: )
- jrc
- jrc
03 Oct 2025 10:31
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Category: EtherCAT
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-fbI 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.0The 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?
- jrc
- jrc
03 Oct 2025 10:19 - 03 Oct 2025 10:21
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Category: EtherCAT
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.
- rodw

03 Oct 2025 10:09
Replied by rodw on topic Looking for a specific, detailed howto guide for XYYZ gantry setup
Looking for a specific, detailed howto guide for XYYZ gantry setup
Category: Advanced Configuration
Everything about gantry machines is covered in the chapter titled homing configuration.
The key is to read it at least 8 times. Then one or two more times for good luck!
Limit switches should be outside of the normal operation envelope and should never be hit unless its an Oh Sh#t moment that causes the machine to go out of bounds
Shared home/limit switches require a home_offset to move the axis off the home switch so it does not trigger the limit switch as you come out of homing.
The key is to read it at least 8 times. Then one or two more times for good luck!
Limit switches should be outside of the normal operation envelope and should never be hit unless its an Oh Sh#t moment that causes the machine to go out of bounds
Shared home/limit switches require a home_offset to move the axis off the home switch so it does not trigger the limit switch as you come out of homing.
- rodw

03 Oct 2025 09:54
Replied by rodw on topic Any Fiber Laser Successes?
Any Fiber Laser Successes?
Category: Plasma & Laser
Monokrom is still a bit of a work in progress but the basics work. For you the advantage is its a qtpyvcp gui like probe basic so perhaps there is a case to use it. Plus you will need to do some customizing so a full featured plasma config is not really useful... Monokrom still uses the plasma real time component so it can do anything qtplasmac can do.Would Monokrom be a better choice since the customizability is similar to Probe Basic?
Time to create page: 0.848 seconds