Getting (hopefully) close to an Rtelligent build

More
2 years 9 months ago #291229 by farmer_mike
Hi, this is my first post. I've learned quite a bit from rodw, Hakan, and a bunch of other helpful posts.

I am trying to figure out the LinuxCNC part of a build that would use RS400E servo drives, an ECT86 closed loop stepper drive, and maybe an RTEC1616. I don't have the Rtelligent hardware, as I would like to figure out the LinuxCNC part first. I have a couple of questions, but I will start with the steps I have taken so far.

1) I installed rodw's image from this post and followed the instructions in the readme file
forum.linuxcnc.org/9-installing-linuxcnc...cnc-x86-only?start=0

2) The readme file took me to the bottom of the first post in this thread forum.linuxcnc.org/ethercat/45336-etherc...-how-to-step-by-step

2a) I believe Ethercat is running. Here is a picture.
 

Attachment not found



3) Then I followed these steps:cd ~/dev
git clone github.com/dbraun1981/hal-cia402
cd hal-cia402
sudo halcompile --install cia402.comp

Which I tested with the following results
 

Attachment not found



4) At this point, things started to go off the rails. I followed the instructions at the following link
github.com/rodw-au/linuxcnc-cia402/tree/main
And finished these instructions by installing the cia402 configuration with the following commands

cd ~/linuxcnc/configs
git clone  github.com/rodw-au/linuxcnc-cia402
Open Linuxcnc and select cia402.hal

5) I opened LinuxCNC and chose the cia402 configuration, which led to the following error report (attached as linuxcnc1.txt)
 

Attachment not found



6) I took a shot at fixing a problem by changing line 14 of cia402.hal from
loadusr -W ./lcec_conf ethercat-conf.xml
to
loadusr -W lcec_conf ethercat-conf.xml

which generated the following error report (attached as linuxcnc2.txt)
 

Attachment not found



Questions: Before I spend big bucks on hardware, I'd like to get as ready as possible. I understand that the xml file will have to change to match the hardware, and I have drafted a new xml file for the RS400E servos. Are the errors I am seeing being caused by the lack of hardware? Is there anything else I can do (or fix) to get LinuxCNC ready for hardware?

Thanks again for everyone's help.

 

Please Log in to join the conversation.

More
2 years 9 months ago #291231 by rodw
First, you need to run linuxcnc from the command line to get better error checking
But if you look at the error message, a pin is not found.
I think if you review my xml file, it also includes a rtelligent I/O module as slave 3.
That is whre the missing pin error is coming from.
Of course its misisng, you haeve not bought one yet!

So you can't really go any further until you have the hardware.

Please Log in to join the conversation.

More
2 years 8 months ago #292353 by farmer_mike
I bought an ECT 60 kit off of Aliexpress so that I could dip my toe. Everything was pretty straightforward, and I was able to get it running right away. I haven't done any scaling or homing, but the jogging was easy. It's neat to see the position change on the user interface when I rotate the motor shaft by hand.

I will attach my files and link a video of the results below:
streamable.com/0uvbl4

 

Please Log in to join the conversation.

More
1 year 1 month ago #334882 by farmer_mike
I have made some big progress lately. I have the limit switches and homing switches working. I also have the E stop working.

My issue is the RS750E AC servos shake quite a bit. Without the drive belts installed, the servos will sit and shake after completing a move. With the drive belts on, the system moves in the correct direction, but does so in a shaky manner.

My hypothesis is too much integral gain. I believe the problem is because I started with the stepper motor examples. Maybe there are some PID gains inside the drive that I need to configure.

I think what I need are the drive gains set with the SDO parameters inside the XML file.

