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

More
1 year 1 month ago - 1 year 1 month ago #335540 by jrc
I am trying to get Leadshine 2CS3E-D507 working to drive two closed-loop steppers to drive the carousel and arm of a toolchanger in simple pp mode.
I think I am very close, but need some help to get over the line.

Scott Laird's driver and the Cia402 component have gotten me to the point where the drive reaches OP state and I can see all the hal pins, but I have not managed to get the steppers to move.

To avoid the complexity of the rest of my machine, I have simply taken one of the sample configs (sim.axis-min), and added two extra joints (joints 3 and 4) for the two closed-loop steppers in the ini file , and added a hal file with what I hope are plausible lcec and cia402 settings. I have then connected the stepper drive to the machine with an Ethernet cable, Linuxcnc starts up OK with no complaints, and ehtercat slaves shows that the 2CS3E-D507 is sitting happily in OP state.

Looking at Machine>Show Hal configuration I can see all the lcec and cia402 pins. Setting setp cia402.0.enable 1 turns on the first joint and the same with cia.1.enable turns on the second one. I can see that this is the case because the LED display shows the corresponding dot. The display shows 88.8. where the dots denote one active axis each.

Reading the position of, say, the first stepper (lcec.0.0.srv-1-actual-position or cia402.0.drv-actual-position ) shows a value of "97", and the other one shows "2". These are arbitrary values corresponding to whatever position the shaft was turned to when powered up. 
The corresponding "target position", however, is currently "0", but the drive is not trying to turn from position 97 to 0 at all.
In fact, it seems very determined to hold its current position, so you cannot turn the shaft by hand (which you can easily do when the drive is not enabled). It seems to resist any attempt to move it from its current position of 97

Trying to write a new target position using "setp" fails.
For example, if I try to set it to 700 : 
using setp lcec.0.0.srv-1-actual-position 700, it complains that the pin is connected to a signal ( r1-drv-target-pos )
Using setp cia402.0.drv-actual-position 700, it complains " ERROR setting parameter 'cia402.0.drv-actual-position' to '700' pin 'cia402.0.drv-actual-position' is not writable"  

The relevant line is the hal file is 
net r1-drv-target-pos      cia402.0.drv-target-position => lcec.0.0.srv-1-target-position
so I can understand the first complaint (the lcec is taking its input from the signal r1-drv-target-pos, which is getting its value from the cia402.0.drv-target-position pin), but I can't understand the second complaint ( the cia402target position pin not being writable), because one has to be able to tell the drive what the new position target is

Is here a simple fix I am missing, or am I going about this completely the wrong way, and if so, what do I need to change?
Since it's for a tool changer I would like to stick to pp mode rather than csp to simplify things.

I am attaching the .ini and .hal files, which are the only modified ones. All others are as per the normal sim-axis-min sample config in the standard installation.

Many thanks!
 
Last edit: 1 year 1 month ago by jrc. Reason: typo

Please Log in or Create an account to join the conversation.

More
1 year 1 month ago #335541 by Hakan
At a quick glance, normally you would need to connect the joints to the cia402 components, see here github.com/dbraun1981/hal-cia402/blob/main/example/cia402.hal  
In this case you can try to give a position value to cia402.0.pos-cmd


 

Please Log in or Create an account to join the conversation.

More
1 year 1 month ago #335608 by jrc
Many thanks for your quick reply.
My hal file looks like this:
Code:
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: 
Code:
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:
Code:
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:
Code:
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.
 

Please Log in or Create an account to join the conversation.

More
1 year 1 month ago #335611 by Hakan
You need those two motion-command controller statements, they should go in between the cia402.read-all and write-all as in the example file.
It won't move without those.

It was just an example to show how it is normally done.
You can set the pos-cmd in halshow, try that.
The two drives are distinguished by the variable name srv-2-var srv-1-var etc.
 

Please Log in or Create an account to join the conversation.

More
1 year 1 month ago #335613 by jrc
I added them back in and got the same error : HAL: ERROR: function 'motion-command-handler' may only be added to one thread

I think the simple minimal sim config I use as a starting point probably has those somewhere so it's complaining about duplicates

Please Log in or Create an account to join the conversation.

More
1 year 1 month ago #335617 by Hakan
Comment out this line in the ini file.
Code:
#HALFILE = LIB:basic_sim.tcl
Hope it doesn't mean a lot of extra errors but I think it might work.
Then give cia402.0.pos-cmd a value in halshow.

Please Log in or Create an account to join the conversation.

Time to create page: 0.392 seconds
Powered by Kunena Forum