- Posts: 13
- Thank you received: 1
Leadshine 2CS3E-D507 / Cia402 almost working - help please!
1 year 1 month ago #335645
by jrc
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
Many thanks! I am away today but will give it a try tomorrow and report back. I might also try making an even simpler test machine configuration with only xy coordinates, trivkins, drive by just one 2CS3E-D507 dual-stepper drive, This should hopefully be easier to debug due to having less confounding variables
Please Log in or Create an account to join the conversation.
1 year 1 month ago #335700
by jrc
Replied by jrc on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
I had a bit of time today to try things out.
I did as you suggested and commented out the line which includes the basic_sim.tcl line
This produced a different error - it was unable to add all the servo-thread entries
" HAL : ERROR: thread 'servo-thread' not found "
Looking into basic_sim.tcl I can find no instances of servo-thread.
However, basic_sim.tcl includes another file in line 33 called sim_lib.tcl
sim_lib.tcl has servo-thread appear in a lot of places
So it seems like some version of it is needed if we go the route of recycling one of the sim configs as a starting point
Any ideas on how to solve this one?
As a different possible solution, I created a different XYZ machine using two units of 2CS3E-D507, where the first one handles X and Y and the second handles Z. That way we start out totally away from the possible comlplications from the sim universe and directly go to a machine that only has two real, Ethercat devices,
This seems to load OK, but LinuxCNC starts up with the e-stop engaged and won't let me toggle it off.
The configs I created for this are:
ethercat-conf-xml:
machine_xyz.ini:
2CS3E_D507.hal
Any ideas on how to get this one to start? I tried to make it as basic as possible to avoid anything else distracting things.
To reiterate, it loads correctly and LinuxCNC starts without an error screen popping up, but the e-stop on the top left of the axis interface screen is toggled on when it starts and can't be toggled off.
ethercat slaves shows both 2CS3E-D507 slaves in OP state
I did as you suggested and commented out the line which includes the basic_sim.tcl line
This produced a different error - it was unable to add all the servo-thread entries
" HAL : ERROR: thread 'servo-thread' not found "
Looking into basic_sim.tcl I can find no instances of servo-thread.
However, basic_sim.tcl includes another file in line 33 called sim_lib.tcl
sim_lib.tcl has servo-thread appear in a lot of places
So it seems like some version of it is needed if we go the route of recycling one of the sim configs as a starting point
Any ideas on how to solve this one?
As a different possible solution, I created a different XYZ machine using two units of 2CS3E-D507, where the first one handles X and Y and the second handles Z. That way we start out totally away from the possible comlplications from the sim universe and directly go to a machine that only has two real, Ethercat devices,
This seems to load OK, but LinuxCNC starts up with the e-stop engaged and won't let me toggle it off.
The configs I created for this are:
ethercat-conf-xml:
Code:
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="-1">
<slave idx="0" type="2CS3E-D507">
<!-- <dcConf assignActivate="700" sync0Cycle="*1" sync0Shift="0" sync1Cycle="*1" sync1Shift="0"/> -->
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
</slave>
<slave idx="1" type="2CS3E-D507">
<!-- <dcConf assignActivate="700" sync0Cycle="*1" sync0Shift="0" sync1Cycle="*1" sync1Shift="0"/> -->
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
</slave>
</master>
</masters>
machine_xyz.ini:
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]
# NoneType object has no attribute 'rfind'
PARAMETER_FILE = machine_xyz.var
[EMCIO]
EMCIO = io
CYCLE_TIME = 0.100
[EMCMOT]
EMCMOT = motmod
SERVO_PERIOD = 1000000
[HAL]
# new addition to test Leadshine 2CS3E-D507
HALFILE = 2CS3E_D507xyz.hal
[TRAJ]
COORDINATES = XYZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
DEFAULT_LINEAR_VELOCITY = 2.50
MAX_LINEAR_VELOCITY = 25.00
[KINS]
JOINTS = 3
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
2CS3E_D507.hal
Code:
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=3
loadusr -W lcec_conf ethercat-conf.xml
loadrt lcec
loadrt cia402 count=3
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 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 lcec.write-all servo-thread
#*******************
# X axis lcec.0.0 (x) cia402.0 joint.0 Y axis lcec.0.0 cia402.1 joint.1 Z axis lcec.0.1 cia402.1 joint 2
#*******************
setp cia402.0.enable 1
#setp cia402.0.opmode 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.opmode 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
# homing
#net y-home-request joint.1.request-custom-homing => cia402.1.home
#net y-homing joint.1.is-custom-homing <= cia402.1.stat-homing
#net y-homed joint.1.custom-homing-finished <= cia402.1.stat-homed
## Z axis ##
setp cia402.2.enable 1
#setp cia402.2.opmode 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
# homing
#net z-home-request joint.2.request-custom-homing => cia402.2.home
#net z-homing joint.2.is-custom-homing <= cia402.2.stat-homing
#net z-homed joint.2.custom-homing-finished <= cia402.2.stat-homed
Any ideas on how to get this one to start? I tried to make it as basic as possible to avoid anything else distracting things.
To reiterate, it loads correctly and LinuxCNC starts without an error screen popping up, but the e-stop on the top left of the axis interface screen is toggled on when it starts and can't be toggled off.
ethercat slaves shows both 2CS3E-D507 slaves in OP state
Please Log in or Create an account to join the conversation.
1 year 4 weeks ago #335708
by Hakan
Replied by Hakan on topic Leadshine 2CS3E-D507 / Cia402 almost working - help please!
From that example/template I linked to before, you need
in the hal file.
That should allow it to start I think.
That example/template is a working example. You have a bit different naming due to two motors per drive, but other than that it should work.
Code:
net emc-enable => iocontrol.0.emc-enable-in
sets emc-enable 1
That should allow it to start I think.
That example/template is a working example. You have a bit different naming due to two motors per drive, but other than that it should work.
Please Log in or Create an account to join the conversation.
1 year 4 weeks ago - 1 year 4 weeks ago #335767
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.
Last edit: 1 year 4 weeks ago by jrc. Reason: Totally mangled formatting (my fault)
Please Log in or Create an account to join the conversation.
1 year 4 weeks ago #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:
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 or Create an account to join the conversation.
1 year 4 weeks ago #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.
Time to create page: 0.149 seconds