Thanks for all the help
Code:
########################################################### # # CIA 402 example snippet Hal # ########################################################### ########################################################### # Setup ########################################################### loadrt [KINS]KINEMATICS loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS loadusr -W lcec_conf ethercat-conf.xml #loadusr -W /home/cnc/linuxcnc/configs/linuxcnc-cia402-single/python_control.py loadrt lcec loadrt cia402 count=3 loadrt pid names=0-pid,1-pid,2-pid loadrt bitslice count=6 personality=32,32,32,32,32,32 addf bitslice.0 servo-thread addf bitslice.1 servo-thread addf bitslice.2 servo-thread addf bitslice.3 servo-thread addf bitslice.4 servo-thread addf bitslice.5 servo-thread loadrt conv_s32_u32 count=6 addf conv-s32-u32.0 servo-thread addf conv-s32-u32.1 servo-thread addf conv-s32-u32.2 servo-thread addf conv-s32-u32.3 servo-thread addf conv-s32-u32.4 servo-thread addf conv-s32-u32.5 servo-thread ########################################################### # Functions servo-thread ########################################################### 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 0-pid.do-pid-calcs servo-thread addf 1-pid.do-pid-calcs servo-thread addf 2-pid.do-pid-calcs 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 ######################################### #nets ######################################### net emc-enable => iocontrol.0.emc-enable-in sets emc-enable 1 #config # # Joint 0 # setp cia402.0.csp-mode 1 setp cia402.0.pos-scale 786432 #from servo(ethercat) to cia402 net 0-statusword lcec.0.0.cia-statusword => cia402.0.statusword net 0-opmode-display lcec.0.0.opmode-display => cia402.0.opmode-display net 0-drv-act-pos lcec.0.0.actual-position => cia402.0.drv-actual-position net 0-drv-act-velo lcec.0.0.actual-velocity => cia402.0.drv-actual-velocity #from motion to cia net 0-enable <= joint.0.amp-enable-out => cia402.0.enable net 0-amp-fault => joint.0.amp-fault-in <= cia402.0.drv-fault net 0-pos-cmd <= joint.0.motor-pos-cmd => cia402.0.pos-cmd net 0-pos-fb => joint.0.motor-pos-fb <= cia402.0.pos-fb #from cia402 to servo(ethercat) net 0-controlword cia402.0.controlword => lcec.0.0.cia-controlword net 0-modes-of-operation cia402.0.opmode => lcec.0.0.opmode net 0-drv-target-pos cia402.0.drv-target-position => lcec.0.0.target-position net 0-drv-target-velo cia402.0.drv-target-velocity => lcec.0.0.target-velocity net my-out-0 conv-s32-u32.0.in <= lcec.0.0.digitalinputs net my-in-0 conv-s32-u32.0.out => bitslice.0.in net my-bit-0 bitslice.0.out-00 joint.0.neg-lim-sw-in net my-out-0 conv-s32-u32.1.in <= lcec.0.0.digitalinputs net my-in-1 conv-s32-u32.1.out => bitslice.1.in net my-bit-1 bitslice.1.out-01 joint.0.pos-lim-sw-in net my-out-0 conv-s32-u32.2.in <= lcec.0.0.digitalinputs net my-in-2 conv-s32-u32.2.out => bitslice.2.in net my-bit-2 bitslice.2.out-02 joint.0.home-sw-in # # Joint 1 # setp cia402.1.csp-mode 1 setp cia402.1.pos-scale -786432 #from servo(ethercat) to cia402 net 1-statusword lcec.0.1.cia-statusword => cia402.1.statusword net 1-opmode-display lcec.0.1.opmode-display => cia402.1.opmode-display net 1-drv-act-pos lcec.0.1.actual-position => cia402.1.drv-actual-position net 1-drv-act-velo lcec.0.1.actual-velocity => cia402.1.drv-actual-velocity #from cia402 to servo(ethercat) net 1-controlword cia402.1.controlword => lcec.0.1.cia-controlword net 1-modes-of-operation cia402.1.opmode => lcec.0.1.opmode net 1-drv-target-pos cia402.1.drv-target-position => lcec.0.1.target-position net 1-drv-target-velo cia402.1.drv-target-velocity => lcec.0.1.target-velocity #from motion to cia net 1-enable <= joint.1.amp-enable-out => cia402.1.enable net 1-amp-fault => joint.1.amp-fault-in <= cia402.1.drv-fault net 1-pos-cmd <= joint.1.motor-pos-cmd => cia402.1.pos-cmd net 1-pos-fb => joint.1.motor-pos-fb <= cia402.1.pos-fb net my-out-1 conv-s32-u32.3.in <= lcec.0.1.digitalinputs net my-in-3 conv-s32-u32.3.out => bitslice.3.in net my-bit-3 bitslice.3.out-00 joint.1.pos-lim-sw-in net my-out-1 conv-s32-u32.4.in <= lcec.0.1.digitalinputs net my-in-4 conv-s32-u32.4.out => bitslice.4.in net my-bit-4 bitslice.4.out-01 joint.1.neg-lim-sw-in net my-out-1 conv-s32-u32.5.in <= lcec.0.1.digitalinputs net my-in-5 conv-s32-u32.5.out => bitslice.5.in net my-bit-5 bitslice.5.out-02 joint.1.home-sw-in # # Joint 2 # setp cia402.2.csp-mode 1 setp cia402.2.pos-scale 96000 #from servo(ethercat) to cia402 net 2-statusword lcec.0.2.cia-statusword => cia402.2.statusword net 2-opmode-display lcec.0.2.opmode-display => cia402.2.opmode-display net 2-drv-act-pos lcec.0.2.actual-position => cia402.2.drv-actual-position net 2-drv-act-velo lcec.0.2.actual-velocity => cia402.2.drv-actual-velocity #from cia402 to servo(ethercat) net 2-controlword cia402.2.controlword => lcec.0.2.cia-controlword net 2-modes-of-operation cia402.2.opmode => lcec.0.2.opmode net 2-drv-target-pos cia402.2.drv-target-position => lcec.0.2.target-position net 2-drv-target-velo cia402.2.drv-target-velocity => lcec.0.2.target-velocity #from motion to cia net 2-enable <= joint.2.amp-enable-out => cia402.2.enable net 2-amp-fault => joint.2.amp-fault-in <= cia402.2.drv-fault net 2-pos-cmd <= joint.2.motor-pos-cmd => cia402.2.pos-cmd net 2-pos-fb => joint.2.motor-pos-fb <= cia402.2.pos-fb net 2-CCW-limit lcec.0.2.in-3 => joint.2.neg-lim-sw-in net 2-CW-limit lcec.0.2.in-4 => joint.2.pos-lim-sw-in net 2-in-home lcec.0.2.in-5 => joint.2.home-sw-in net 2-in-6 lcec.0.2.in-6 => halui.estop.activate #net spindle_speed spindle.0.speed-out => python_control.rpm_in
Code:
[code]# This config file was created 2020-08-14 17:19:37.621705 by the update_ini script # The original config files may be found in the /home/demo/linuxcnc/configs/et-3ax/et_3ax_CIA402.old directory [EMC] # The version string for this INI file. VERSION = 1.1 MACHINE = EtherCAT Machine DEBUG = 1 [DISPLAY] DISPLAY = axis EDITOR = gedit #PYVCP = pyvcp_panel.xml # places the pyvcp panel at the bottom of the Axis window PYVCP_POSITION = RIGHT # Cycle time, in seconds, that display will sleep between polls CYCLE_TIME =            0.100 # Path to help file HELP_FILE =             doc/help.txt # Initial display setting for position, RELATIVE or MACHINE POSITION_OFFSET = RELATIVE POSITION_FEEDBACK = ACTUAL MAX_FEED_OVERRIDE = 1 # Prefix to be used PROGRAM_PREFIX = /home/demo/linuxcnc/nc_files INTRO_GRAPHIC = linuxcnc.gif INTRO_TIME = 0 INCREMENTS = 1in .5in .25in .125in .0625in .025in .05in #INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm [FILTER] PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image PROGRAM_EXTENSION = .py Python Script png = image-to-gcode gif = image-to-gcode jpg = image-to-gcode py = python nc = /usr/bin/axis [RS274NGC] PARAMETER_FILE = linuxcnc.var [EMCMOT] EMCMOT = motmod COMM_TIMEOUT = 1.0 BASE_PERIOD =  0 SERVO_PERIOD = 1000000 [TASK] TASK = milltask CYCLE_TIME = 0.005 [HAL] HALFILE = cia402.hal #SHUTDOWN = shutdown.hal HALUI = halui [HALUI] [TRAJ] HOME = 16 12 7 COORDINATES = XYZ LINEAR_UNITS = in ANGULAR_UNITS = deg DEFAULT_LINEAR_VELOCITY = .25 MAX_LINEAR_VELOCITY = .5 MIN_LINEAR_VELOCITY = .01 DEFAULT_ANGULAR_VELOCITY = 360 MAX_ANGULAR_VELOCITY = 720 POSITION_FILE = position.txt [EMCIO] # Name of IO controller program, e.g., iov2 has tool changer stuff EMCIO =         iov2 CYCLE_TIME =    0.100 # tool table file TOOL_TABLE =    cia402.tbl TOOL_CHANGE_POSITION = 0 0 50.8 #RANDOM_TOOLCHANGER = 1 [KINS] JOINTS = 3 KINEMATICS = trivkins kinstype=both coordinates=xyz [AXIS_X] MIN_LIMIT = 0.1 MAX_LIMIT = 17.9 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000 [JOINT_0] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 DEADBAND = 0.01 P=1 I=0 D=0 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? #STEPGEN_MAXVEL = 1.25 #STEPGEN_MAXACCEL = 1.25 SCALE = 1 FERROR = 200 MIN_FERROR = 50 MIN_LIMIT = 0 MAX_LIMIT = 18 HOME                    = 16 HOME_OFFSET                = 16 HOME_SEQUENCE            = 0 HOME_SEARCH_VEL = -.125 HOME_LATCH_VEL = -.125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS        = NO [AXIS_Y] MIN_LIMIT = 0.1 MAX_LIMIT = 12.9 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000 [JOINT_1] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 DEADBAND = 0.01 P=1 I=0 D=0 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? #STEPGEN_MAXVEL = 1.25 #STEPGEN_MAXACCEL = 1.25 STEP_SCALE = 1 FERROR = 2 MIN_FERROR = 20 MIN_LIMIT = 0 MAX_LIMIT = 13 HOME                    = 12 HOME_OFFSET                = 12 HOME_SEQUENCE            = 1 HOME_SEARCH_VEL = .125 HOME_LATCH_VEL = .125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS        = NO [JOINT_2] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? STEPGEN_MAXVEL = 1.25 STEPGEN_MAXACCEL = 1.25 STEP_SCALE = 1 FERROR = 200 MIN_FERROR = 20 MIN_LIMIT = 3.4 MAX_LIMIT = 8.1 HOME                    = 7 HOME_OFFSET                = 7 HOME_SEQUENCE            = 2 HOME_SEARCH_VEL = .125 HOME_LATCH_VEL = .125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS    = NO [AXIS_Z] MIN_LIMIT = 3.5 MAX_LIMIT = 8 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000

