Getting (hopefully) close to an Rtelligent build

More
21 Jan 2024 00:11 #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.
 

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
 

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)
 

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)
 

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.

 
Attachments:

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

More
21 Jan 2024 00:20 #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 or Create an account to join the conversation.

More
04 Feb 2024 02:53 #292353 by farmer_mike
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build
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

 
Attachments:

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

More
12 Sep 2025 13:35 - 13 Sep 2025 01:36 #334882 by farmer_mike
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build
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

###########################################################
#
# 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

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]<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]
Last edit: 13 Sep 2025 01:36 by farmer_mike. Reason: code formatting and to add suggestion about me needing to fill out the SDO information

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

More
13 Sep 2025 16:10 #334936 by farmer_mike
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build
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 or Create an account to join the conversation.

More
13 Sep 2025 21:08 #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 or Create an account to join the conversation.

More
14 Sep 2025 04:59 #334960 by farmer_mike
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build
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.
###########################################################
#
# 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
# 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

<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 or Create an account to join the conversation.

Time to create page: 0.180 seconds
Powered by Kunena Forum