Many thanks for your quick reply.
My hal file looks like this:
loadusr -W lcec_conf ethercat-conf.xml
loadrt lcec
loadrt cia402 count=2
addf lcec.read-all servo-thread
addf cia402.0.read-all servo-thread
addf cia402.1.read-all servo-thread
addf cia402.0.write-all servo-thread
addf cia402.1.write-all servo-thread
addf lcec.write-all servo-thread
#*******************
# Right Carousel lcec.0.0 arm (r1) cia402.0 joint.3 platter (r2) cia402.1 joint.4
#*******************
## Carousel arm ##
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 r1-statusword lcec.0.0.srv-1-cia-statusword => cia402.0.statusword
net r1-opmode-display lcec.0.0.srv-1-opmode-display => cia402.0.opmode-display
net r1-drv-act-pos lcec.0.0.srv-1-actual-position => cia402.0.drv-actual-position
net r1-drv-act-vel lcec.0.0.srv-1-actual-velocity => cia402.0.drv-actual-velocity
# cia402 driver to ethercat
net r1-controlword cia402.0.controlword => lcec.0.0.srv-1-cia-controlword
net r1-modes-of-operation cia402.0.opmode => lcec.0.0.srv-1-opmode
net r1-drv-target-pos cia402.0.drv-target-position => lcec.0.0.srv-1-target-position
## Carousel Platter ##
setp cia402.1.enable 1
setp cia402.1.csp-mode 1
setp cia402.1.pos-scale 4000
# ethercat to cia402 driver
net r2-statusword lcec.0.0.srv-2-cia-statusword => cia402.1.statusword
net r2-opmode-display lcec.0.0.srv-2-opmode-display => cia402.1.opmode-display
net r2-drv-act-pos lcec.0.0.srv-2-actual-position => cia402.1.drv-actual-position
net r2-drv-act-vel lcec.0.0.srv-2-actual-velocity => cia402.1.drv-actual-velocity
# cia402 driver to ethercat
net r2-controlword cia402.1.controlword => lcec.0.0.srv-2-cia-controlword
net r2-modes-of-operation cia402.1.opmode => lcec.0.0.srv-2-opmode
net r2-drv-target-pos cia402.1.drv-target-position => lcec.0.0.srv-2-target-position
The missing part relative to the example you give me from dbraun is:
addf motion-command-handler servo-thread
addf motion-controller servo-thread
#from motion to cia
net r1-enable <= joint.3.amp-enable-out => cia402.0.enable
net r1-amp-fault => joint.3.amp-fault-in <= cia402.0.drv-fault
net r1-pos-cmd <= joint.3.motor-pos-cmd => cia402.0.pos-cmd
net r1-pos-fb => joint.3.motor-pos-fb <= cia402.0.pos-fb
net r2-enable <= joint.4.amp-enable-out => cia402.1.enable
net r2-amp-fault => joint.4.amp-fault-in <= cia402.1.drv-fault
net r2-pos-cmd <= joint.4.motor-pos-cmd => cia402.1.pos-cmd
net r2-pos-fb => joint.4.motor-pos-fb <= cia402.1.pos-fb
If I add that into my hal file , LinuxCNC fails to start and complains about being unable to execute certain SDO uploads:
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6502:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6060:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x607a:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6d02:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6860:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x687a:0x00, error -22, abort_code 00000000)
HAL: ERROR: function 'motion-command-handler' may only be added to one thread
./2CS3E_D507.hal:12: addf failed
The last item in the list about the motion-command-handler suggests that this is duplicating another one in the standard config. If I comment out the motion-command-handler and motion-controller lines of the dbraun additions., that message goes away but it still crashes on startup with a similar list of SDO complaints and a new one about being unable to add a pin:
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6502:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6060:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x607a:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6d02:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x6860:0x00, error -22, abort_code 00000000)
Failed to execute SDO upload: Invalid argument
LCEC: slave 0.1: Failed to execute SDO upload (0x687a:0x00, error -22, abort_code 00000000)
./2CS3E_D507.hal:36: Pin 'joint.3.amp-enable-out' does not exist
43420
Stopping realtime threads
Unloading hal components
Note: Using POSIX realtime
@Hakan - Any further suggestions? Am I doing something dumb like omitting some essential pin definition, or ir is possible that the cia402 mappings are somehow not working for a dual-stepper drive for some reason?
@scottlaird - do you have a simple hal file that works for a 2CS3E-D507 and actually gets both closed-loop steppers to move? Ideally in pp mode if possible, but at a push CSP would also work with the risk of more complexity, which is not needed for a toolchanger.