[/code]
Code:
[code][code]<masters>   <master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">              <slave idx="0" type="generic" vid="00000A88" pid="0a880013" configPdos="true">    <!-- Joint 0 -->    <syncManager idx="0" dir="out"> </syncManager>    <syncManager idx="1" dir="out"> </syncManager>    <syncManager idx="2" dir="out">     <pdo idx="1600">      <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>      <pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>      <pdoEntry idx="60b8" subIdx="00" bitLen="16" halPin="touchprobefunction0" halType="bit"/>     </pdo>     <pdo idx="1601">      <pdoEntry idx="6081" subIdx="00" bitLen="32" halPin="profile-velocity" halType="u32"/>      <pdoEntry idx="6083" subIdx="00" bitLen="32" halPin="target-accel" halType="u32"/>      <pdoEntry idx="6084" subIdx="00" bitLen="32" halPin="target-decel" halType="u32"/>      <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>     </pdo>     <pdo idx="1602">      <pdoEntry idx="60ff" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>     </pdo>    </syncManager>    <syncManager idx="3" dir="in">     <pdo idx="1a00">      <pdoEntry idx="603f" subIdx="00" bitLen="16" halPin="errorcode" halType="bit"/>      <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>      <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>      <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>      <pdoEntry idx="60b9" subIdx="00" bitLen="16" halPin="touchprobestat" halType="bit"/>      <pdoEntry idx="60ba" subIdx="00" bitLen="32" halPin="touchprobe1pos" halType="s32"/>      <pdoEntry idx="60fd" subIdx="00" bitLen="32" halPin="digitalinputs" halType="s32"/>     </pdo>     <pdo idx="1a01">      <pdoEntry idx="606c" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>     </pdo>    </syncManager>    <dcConf assignActivate="300" sync0Cycle="1000000"/>   </slave>       <slave idx="1" type="generic" vid="00000A88" pid="0a880013" configPdos="true">    <!-- Joint 1 -->    <syncManager idx="0" dir="out"> </syncManager>    <syncManager idx="1" dir="out"> </syncManager>    <syncManager idx="2" dir="out">     <pdo idx="1600">      <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>      <pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>      <pdoEntry idx="60b8" subIdx="00" bitLen="16" halPin="touchprobefunction0" halType="bit"/>     </pdo>     <pdo idx="1601">      <pdoEntry idx="6081" subIdx="00" bitLen="32" halPin="profile-velocity" halType="u32"/>      <pdoEntry idx="6083" subIdx="00" bitLen="32" halPin="target-accel" halType="u32"/>      <pdoEntry idx="6084" subIdx="00" bitLen="32" halPin="target-decel" halType="u32"/>      <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>     </pdo>     <pdo idx="1602">      <pdoEntry idx="60ff" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>     </pdo>    </syncManager>    <syncManager idx="3" dir="in">     <pdo idx="1a00">      <pdoEntry idx="603f" subIdx="00" bitLen="16" halPin="errorcode" halType="bit"/>      <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>      <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>      <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>      <pdoEntry idx="60b9" subIdx="00" bitLen="16" halPin="touchprobestat" halType="bit"/>      <pdoEntry idx="60ba" subIdx="00" bitLen="32" halPin="touchprobe1pos" halType="s32"/>      <pdoEntry idx="60fd" subIdx="00" bitLen="32" halPin="digitalinputs" halType="s32"/>     </pdo>     <pdo idx="1a01">      <pdoEntry idx="606c" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>     </pdo>    </syncManager>    <dcConf assignActivate="300" sync0Cycle="1000000"/>   </slave>        <!-- Joint 2 -->     <slave idx="2" type="generic" vid="00000a88" pid="0a880002" configPdos="true">       <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>       <sdoConfig idx="2000" subIdx="0"><sdoDataRaw data ="88 13"/></sdoConfig>  <!-- Max motor current (5.0) -->       <sdoConfig idx="2007" subIdx="3"><sdoDataRaw data ="01"/></sdoConfig>     <!-- Input 3 - CCW Limit -->       <sdoConfig idx="2007" subIdx="4"><sdoDataRaw data ="02"/></sdoConfig>     <!-- Input 4 - CW Limit -->       <sdoConfig idx="2007" subIdx="5"><sdoDataRaw data ="03"/></sdoConfig>     <!-- Input 5 - Home Function -->       <sdoConfig idx="2007" subIdx="6"><sdoDataRaw data ="05"/></sdoConfig>     <!-- Input 6 - Emergency Stop -->       <sdoConfig idx="2011" subIdx="0"><sdoDataRaw data ="01 00"/></sdoConfig>  <!-- Closed loop -->       <sdoConfig idx="6098" subIdx="0"><sdoDataRaw data ="11 00"/></sdoConfig>  <!-- Home mode 17 -->       <sdoConfig idx="607C" subIdx="0"><sdoDataRaw data ="00 00"/></sdoConfig>  <!-- Home offset 0  -->       <sdoConfig idx="609A" subIdx="0"><sdoDataRaw data ="F4 01"/></sdoConfig>  <!-- Home accelleration 500 -->       <sdoConfig idx="6099" subIdx="01"><sdoDataRaw data ="C4 09"/></sdoConfig>  <!-- Home fast speed 2500-->       <sdoConfig idx="6099" subIdx="02"><sdoDataRaw data ="F4 01"/></sdoConfig>  <!-- Home slow speed 500 -->       <syncManager idx="2" dir="out">         <pdo idx="1600">           <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>           <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>           <!-- Target Position -->           <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>           <!-- Target Velocity -->           <pdoEntry idx="60FF" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>           <!-- Digtial Outputs (manufacturer's extension ECT86/ECT60)-->           <pdoEntry idx="204A" subIdx="0" bitLen="16" halType="complex">             <complexEntry bitLen="1" halPin="out-1" halType="bit"/>             <complexEntry bitLen="1" halPin="out-2" halType="bit"/>             <complexEntry bitLen="14"/>           </pdoEntry>         </pdo>       </syncManager>       <syncManager idx="3" dir="in">         <pdo idx="1a00">           <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>           <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>           <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>           <pdoEntry idx="606C" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>           <pdoEntry idx="6077" subIdx="00" bitLen="32" halPin="actual-torque" halType="s32"/>           <!-- Digtial_inputs (cia402 compatible) -->           <pdoEntry idx="60FD" subIdx="0" bitLen="32" halType="complex">             <complexEntry bitLen="1" halPin="CW-limit" halType="bit"/>             <complexEntry bitLen="1" halPin="CCW-limit" halType="bit"/>             <complexEntry bitLen="1" halPin="in-home" halType="bit"/>             <complexEntry bitLen="13"/>             <complexEntry bitLen="1" halPin="in-1" halType="bit"/>             <complexEntry bitLen="1" halPin="in-2" halType="bit"/>             <complexEntry bitLen="1" halPin="in-3" halType="bit"/>             <complexEntry bitLen="1" halPin="in-4" halType="bit"/>             <complexEntry bitLen="1" halPin="in-5" halType="bit"/>             <complexEntry bitLen="1" halPin="in-6" halType="bit"/>             <complexEntry bitLen="10"/>           </pdoEntry>                   </pdo>       </syncManager>     </slave>         </master> </masters>
[/code]


[/code]

Please Log in to join the conversation.

More
1 year 1 month ago #334936 by farmer_mike
I set some sdo values last night and the shaking is gone. The servo motors make a bit of a whine noise, so I might need to turn the gains down a bit more.

I’ll post all my files later on today.

The stepper motor just works, but the servos need some tuning is my perspective.

Please Log in to join the conversation.

More
1 year 1 month ago #334947 by Hakan
It looks like you are doing well. Servo tuning is standard procedure for servos, there should be one or more guides for that here in the forum.
Maybe you already know you can use "ethercat download" to set the value of a sdo. Easier to change gain etc when tuning.
When it works fine, sdoconfig.

 

Please Log in to join the conversation.

More
1 year 1 month ago #334960 by farmer_mike
I halved the SDO values one more time and the servos are nice and quiet now. I will have to look at the HAL Oscilloscope to see how the tune is, but for now the tune is quiet and on scale.

Here are the files below. I used an ECT60 paired with a precision planetary gearbox for the Z axis of my milling machine. The X and Y axis are controlled by RS750E drives with a slight belt reduction.

Emergency stop button is wired into the ECT60 on input number 6. From the input of the ECT60, I mapped the E stop over to the HALUI emergency stop. Without the HALUI mapping, the drives would start back up as soon as the physical E stop was released. The limit switches and homing switches for the Z axis were straight forward.

Limit switches and homing switches for the RS750E drives were a little more complicated. I converted the drive input tags from s32 to u32 then bit sliced the u32 to break out the switches. I bet all the slicing could have been done in the XML file, but I could not figure that out.

When I first started the project, my plan was to run everything off of a laptop. I have since switched to a raspberry pi 4.

I still have a bit of work to do, but I want to thank everyone for their help so far.
Code:
########################################################### # # CIA 402 example snippet Hal # ########################################################### ########################################################### # Setup ########################################################### loadrt [KINS]KINEMATICS loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS loadusr -W lcec_conf ethercat-conf.xml #loadusr -W /home/cnc/linuxcnc/configs/linuxcnc-cia402-single/python_control.py loadrt lcec loadrt cia402 count=3 loadrt pid names=0-pid,1-pid,2-pid loadrt bitslice count=6 personality=32,32,32,32,32,32 addf bitslice.0 servo-thread addf bitslice.1 servo-thread addf bitslice.2 servo-thread addf bitslice.3 servo-thread addf bitslice.4 servo-thread addf bitslice.5 servo-thread loadrt conv_s32_u32 count=6 addf conv-s32-u32.0 servo-thread addf conv-s32-u32.1 servo-thread addf conv-s32-u32.2 servo-thread addf conv-s32-u32.3 servo-thread addf conv-s32-u32.4 servo-thread addf conv-s32-u32.5 servo-thread ########################################################### # Functions servo-thread ########################################################### 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 0-pid.do-pid-calcs servo-thread addf 1-pid.do-pid-calcs servo-thread addf 2-pid.do-pid-calcs 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 ######################################### #nets ######################################### net emc-enable => iocontrol.0.emc-enable-in sets emc-enable 1 #config   # # Joint 0 # setp cia402.0.csp-mode 1 setp cia402.0.pos-scale 786432 #from servo(ethercat) to cia402 net 0-statusword      lcec.0.0.cia-statusword => cia402.0.statusword net 0-opmode-display  lcec.0.0.opmode-display => cia402.0.opmode-display net 0-drv-act-pos     lcec.0.0.actual-position => cia402.0.drv-actual-position net 0-drv-act-velo    lcec.0.0.actual-velocity => cia402.0.drv-actual-velocity #from motion to cia net 0-enable     <= joint.0.amp-enable-out => cia402.0.enable net 0-amp-fault  => joint.0.amp-fault-in   <= cia402.0.drv-fault net 0-pos-cmd    <= joint.0.motor-pos-cmd  => cia402.0.pos-cmd net 0-pos-fb     => joint.0.motor-pos-fb   <= cia402.0.pos-fb #from cia402 to servo(ethercat) net 0-controlword         cia402.0.controlword => lcec.0.0.cia-controlword net 0-modes-of-operation  cia402.0.opmode => lcec.0.0.opmode net 0-drv-target-pos      cia402.0.drv-target-position => lcec.0.0.target-position net 0-drv-target-velo     cia402.0.drv-target-velocity => lcec.0.0.target-velocity net my-out-0 conv-s32-u32.0.in <= lcec.0.0.digitalinputs net my-in-0 conv-s32-u32.0.out => bitslice.0.in net my-bit-0 bitslice.0.out-00 joint.0.neg-lim-sw-in net my-out-0 conv-s32-u32.1.in <= lcec.0.0.digitalinputs net my-in-1 conv-s32-u32.1.out => bitslice.1.in net my-bit-1 bitslice.1.out-01 joint.0.pos-lim-sw-in net my-out-0 conv-s32-u32.2.in <= lcec.0.0.digitalinputs net my-in-2 conv-s32-u32.2.out => bitslice.2.in net my-bit-2 bitslice.2.out-02 joint.0.home-sw-in # # Joint 1 # setp cia402.1.csp-mode 1 setp cia402.1.pos-scale -786432 #from servo(ethercat) to cia402 net 1-statusword      lcec.0.1.cia-statusword => cia402.1.statusword net 1-opmode-display  lcec.0.1.opmode-display => cia402.1.opmode-display net 1-drv-act-pos     lcec.0.1.actual-position => cia402.1.drv-actual-position net 1-drv-act-velo    lcec.0.1.actual-velocity => cia402.1.drv-actual-velocity #from cia402 to servo(ethercat) net 1-controlword         cia402.1.controlword => lcec.0.1.cia-controlword net 1-modes-of-operation  cia402.1.opmode => lcec.0.1.opmode net 1-drv-target-pos      cia402.1.drv-target-position => lcec.0.1.target-position net 1-drv-target-velo     cia402.1.drv-target-velocity => lcec.0.1.target-velocity #from motion to cia net 1-enable    <= joint.1.amp-enable-out => cia402.1.enable net 1-amp-fault => joint.1.amp-fault-in   <= cia402.1.drv-fault net 1-pos-cmd   <= joint.1.motor-pos-cmd  => cia402.1.pos-cmd net 1-pos-fb    => joint.1.motor-pos-fb   <= cia402.1.pos-fb net my-out-1 conv-s32-u32.3.in <= lcec.0.1.digitalinputs net my-in-3 conv-s32-u32.3.out => bitslice.3.in net my-bit-3 bitslice.3.out-00 joint.1.pos-lim-sw-in net my-out-1 conv-s32-u32.4.in <= lcec.0.1.digitalinputs net my-in-4 conv-s32-u32.4.out => bitslice.4.in net my-bit-4 bitslice.4.out-01 joint.1.neg-lim-sw-in net my-out-1 conv-s32-u32.5.in <= lcec.0.1.digitalinputs net my-in-5 conv-s32-u32.5.out => bitslice.5.in net my-bit-5 bitslice.5.out-02 joint.1.home-sw-in # # Joint 2 # setp cia402.2.csp-mode 1 setp cia402.2.pos-scale 96000 #from servo(ethercat) to cia402 net 2-statusword      lcec.0.2.cia-statusword => cia402.2.statusword net 2-opmode-display  lcec.0.2.opmode-display => cia402.2.opmode-display net 2-drv-act-pos     lcec.0.2.actual-position => cia402.2.drv-actual-position net 2-drv-act-velo    lcec.0.2.actual-velocity => cia402.2.drv-actual-velocity #from cia402 to servo(ethercat) net 2-controlword         cia402.2.controlword => lcec.0.2.cia-controlword net 2-modes-of-operation  cia402.2.opmode => lcec.0.2.opmode net 2-drv-target-pos      cia402.2.drv-target-position => lcec.0.2.target-position net 2-drv-target-velo     cia402.2.drv-target-velocity => lcec.0.2.target-velocity #from motion to cia net 2-enable    <= joint.2.amp-enable-out => cia402.2.enable net 2-amp-fault => joint.2.amp-fault-in   <= cia402.2.drv-fault net 2-pos-cmd   <= joint.2.motor-pos-cmd  => cia402.2.pos-cmd net 2-pos-fb    => joint.2.motor-pos-fb   <= cia402.2.pos-fb net  2-CCW-limit lcec.0.2.in-3 => joint.2.neg-lim-sw-in net  2-CW-limit lcec.0.2.in-4 => joint.2.pos-lim-sw-in net  2-in-home lcec.0.2.in-5 => joint.2.home-sw-in net  2-in-6 lcec.0.2.in-6 => halui.estop.activate #net spindle_speed     spindle.0.speed-out => python_control.rpm_in
Code:
# This config file was created 2020-08-14 17:19:37.621705 by the update_ini script # The original config files may be found in the /home/demo/linuxcnc/configs/et-3ax/et_3ax_CIA402.old directory [EMC] # The version string for this INI file. VERSION = 1.1 MACHINE = EtherCAT Machine DEBUG = 1 [DISPLAY] DISPLAY = axis EDITOR = gedit #PYVCP = pyvcp_panel.xml # places the pyvcp panel at the bottom of the Axis window PYVCP_POSITION = RIGHT # Cycle time, in seconds, that display will sleep between polls CYCLE_TIME =            0.100 # Path to help file HELP_FILE =             doc/help.txt # Initial display setting for position, RELATIVE or MACHINE POSITION_OFFSET = RELATIVE POSITION_FEEDBACK = ACTUAL MAX_FEED_OVERRIDE = 1 # Prefix to be used PROGRAM_PREFIX = /home/demo/linuxcnc/nc_files INTRO_GRAPHIC = linuxcnc.gif INTRO_TIME = 0 INCREMENTS = 1in .5in .25in .125in .0625in .025in .05in #INCREMENTS = 5mm 1mm .5mm .1mm .05mm .01mm .005mm [FILTER] PROGRAM_EXTENSION = .png,.gif,.jpg Greyscale Depth Image PROGRAM_EXTENSION = .py Python Script png = image-to-gcode gif = image-to-gcode jpg = image-to-gcode py = python nc = /usr/bin/axis [RS274NGC] PARAMETER_FILE = linuxcnc.var [EMCMOT] EMCMOT = motmod COMM_TIMEOUT = 1.0 BASE_PERIOD =  0 SERVO_PERIOD = 1000000 [TASK] TASK = milltask CYCLE_TIME = 0.005 [HAL] HALFILE = cia402.hal #SHUTDOWN = shutdown.hal HALUI = halui [HALUI] [TRAJ] HOME = 16 12 7 COORDINATES = XYZ LINEAR_UNITS = in ANGULAR_UNITS = deg DEFAULT_LINEAR_VELOCITY = .25 MAX_LINEAR_VELOCITY = .5 MIN_LINEAR_VELOCITY = .01 DEFAULT_ANGULAR_VELOCITY = 360 MAX_ANGULAR_VELOCITY = 720 POSITION_FILE = position.txt [EMCIO] # Name of IO controller program, e.g., iov2 has tool changer stuff EMCIO =         iov2 CYCLE_TIME =    0.100 # tool table file TOOL_TABLE =    cia402.tbl TOOL_CHANGE_POSITION = 0 0 50.8 #RANDOM_TOOLCHANGER = 1 [KINS] JOINTS = 3 KINEMATICS = trivkins kinstype=both coordinates=xyz [AXIS_X] MIN_LIMIT = 0.1 MAX_LIMIT = 17.9 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000 [JOINT_0] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? #STEPGEN_MAXVEL = 1.25 #STEPGEN_MAXACCEL = 1.25 SCALE = 1 FERROR = 200 MIN_FERROR = 50 MIN_LIMIT = 0 MAX_LIMIT = 18 HOME                    = 16 HOME_OFFSET                = 16 HOME_SEQUENCE            = 0 HOME_SEARCH_VEL = -.125 HOME_LATCH_VEL = -.125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS        = NO [AXIS_Y] MIN_LIMIT = 0.1 MAX_LIMIT = 12.9 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000 [JOINT_1] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? #STEPGEN_MAXVEL = 1.25 #STEPGEN_MAXACCEL = 1.25 STEP_SCALE = 1 FERROR = 2 MIN_FERROR = 20 MIN_LIMIT = 0 MAX_LIMIT = 13 HOME                    = 12 HOME_OFFSET                = 12 HOME_SEQUENCE            = 1 HOME_SEARCH_VEL = .125 HOME_LATCH_VEL = .125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS        = NO [JOINT_2] TYPE = LINEAR MAX_VELOCITY = .5 MAX_ACCELERATION = 10 # The values below should be 25% larger than MAX_VELOCITY and MAX_ACCELERATION # If using BACKLASH compensation STEPGEN_MAXACCEL should be 100% larger. # is this applicable for ethercat???? STEPGEN_MAXVEL = 1.25 STEPGEN_MAXACCEL = 1.25 STEP_SCALE = 1 FERROR = 200 MIN_FERROR = 20 MIN_LIMIT = 3.4 MAX_LIMIT = 8.1 HOME                    = 7 HOME_OFFSET                = 7 HOME_SEQUENCE            = 2 HOME_SEARCH_VEL = .125 HOME_LATCH_VEL = .125 HOME_USE_INDEX = NO HOME_IGNORE_LIMITS    = NO [AXIS_Z] MIN_LIMIT = 3.5 MAX_LIMIT = 8 MAX_VELOCITY = .5 MAX_ACCELERATION = 10 BACKLASH = 0.0000
Code:
<masters>   <master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">              <slave idx="0" type="generic" vid="00000A88" pid="0a880013" configPdos="true">    <!-- Joint 0 -->       <sdoConfig idx="2009" subIdx="1"><sdoDataRaw data ="00 32"/></sdoConfig> <!-- position p gain default is 1000 -->   <sdoConfig idx="2009" subIdx="2"><sdoDataRaw data ="00 08"/></sdoConfig> <!-- velocity p gain default is 256 -->   <sdoConfig idx="2009" subIdx="3"><sdoDataRaw data ="00 01"/></sdoConfig> <!-- position i gain default is 200 -->            <syncManager idx="0" dir="out"> </syncManager>    <syncManager idx="1" dir="out"> </syncManager>    <syncManager idx="2" dir="out">     <pdo idx="1600">      <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>      <pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>      <pdoEntry idx="60b8" subIdx="00" bitLen="16" halPin="touchprobefunction0" halType="bit"/>     </pdo>     <pdo idx="1601">      <pdoEntry idx="6081" subIdx="00" bitLen="32" halPin="profile-velocity" halType="u32"/>      <pdoEntry idx="6083" subIdx="00" bitLen="32" halPin="target-accel" halType="u32"/>      <pdoEntry idx="6084" subIdx="00" bitLen="32" halPin="target-decel" halType="u32"/>      <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>     </pdo>     <pdo idx="1602">      <pdoEntry idx="60ff" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>     </pdo>    </syncManager>    <syncManager idx="3" dir="in">     <pdo idx="1a00">      <pdoEntry idx="603f" subIdx="00" bitLen="16" halPin="errorcode" halType="bit"/>      <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>      <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>      <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>      <pdoEntry idx="60b9" subIdx="00" bitLen="16" halPin="touchprobestat" halType="bit"/>      <pdoEntry idx="60ba" subIdx="00" bitLen="32" halPin="touchprobe1pos" halType="s32"/>      <pdoEntry idx="60fd" subIdx="00" bitLen="32" halPin="digitalinputs" halType="s32"/>     </pdo>     <pdo idx="1a01">      <pdoEntry idx="606c" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>     </pdo>    </syncManager>    <dcConf assignActivate="300" sync0Cycle="1000000"/>   </slave>       <slave idx="1" type="generic" vid="00000A88" pid="0a880013" configPdos="true">    <!-- Joint 1 -->              <sdoConfig idx="2009" subIdx="1"><sdoDataRaw data ="00 32"/></sdoConfig> <!-- position p gain default is 1000 -->   <sdoConfig idx="2009" subIdx="2"><sdoDataRaw data ="00 08"/></sdoConfig> <!-- velocity p gain default is 256 -->   <sdoConfig idx="2009" subIdx="3"><sdoDataRaw data ="00 01"/></sdoConfig> <!-- position i gain default is 200 -->          <syncManager idx="0" dir="out"> </syncManager>    <syncManager idx="1" dir="out"> </syncManager>    <syncManager idx="2" dir="out">     <pdo idx="1600">      <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>      <pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>      <pdoEntry idx="60b8" subIdx="00" bitLen="16" halPin="touchprobefunction0" halType="bit"/>     </pdo>     <pdo idx="1601">      <pdoEntry idx="6081" subIdx="00" bitLen="32" halPin="profile-velocity" halType="u32"/>      <pdoEntry idx="6083" subIdx="00" bitLen="32" halPin="target-accel" halType="u32"/>      <pdoEntry idx="6084" subIdx="00" bitLen="32" halPin="target-decel" halType="u32"/>      <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>     </pdo>     <pdo idx="1602">      <pdoEntry idx="60ff" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>     </pdo>    </syncManager>    <syncManager idx="3" dir="in">     <pdo idx="1a00">      <pdoEntry idx="603f" subIdx="00" bitLen="16" halPin="errorcode" halType="bit"/>      <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>      <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>      <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>      <pdoEntry idx="60b9" subIdx="00" bitLen="16" halPin="touchprobestat" halType="bit"/>      <pdoEntry idx="60ba" subIdx="00" bitLen="32" halPin="touchprobe1pos" halType="s32"/>      <pdoEntry idx="60fd" subIdx="00" bitLen="32" halPin="digitalinputs" halType="s32"/>     </pdo>     <pdo idx="1a01">      <pdoEntry idx="606c" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>     </pdo>    </syncManager>    <dcConf assignActivate="300" sync0Cycle="1000000"/>   </slave>        <!-- Joint 2 -->     <slave idx="2" type="generic" vid="00000a88" pid="0a880002" configPdos="true">       <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>       <sdoConfig idx="2000" subIdx="0"><sdoDataRaw data ="88 13"/></sdoConfig>  <!-- Max motor current (5.0) -->       <sdoConfig idx="2007" subIdx="3"><sdoDataRaw data ="01"/></sdoConfig>     <!-- Input 3 - CCW Limit -->       <sdoConfig idx="2007" subIdx="4"><sdoDataRaw data ="02"/></sdoConfig>     <!-- Input 4 - CW Limit -->       <sdoConfig idx="2007" subIdx="5"><sdoDataRaw data ="03"/></sdoConfig>     <!-- Input 5 - Home Function -->       <sdoConfig idx="2007" subIdx="6"><sdoDataRaw data ="05"/></sdoConfig>     <!-- Input 6 - Emergency Stop -->       <sdoConfig idx="2011" subIdx="0"><sdoDataRaw data ="01 00"/></sdoConfig>  <!-- Closed loop -->       <sdoConfig idx="6098" subIdx="0"><sdoDataRaw data ="11 00"/></sdoConfig>  <!-- Home mode 17 -->       <sdoConfig idx="607C" subIdx="0"><sdoDataRaw data ="00 00"/></sdoConfig>  <!-- Home offset 0  -->       <sdoConfig idx="609A" subIdx="0"><sdoDataRaw data ="F4 01"/></sdoConfig>  <!-- Home accelleration 500 -->       <sdoConfig idx="6099" subIdx="01"><sdoDataRaw data ="C4 09"/></sdoConfig>  <!-- Home fast speed 2500-->       <sdoConfig idx="6099" subIdx="02"><sdoDataRaw data ="F4 01"/></sdoConfig>  <!-- Home slow speed 500 -->       <syncManager idx="2" dir="out">         <pdo idx="1600">           <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>           <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>           <!-- Target Position -->           <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>           <!-- Target Velocity -->           <pdoEntry idx="60FF" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>           <!-- Digtial Outputs (manufacturer's extension ECT86/ECT60)-->           <pdoEntry idx="204A" subIdx="0" bitLen="16" halType="complex">             <complexEntry bitLen="1" halPin="out-1" halType="bit"/>             <complexEntry bitLen="1" halPin="out-2" halType="bit"/>             <complexEntry bitLen="14"/>           </pdoEntry>         </pdo>       </syncManager>       <syncManager idx="3" dir="in">         <pdo idx="1a00">           <pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>           <pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="opmode-display" halType="s32"/>           <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="actual-position" halType="s32"/>           <pdoEntry idx="606C" subIdx="00" bitLen="32" halPin="actual-velocity" halType="s32"/>           <pdoEntry idx="6077" subIdx="00" bitLen="32" halPin="actual-torque" halType="s32"/>           <!-- Digtial_inputs (cia402 compatible) -->           <pdoEntry idx="60FD" subIdx="0" bitLen="32" halType="complex">             <complexEntry bitLen="1" halPin="CW-limit" halType="bit"/>             <complexEntry bitLen="1" halPin="CCW-limit" halType="bit"/>             <complexEntry bitLen="1" halPin="in-home" halType="bit"/>             <complexEntry bitLen="13"/>             <complexEntry bitLen="1" halPin="in-1" halType="bit"/>             <complexEntry bitLen="1" halPin="in-2" halType="bit"/>             <complexEntry bitLen="1" halPin="in-3" halType="bit"/>             <complexEntry bitLen="1" halPin="in-4" halType="bit"/>             <complexEntry bitLen="1" halPin="in-5" halType="bit"/>             <complexEntry bitLen="1" halPin="in-6" halType="bit"/>             <complexEntry bitLen="10"/>           </pdoEntry>                   </pdo>       </syncManager>     </slave>         </master> </masters>

 

Please Log in to join the conversation.

Time to create page: 0.187 seconds
Powered by Kunena Forum