Advanced Search

Search Results (Searched for: halpin)

  • Hakan
  • Hakan
04 Feb 2026 18:24

Stepperonline Y series/ YAKO YKD2608PE configuration

Category: EtherCAT

That seems to be ok.
The error message is in the output from the linuxcnc command
 

And if you look in the ethercat-conf.xml you find the word BLANK
 

In place of BLANK there should be one of the hal types u32, s32, float-ieee, bit.
Have a look at the ethercat-conf.xml in this example I often refer to
github.com/dbraun1981/hal-cia402/tree/main/example
Modify both the halType and the halPin .

This example also shows how you use the cia402 component to
connect the servo drives to the joints.


 
  • jrc
  • jrc
02 Feb 2026 09:13

Step By Step Help Needed . EL8 Leadshine to PI 5

Category: EtherCAT

The xml settings for the spindle using an EL8-1000 are:
<code>
      <!-- Spindle Leadshine EL8 1000 servo drive -->
    <slave idx="4" type="generic" vid="00004321" pid="000010c4" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <syncManager idx="2" dir="out">
          <pdo idx="1601">
              <pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>
              <pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="opmode" halType="s32"/>
             <!--  <pdoEntry idx="6098" subIdx="00" bitLen="8" halPin="homing-method" halType="s32"/> -->
              <pdoEntry idx="6071" subIdx="00" bitLen="16" halPin="target-torque" halType="s32"/>
              <pdoEntry idx="6071" subIdx="00" bitLen="16" halPin="target-torque-dummy" halType="s32"/>
              <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
              <pdoEntry idx="60FF" subIdx="00" bitLen="32" halPin="target-velocity" halType="s32"/>
          </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="16" halPin="actual-torque" halType="s32"/>
             </pdo>
         </syncManager>
    </slave>
</code>
 
  • rodw
  • rodw's Avatar
22 Jan 2026 11:11
Replied by rodw on topic Kinko ECT coupler

Kinko ECT coupler

Category: EtherCAT

Probably more like this where a bitmap exists. Note that in places its padded with unused bits
          <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> 
 
  • Hakan
  • Hakan
22 Jan 2026 10:33 - 22 Jan 2026 10:34
Replied by Hakan on topic Kinko ECT coupler

Kinko ECT coupler

Category: EtherCAT

Try
          <pdoEntry idx="0x7020" subIdx="0x01" bitLen="8" halPin="out-byte-0" halType="bit"/>
Note the bit.
  • bkt
  • bkt's Avatar
19 Jan 2026 12:27
Kinko ECT coupler was created by bkt

Kinko ECT coupler

Category: EtherCAT

hello at all ... i try to load new coupler kinko etc .... with some in / out analogue in and out relays ... i try to use a custo xml based on pdos and sdos teminal reply .....
<masters>
  <master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
    <slave idx="0" type="generic" vid="0x00681168" pid="0x52503230" configPdos="true">

      <sdoConfig idx="0x1c12" subIdx="0"><sdoDataRaw data="00"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="0"><sdoDataRaw data="00"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="1"><sdoDataRaw data="0216"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="2"><sdoDataRaw data="0316"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="0"><sdoDataRaw data="02"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="1"><sdoDataRaw data="001a"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="2"><sdoDataRaw data="011a"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="0"><sdoDataRaw data="02"/></sdoConfig>

      <syncManager idx="2" dir="out">
        <pdo idx="0x1602">
          <pdoEntry idx="0x7020" subIdx="0x01" bitLen="8" halPin="out-byte-0" halType="u32"/>
          <pdoEntry idx="0x7020" subIdx="0x02" bitLen="8" halPin="out-byte-1" halType="u32"/>
        </pdo>
        <pdo idx="0x1603">
          <pdoEntry idx="0x7030" subIdx="0x01" bitLen="8" halPin="relay-byte-0" halType="u32"/>
        </pdo>
      </syncManager>

      <syncManager idx="3" dir="in">
        <pdo idx="0x1a00">
          <pdoEntry idx="0x6000" subIdx="0x01" bitLen="8" halPin="in-byte-0" halType="u32"/>
          <pdoEntry idx="0x6000" subIdx="0x02" bitLen="8" halPin="in-byte-1" halType="u32"/>
        </pdo>
        <pdo idx="0x1a01">
          <pdoEntry idx="0x6010" subIdx="0x01" bitLen="16" halPin="analog-0" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x02" bitLen="16" halPin="analog-1" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x03" bitLen="16" halPin="analog-2" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x04" bitLen="16" halPin="analog-3" halType="s32"/>
        </pdo>
      </syncManager>

    </slave>
  </master>
</masters>

seems to work ... but for obtain the real value of pdos need to use these one ...
<masters>
  <master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
    <slave idx="0" type="generic" vid="0x00681168" pid="0x52503230" configPdos="true">

      <sdoConfig idx="0x1c12" subIdx="0"><sdoDataRaw data="00"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="0"><sdoDataRaw data="00"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="1"><sdoDataRaw data="0216"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="2"><sdoDataRaw data="0316"/></sdoConfig>
      <sdoConfig idx="0x1c12" subIdx="0"><sdoDataRaw data="02"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="1"><sdoDataRaw data="001a"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="2"><sdoDataRaw data="011a"/></sdoConfig>
      <sdoConfig idx="0x1c13" subIdx="0"><sdoDataRaw data="02"/></sdoConfig>

      <syncManager idx="2" dir="out">
        <pdo idx="0x1602">
          <pdoEntry idx="0x7020" subIdx="0x01" bitLen="8" halPin="out-byte-0" halType="u32"/>
          <pdoEntry idx="0x7020" subIdx="0x02" bitLen="8" halPin="out-byte-1" halType="u32"/>
        </pdo>
        <pdo idx="0x1603">
          <pdoEntry idx="0x7030" subIdx="0x01" bitLen="8" halPin="relay-byte-0" halType="u32"/>
        </pdo>
      </syncManager>

      <syncManager idx="3" dir="in">
        <pdo idx="0x1a00">
          <pdoEntry idx="0x6000" subIdx="0x01" bitLen="8" halPin="in-byte-0" halType="u32"/>
          <pdoEntry idx="0x6000" subIdx="0x02" bitLen="8" halPin="in-byte-1" halType="u32"/>
        </pdo>
        <pdo idx="0x1a01">
          <pdoEntry idx="0x6010" subIdx="0x01" bitLen="16" halPin="analog-0" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x02" bitLen="16" halPin="analog-1" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x03" bitLen="16" halPin="analog-2" halType="s32"/>
          <pdoEntry idx="0x6010" subIdx="0x04" bitLen="16" halPin="analog-3" halType="s32"/>
        </pdo>
      </syncManager>

    </slave>
  </master>
</masters>

problem become create everytime a new .hal file based on new module added .... for obtain bit correctly need to use bitslice component .... that is no so fast .... there is a giude for create a new lcec-kinko-c e lcec-kinko.h library so no need to use bitsile or other component for reading and writing bit?? ... thanks to any help .... (p.s. analogue reading is good) .... for better explaine me I add some pdos reading ....
adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 3

0x00 0

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 4

0x08 8

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 3

[sudo] password for adm1:

0x00 0

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 2

0x03 3

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 1

0x00 0

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 0

0x11 17

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 4

0x08 8

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 3

0x00 0

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 2

0x03 3

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 1

0x00 0

adm1@db13:~$ sudo ethercat reg_read -p 0 -t uint8 0

0x11 17

regards
  • Ahmed.emara
  • Ahmed.emara
22 Dec 2025 15:01
leadshine R3EC was created by Ahmed.emara

leadshine R3EC

Category: EtherCAT

hello guys
i really need help with configuring R3EC IO coupler + R3 1600 DI + R3 0016-P DO ,to my etherCAT system,
i wrote XML file but when i check the status of the slaves all the drivers are in OP mode except the R3EC is in SAFEOP and it does not switch to OP mode,
here is the XML section for the R3EC i used : 
<slave idx="6" type="generic" vid="0x00004321" pid="0x61400025" configPdos="true">
<!-- SM2: Outputs -->
<syncManager idx="2" dir="out">
<pdo idx="0x7000">
<pdoEntry idx="0x7000" subIdx="0x01" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="do-01" halType="bit"/>
<complexEntry bitLen="1" halPin="do-02" halType="bit"/>
<complexEntry bitLen="1" halPin="do-03" halType="bit"/>
<complexEntry bitLen="1" halPin="do-04" halType="bit"/>
<complexEntry bitLen="1" halPin="do-05" halType="bit"/>
<complexEntry bitLen="1" halPin="do-06" halType="bit"/>
<complexEntry bitLen="1" halPin="do-07" halType="bit"/>
<complexEntry bitLen="1" halPin="do-08" halType="bit"/>
<complexEntry bitLen="1" halPin="do-09" halType="bit"/>
<complexEntry bitLen="1" halPin="do-10" halType="bit"/>
<complexEntry bitLen="1" halPin="do-11" halType="bit"/>
<complexEntry bitLen="1" halPin="do-12" halType="bit"/>
<complexEntry bitLen="1" halPin="do-13" halType="bit"/>
<complexEntry bitLen="1" halPin="do-14" halType="bit"/>
<complexEntry bitLen="1" halPin="do-15" halType="bit"/>
<complexEntry bitLen="1" halPin="do-16" halType="bit"/>
</pdoEntry>
</pdo>
</syncManager>
<!-- SM3: Inputs -->
<syncManager idx="3" dir="in">
<pdo idx="0x6000">
<pdoEntry idx="0x6000" subIdx="0x01" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="di-01" halType="bit"/>
<complexEntry bitLen="1" halPin="di-02" halType="bit"/>
<complexEntry bitLen="1" halPin="di-03" halType="bit"/>
<complexEntry bitLen="1" halPin="di-04" halType="bit"/>
<complexEntry bitLen="1" halPin="di-05" halType="bit"/>
<complexEntry bitLen="1" halPin="di-06" halType="bit"/>
<complexEntry bitLen="1" halPin="di-07" halType="bit"/>
<complexEntry bitLen="1" halPin="di-08" halType="bit"/>
<complexEntry bitLen="1" halPin="di-09" halType="bit"/>
<complexEntry bitLen="1" halPin="di-10" halType="bit"/>
<complexEntry bitLen="1" halPin="di-11" halType="bit"/>
<complexEntry bitLen="1" halPin="di-12" halType="bit"/>
<complexEntry bitLen="1" halPin="di-13" halType="bit"/>
<complexEntry bitLen="1" halPin="di-14" halType="bit"/>
<complexEntry bitLen="1" halPin="di-15" halType="bit"/>
<complexEntry bitLen="1" halPin="di-16" halType="bit"/>
</pdoEntry>
</pdo>
</syncManager>
</slave>

i appreciate your help guys i have been stuck with this problem since two weeks!
  • emresensoy
  • emresensoy
04 Dec 2025 07:02 - 04 Dec 2025 07:55
Replied by emresensoy on topic Beckhoff EL2522 lcec xml file

Beckhoff EL2522 lcec xml file

Category: EtherCAT

with lcec_configgen, It worked with a few minor tweaks. Great.
<slave idx="6" type="generic" vid="0x00000002" pid="0x09da3052" configPdos="true">
      <!--EL2522 2K. Pulse Train Ausgang-->
      <syncManager idx="0" dir="in"/>
      <syncManager idx="1" dir="out"/>
      <syncManager idx="2" dir="out">
        <pdo idx="1600">
          <!--PTO RxPDO-Map Control Ch.1-->
          <pdoEntry idx="7000" subIdx="01" bitLen="1" halPin="ch-1-frequency-select" halType="bit"/>
          <pdoEntry idx="7000" subIdx="02" bitLen="1" halPin="ch-1-disable-ramp" halType="bit"/>
          <pdoEntry idx="7000" subIdx="03" bitLen="1" halPin="ch-1-go-counter" halType="bit"/>
          <pdoEntry idx="7000" subIdx="11" bitLen="16" halPin="ch-1-frequency-value" halType="u32"/>
        </pdo>
        <pdo idx="1603">
          <!--PTO RxPDO-Map Target Ch.1-->
          <pdoEntry idx="7000" subIdx="12" bitLen="32" halPin="ch-1-target-counter-value" halType="u32"/>
        </pdo>
        <pdo idx="1605">
          <!--PTO RxPDO-Map Control Ch.2-->
          <pdoEntry idx="7010" subIdx="01" bitLen="1" halPin="ch-2-frequency-select" halType="bit"/>
          <pdoEntry idx="7010" subIdx="02" bitLen="1" halPin="ch-2-disable-ramp" halType="bit"/>
          <pdoEntry idx="7010" subIdx="03" bitLen="1" halPin="ch-2-go-counter" halType="bit"/>
          <pdoEntry idx="7010" subIdx="11" bitLen="16" halPin="ch-2-frequency-value" halType="u32"/>
        </pdo>
        <pdo idx="1608">
          <!--PTO RxPDO-Map Target Ch.2-->
          <pdoEntry idx="7010" subIdx="12" bitLen="32" halPin="ch-2-target-counter-value" halType="u32"/>
        </pdo>
        <pdo idx="160b">
          <!--ENC RxPDO-Map Control Ch.1-->
          <pdoEntry idx="7020" subIdx="03" bitLen="1" halPin="ch-1-set-counter" halType="bit"/>
          <pdoEntry idx="7020" subIdx="10" bitLen="1" halPin="ch-1-reserved" halType="bit"/>
          <pdoEntry idx="7020" subIdx="11" bitLen="32" halPin="ch-1-set-counter-value" halType="u32"/>
        </pdo>
        <pdo idx="160d">
          <!--ENC RxPDO-Map Control Ch.2-->
          <pdoEntry idx="7030" subIdx="03" bitLen="1" halPin="ch-2-set-counter" halType="bit"/>
          <pdoEntry idx="7030" subIdx="10" bitLen="1" halPin="ch-2-reserved" halType="bit"/>
          <pdoEntry idx="7030" subIdx="11" bitLen="32" halPin="ch-2-set-counter-value" halType="u32"/>
        </pdo>
      </syncManager>
      <syncManager idx="3" dir="in">
        <pdo idx="1a00">
          <!--PTO TxPDO-Map Status Ch.1-->
          <pdoEntry idx="6000" subIdx="01" bitLen="1" halPin="ch-1-sel-ack-end-counter" halType="bit"/>
          <pdoEntry idx="6000" subIdx="02" bitLen="1" halPin="ch-1-ramp-active" halType="bit"/>
          <pdoEntry idx="6000" subIdx="07" bitLen="1" halPin="ch-1-error" halType="bit"/>
          <pdoEntry idx="6000" subIdx="0e" bitLen="1" halPin="ch-1-sm3-sync-error" halType="bit"/>
          <pdoEntry idx="6000" subIdx="10" bitLen="1" halPin="ch-1-txpdo-toggle" halType="bit"/>
        </pdo>
        <pdo idx="1a01">
          <!--PTO TxPDO-Map Status Ch.2-->
          <pdoEntry idx="6010" subIdx="01" bitLen="1" halPin="ch-2-sel-ack-end-counter" halType="bit"/>
          <pdoEntry idx="6010" subIdx="02" bitLen="1" halPin="ch-2-ramp-active" halType="bit"/>
          <pdoEntry idx="6010" subIdx="07" bitLen="1" halPin="ch-2-error" halType="bit"/>
          <pdoEntry idx="6010" subIdx="0e" bitLen="1" halPin="ch-2-sm3-sync-error" halType="bit"/>
          <pdoEntry idx="6010" subIdx="10" bitLen="1" halPin="ch-2-txpdo-toggle" halType="bit"/>
        </pdo>
        <pdo idx="1a03">
          <!--ENC TxPDO-Map Status Ch.1-->
          <pdoEntry idx="6020" subIdx="03" bitLen="1" halPin="ch-1-set-counter-done" halType="bit"/>
          <pdoEntry idx="6020" subIdx="04" bitLen="1" halPin="ch-1-counter-underflow" halType="bit"/>
          <pdoEntry idx="6020" subIdx="05" bitLen="1" halPin="ch-1-counter-overflow" halType="bit"/>
          <pdoEntry idx="6020" subIdx="0e" bitLen="1" halPin="ch-1-sm3--sync-error" halType="bit"/>
          <pdoEntry idx="6020" subIdx="0f" bitLen="1" halPin="ch-1-txpdo-state" halType="bit"/>
          <pdoEntry idx="6020" subIdx="10" bitLen="1" halPin="ch-1-sm3--txpdo-toggle" halType="bit"/>
          <pdoEntry idx="6020" subIdx="11" bitLen="32" halPin="ch-1-counter-value" halType="u32"/>
        </pdo>
        <pdo idx="1a05">
          <!--ENC TxPDO-Map Status Ch.2-->
          <pdoEntry idx="6030" subIdx="03" bitLen="1" halPin="ch-2-set-counter-done" halType="bit"/>
          <pdoEntry idx="6030" subIdx="04" bitLen="1" halPin="ch-2-counter-underflow" halType="bit"/>
          <pdoEntry idx="6030" subIdx="05" bitLen="1" halPin="ch-2-counter-overflow" halType="bit"/>
          <pdoEntry idx="6030" subIdx="0e" bitLen="1" halPin="ch-2-sm3--sync-error" halType="bit"/>
          <pdoEntry idx="6030" subIdx="0f" bitLen="1" halPin="ch-2-txpdo-state" halType="bit"/>
          <pdoEntry idx="6030" subIdx="10" bitLen="1" halPin="ch-2-sm3--txpdo-toggle" halType="bit"/>
          <pdoEntry idx="6030" subIdx="11" bitLen="32" halPin="ch-2-counter-value" halType="u32"/>
        </pdo>
      </syncManager>
    </slave>
  • miro199315
  • miro199315
13 Nov 2025 05:56 - 13 Nov 2025 05:58
Replied by miro199315 on topic Configuration Schnider electric ILA2 Servo

Configuration Schnider electric ILA2 Servo

Category: EtherCAT

Thanks a lot for looking into this and taking the time to check my issue. I really appreciate the help and suggestions.
Below I’m attaching the XML configuration and system logs for reference.

[35409.201585] EtherCAT: Requesting master 0...
[35409.201588] EtherCAT: Successfully requested master 0.
[35409.201704] EtherCAT 0: Domain0: Logical address 0x00000000, 46 byte, expected working counter 3.
[35409.201706] EtherCAT 0:   Datagram domain0-0-main: Logical offset 0x00000000, 46 byte, type LRW.
[35409.201717] EtherCAT 0: Master thread exited.
[35409.201718] EtherCAT 0: Stopping EoE thread.
[35409.201726] EtherCAT 0: EoE thread exited.
[35409.201726] EtherCAT 0: Starting EoE thread.
[35409.201750] EtherCAT 0: Starting EtherCAT-OP thread.
[35409.201765] EtherCAT WARNING 0: 12 datagrams TIMED OUT!
[35409.331702] EtherCAT WARNING 0-1: Other mailbox protocol response for eoe0s1.
[35409.331956] EtherCAT ERROR 0-1: Reception of CoE download response failed: No response.
[35409.331959] EtherCAT WARNING 0-1: Failed to map PDO entry 0x0000:00 (8 bit) to position 6.
[35409.331961] EtherCAT WARNING 0-1: Currently mapped PDO entries: (none). Entries to map: 0x6040:00/16 0x6060:00/8 0x607A:00/32 0x60FF:00/32 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8
[35409.331973] EtherCAT WARNING 0-1: Failed to configure mapping of PDO 0x1600.
[35409.355684] EtherCAT ERROR 0-1: Mailbox error response received - Unknown error reply code 0x0000.
[35409.355688] EtherCAT WARNING 0-1: Invalid mailbox response for eoe0s1.
[35409.375692] EtherCAT WARNING 0-1: Other mailbox protocol response for eoe0s1.
[35409.375948] EtherCAT ERROR 0-1: Reception of CoE download response failed: No response.
[35409.375951] EtherCAT WARNING 0-1: Failed to map PDO entry 0x0000:00 (8 bit) to position 11.
[35409.375953] EtherCAT WARNING 0-1: Currently mapped PDO entries: (none). Entries to map: 0x6041:00/16 0x6061:00/8 0x6064:00/32 0x606C:00/32 0x6077:00/16 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8 0x0000:00/8
[35409.375965] EtherCAT WARNING 0-1: Failed to configure mapping of PDO 0x1A00.
[35409.389044] EtherCAT ERROR 0-1: Failed to set SAFEOP state, slave refused state change (PREOP + ERROR).
[35409.390043] EtherCAT ERROR 0-1: AL status message 0x001E: "Invalid input configuration".
[35409.392045] EtherCAT 0-1: Acknowledged state PREOP.
[35409.403540] EtherCAT 0: Slave states on main device: PREOP, OP.
linuxcnc@linuxcnc:~$ 
 

[code]<?xml version="1.0" ?>
<masters>
  <master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
    <slave idx="1" type="generic" vid="0800005a" pid="000022db" configPdos="true">
      
      <!-- Distributed Clocks -->
      <dcConf assignActivate="300" sync0Cycle="1000000" sync0Shift="0" />
      
      <!-- SyncManagers -->
      <syncManager idx="2" dir="out">
        <pdo idx="1600">
          <pdoEntry idx="6040" subIdx="0" bitLen="16" halPin="cia-controlword" halType="u32" />
          <pdoEntry idx="6060" subIdx="0" bitLen="8"  halPin="opmode" halType="s32" />
          <pdoEntry idx="607A" subIdx="0" bitLen="32" halPin="target-position" halType="s32" />
          <pdoEntry idx="60FF" subIdx="0" bitLen="32" halPin="target-velocity" halType="s32" />
        </pdo>
      </syncManager>

      <syncManager idx="3" dir="in">
        <pdo idx="1A00">
          <pdoEntry idx="6041" subIdx="0" bitLen="16" halPin="cia-statusword" halType="u32" />
          <pdoEntry idx="6061" subIdx="0" bitLen="8"  halPin="opmode-display" halType="s32" />
          <pdoEntry idx="6064" subIdx="0" bitLen="32" halPin="actual-position" halType="s32" />
          <pdoEntry idx="606C" subIdx="0" bitLen="32" halPin="actual-velocity" halType="s32" />
          <pdoEntry idx="6077" subIdx="0" bitLen="16" halPin="actual-torque" halType="s32" />
        </pdo>
      </syncManager>

    </slave>
  </master>
</masters>

[/code]


[code] 
[/code]
  • conman
  • conman
02 Nov 2025 19:03

Help with Inovance IS620N Servo Drive - Stays in PREOP

Category: EtherCAT

Hello, thank you for that, I added it but still the same result.

<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
<slave idx="0" type="generic" name="IS620N_ECAT_v2.6.8" vid="0x00100000" pid="0x000C0108" configPdos="true">
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
<syncManager idx="2" dir="out">
<pdo idx="1701">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="cia-controlword" halType="u32"/>
<pdoEntry idx="6060" subIdx="00" bitLen="8" halPin="OperationMode" halType="s32"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="TargetPosition" halType="s32"/>
<pdoEntry idx="60FF" subIdx="00" bitLen="32" halPin="TargetVelocity" halType="s32"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1b01">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="cia-statusword" halType="u32"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="ActualPosition" halType="s32"/>
<pdoEntry idx="6061" subIdx="00" bitLen="8" halPin="ActualOperationMode" halType="s32"/>
<pdoEntry idx="606C" subIdx="00" bitLen="32" halPin="ActualVelocity" halType="s32"/>
<pdoEntry idx="6077" subIdx="00" bitLen="32" halPin="ActualTorque" halType="s32"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>
  • Hakan
  • Hakan
29 Oct 2025 10:47

Long initialization of Ethercat on servo drive SV660N

Category: EtherCAT

Or is it that you don't have the "target-velocity" pdo? Just delete it. Same with "actual-velocity" and "actual-torque". Nice to have, not needed.
Minimal
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
  • lorenzing
  • lorenzing
17 Oct 2025 13:00
Festo CMMT-ST was created by lorenzing

Festo CMMT-ST

Category: EtherCAT

Good morning, I'm trying to build an XYYZZ gantry with two motors on the Y and Z axes. To do this, I've used 5 CMMT-ST drives with absolute encoder servomotors. I have some doubts about the homing procedure. At the moment I can see the drives, but I haven't managed to move them yet. Before causing any damage, I wanted to get your opinion on the configuration files, since this is my first time using LinuxCNC.

ethercat.ini
[EMC]
VERSION = 1.1
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
#DEBUG = 0x7FFFFFFF
DEBUG = 0

[DISPLAY]
DISPLAY = axis
CYCLE_TIME = 0.1
MAX_LINEAR_VELOCITY = 50.0
DEFAULT_LINEAR_VELOCITY = 10.0
POSITION_OFFSET = RELATIVE
POSITION_FEEDBACK = ACTUAL

[TASK]
TASK = milltask
CYCLE_TIME = 0.01

[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000


# section for main IO controller parameters -----------------------------------
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
TOOL_TABLE = tool.tbl

[HAL]
HALFILE = ethercat.hal
# Single file that is executed after the GUI has started.  Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
#POSTGUI_HALFILE = test_postgui.hal
HALUI = halui

[RS274NGC]
PARAMETER_FILE = linuxcnc.var

[TRAJ]
COORDINATES = XYYZZ
LINEAR_UNITS = mm
ANGULAR_UNITS = degree
MAX_LINEAR_VELOCITY = 25.0
DEFAULT_LINEAR_VELOCITY = 2.50

[KINS]
JOINTS = 5
KINEMATICS = trivkins coordinates=XYYZZ kinstype=BOTH

# --- X Axis ---
[AXIS_X]
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0


[JOINT_0]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0
FERROR = 1000
MIN_FERROR = 1000
HOME_ABSOLUTE_ENCODER = 2
HOME_SEQUENCE = 0


# --- Y Axis (dual) ---
[AXIS_Y]
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0

[JOINT_1]
TYPE = LINEAR
HOME = 0.0
FERROR = 1000
MIN_FERROR = 1000
# both Y joints home together
HOME_SEQUENCE = 1
HOME_ABSOLUTE_ENCODER = 2
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0

[JOINT_2]
TYPE = LINEAR
HOME = 0.0
FERROR = 1000
MIN_FERROR = 1000
# both Y joints home together
HOME_SEQUENCE = 1
HOME_ABSOLUTE_ENCODER = 2
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0


# --- Z Axis (dual) ---
[AXIS_Z]
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0

[JOINT_3]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0
FERROR = 1000
MIN_FERROR = 1000
# both Z joints home together
HOME_SEQUENCE = 2
HOME_ABSOLUTE_ENCODER = 2

[JOINT_4]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 50.0
MAX_ACCELERATION = 200.0
MIN_LIMIT = -30.0
MAX_LIMIT = 1700.0
FERROR = 1000
MIN_FERROR = 1000
# both Z joints home together
HOME_SEQUENCE = 2
HOME_ABSOLUTE_ENCODER = 2

ethercat.hal
# --- load components ---
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=5

# load EtherCAT xml then drivers
loadusr -W lcec_conf ethercat-conf.xml
loadrt lcec
loadrt cia402 count=5

# estop loopback
net estop-loop iocontrol.0.user-enable-out iocontrol.0.emc-enable-in

#machine enabled if no estop loopback
#setp iocontrol.0.emc-enable-in 1

# --- add functions to servo-thread ---
addf lcec.read-all            servo-thread

# read from cia402 drivers (one per joint)
addf cia402.0.read-all        servo-thread
addf cia402.1.read-all        servo-thread
addf cia402.2.read-all        servo-thread
addf cia402.3.read-all        servo-thread
addf cia402.4.read-all        servo-thread

# motion stack
addf motion-command-handler   servo-thread
addf motion-controller        servo-thread

# writes: cia402 then lcec
addf cia402.0.write-all       servo-thread
addf cia402.1.write-all       servo-thread
addf cia402.2.write-all       servo-thread
addf cia402.3.write-all       servo-thread
addf cia402.4.write-all       servo-thread
addf lcec.write-all           servo-thread


# =========================
# JOINT 0  (X)  -> cia402.0 -> lcec.0.4
# =========================
setp cia402.0.csp-mode 1
setp cia402.0.pos-scale 2000     # match SCALE in .ini; negate if direction reversed

# joint signals for motion
net x-pos-cmd   joint.0.motor-pos-cmd => cia402.0.pos-cmd
net x-pos-fb    joint.0.motor-pos-fb <= cia402.0.pos-fb
net x-enable    joint.0.amp-enable-out => cia402.0.enable
net x-amp-fault joint.0.amp-fault-in   <= cia402.0.drv-fault

# ethercat to cia402 driver
net x-statusword       lcec.0.4.cia-statusword  => cia402.0.statusword
net x-opmode-display   lcec.0.4.opmode-display  => cia402.0.opmode-display
net x-drv-act-pos      lcec.0.4.actual-position => cia402.0.drv-actual-position

# cia402 driver to ethercat
net x-controlword      cia402.0.controlword         => lcec.0.4.cia-controlword
net x-modes-of-operation cia402.0.opmode            => lcec.0.4.opmode
net x-drv-target-pos   cia402.0.drv-target-position => lcec.0.4.target-position

# homing (optional)
# net x-home-request joint.0.request-custom-homing => cia402.0.home
# net x-homing       joint.0.is-custom-homing <= cia402.0.stat-homing
# net x-homed        joint.0.custom-homing-finished <= cia402.0.stat-homed


# =========================
# JOINT 1  (Y1) -> cia402.1 -> lcec.0.2
# =========================
setp cia402.1.csp-mode 1
setp cia402.1.pos-scale 2000
#setp cia402.1.abs-encoder 1

net y1-pos-cmd   joint.1.motor-pos-cmd => cia402.1.pos-cmd
net y1-pos-fb    joint.1.motor-pos-fb <= cia402.1.pos-fb
net y1-enable    joint.1.amp-enable-out => cia402.1.enable
net y1-amp-fault joint.1.amp-fault-in   <= cia402.1.drv-fault

net y1-statusword      lcec.0.2.cia-statusword  => cia402.1.statusword
net y1-opmode-display  lcec.0.2.opmode-display  => cia402.1.opmode-display
net y1-drv-act-pos     lcec.0.2.actual-position => cia402.1.drv-actual-position

net y1-controlword         cia402.1.controlword         => lcec.0.2.cia-controlword
net y1-modes-of-operation  cia402.1.opmode              => lcec.0.2.opmode
net y1-drv-target-pos      cia402.1.drv-target-position => lcec.0.2.target-position


# =========================
# JOINT 2  (Y2) -> cia402.2 -> lcec.0.3
# =========================
setp cia402.2.csp-mode 1
setp cia402.2.pos-scale 2000
#setp cia402.2.abs-encoder 1

net y2-pos-cmd   joint.2.motor-pos-cmd => cia402.2.pos-cmd
net y2-pos-fb    joint.2.motor-pos-fb <= cia402.2.pos-fb
net y2-enable    joint.2.amp-enable-out => cia402.2.enable
net y2-amp-fault joint.2.amp-fault-in   <= cia402.2.drv-fault

net y2-statusword      lcec.0.3.cia-statusword  => cia402.2.statusword
net y2-opmode-display  lcec.0.3.opmode-display  => cia402.2.opmode-display
net y2-drv-act-pos     lcec.0.3.actual-position => cia402.2.drv-actual-position

net y2-controlword         cia402.2.controlword         => lcec.0.3.cia-controlword
net y2-modes-of-operation  cia402.2.opmode              => lcec.0.3.opmode
net y2-drv-target-pos      cia402.2.drv-target-position => lcec.0.3.target-position


# =========================
# JOINT 3  (Z1) -> cia402.3 -> lcec.0.0
# =========================
setp cia402.3.csp-mode 1
setp cia402.3.pos-scale 2000
#setp cia402.3.abs-encoder 1

net z1-pos-cmd   joint.3.motor-pos-cmd => cia402.3.pos-cmd
net z1-pos-fb    joint.3.motor-pos-fb <= cia402.3.pos-fb
net z1-enable    joint.3.amp-enable-out => cia402.3.enable
net z1-amp-fault joint.3.amp-fault-in   <= cia402.3.drv-fault

net z1-statusword      lcec.0.0.cia-statusword  => cia402.3.statusword
net z1-opmode-display  lcec.0.0.opmode-display  => cia402.3.opmode-display
net z1-drv-act-pos     lcec.0.0.actual-position => cia402.3.drv-actual-position

net z1-controlword         cia402.3.controlword         => lcec.0.0.cia-controlword
net z1-modes-of-operation  cia402.3.opmode              => lcec.0.0.opmode
net z1-drv-target-pos      cia402.3.drv-target-position => lcec.0.0.target-position


# =========================
# JOINT 4  (Z2) -> cia402.4 -> lcec.0.1
# =========================
setp cia402.4.csp-mode 1
setp cia402.4.pos-scale 2000
#setp cia402.4.abs-encoder 1

net z2-pos-cmd   joint.4.motor-pos-cmd => cia402.4.pos-cmd
net z2-pos-fb    joint.4.motor-pos-fb <= cia402.4.pos-fb
net z2-enable    joint.4.amp-enable-out => cia402.4.enable
net z2-amp-fault joint.4.amp-fault-in   <= cia402.4.drv-fault

net z2-statusword      lcec.0.1.cia-statusword  => cia402.4.statusword
net z2-opmode-display  lcec.0.1.opmode-display  => cia402.4.opmode-display
net z2-drv-act-pos     lcec.0.1.actual-position => cia402.4.drv-actual-position

net z2-controlword         cia402.4.controlword         => lcec.0.1.cia-controlword
net z2-modes-of-operation  cia402.4.opmode              => lcec.0.1.opmode
net z2-drv-target-pos      cia402.4.drv-target-position => lcec.0.1.target-position


# End of HAL

ethercat-conf.xml
<masters>
  <master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
    <!-- Joint Z1 -->
    <slave idx="0" type="generic" vid="0000001D" pid="007b5a25" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
    </slave>

    <!-- Joint Z2 -->
    <slave idx="1" type="generic" vid="0000001D" pid="007b5a25" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
    </slave>

    <!-- Joint Y1 -->
    <slave idx="2" type="generic" vid="0000001D" pid="007b5a25" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
    </slave>

    <!-- Joint Y2 -->
    <slave idx="3" type="generic" vid="0000001D" pid="007b5a25" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
    </slave>

    <!-- Joint X -->
    <slave idx="4" type="generic" vid="0000001D" pid="007b5a25" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
      <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"/>
          <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32"/>
        </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"/>
        </pdo>
      </syncManager>
    </slave>
  </master>
</masters>

I hope this can eventually help other people who want to use these drives.
Many thanks to all for your help.
  • ShemJ
  • ShemJ's Avatar
03 Oct 2025 16:06 - 03 Oct 2025 16:15

EL8 - Rehoming axis goes max speed ignores machine and driver limits

Category: EtherCAT

I have EL8 drivers and I have an issue that gave me a serious startle.

I am using internal homing (-4) which is working exactly as expected. However, if I rehome all (axis) or Ref any axis or rehome (Probe basic), the drive shoots back to the homing position at what I believe is top speed for the servo. This ignores both the machine limits and the limits I have set in the parameters (POE.31-36).

I have set homing limits on the driver, but also control them via HAL. As a stopgap, I also tried adding a max velocity parameter (bold), but it errors out. I tried adding a max velocity pin. I am not sure how to limit the speed of the drive using motion control yet.  Any takers?

          <pdoEntry idx="6098" subIdx="00" bitLen="8"  halPin="home-mode" halType="s32"/>
          <pdoEntry idx="6099" subIdx="01" bitLen="32" halPin="home-hi-speed" halType="u32"/>
          <pdoEntry idx="6099" subIdx="02" bitLen="32" halPin="home-lo-speed" halType="u32"/>
          <pdoEntry idx="609A" subIdx="00" bitLen="32" halPin="home-acc" halType="u32"/>
          <pdoEntry idx="6080" subIdx="00" bitLen="32" halPin="max-velocity" halType="u32"/>

and in HAL
#limit max velocity in rev/min
setp lcec.0.0.max-velocity 1000

This is a safety risk for now.  I'd like to get around this issue if possible. 

Good god, this HTML editor is horrific.
  • peterpan
  • peterpan
25 Sep 2025 18:23
Replied by peterpan on topic Trouble with Cia402 drive configuration

Trouble with Cia402 drive configuration

Category: EtherCAT

After adding the rest of the pdo entries on pg 9 and 10 the drive still stays in PREOP
<masters>
  <master idx="0" appTimePeriod="1000000" refClockSyncCycles="5">
    <slave idx="0" type="EK1100" />
    <slave idx="1" type="EL1008" />
    <slave idx="2" type="EL2008" />
    <slave idx="3" type="generic" vid="0x00000c96" pid="0x00000001" configPdos="true">
      <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="700000" />
      <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" />
               <pdoEntry idx="6071" subIdx="00" bitLen="16" halPin="target-torque" halType="s32" />
               <pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="target-position" halType="s32" />
               <pdoEntry idx="60FE" subIdx="00" bitLen="32" halPin="digital-outputs" halType="u32" />
               <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="error-code" halType="u32" />
               <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" />
               <pdoEntry idx="60F4" subIdx="00" bitLen="32" halPin="follow-error" halType="s32" />
               <pdoEntry idx="60FD" subIdx="00" bitLen="32" halPin="digital-inputs" halType="u32" />
            </pdo>
         </syncManager>
      </slave>
  </master>
</masters>

The dmesg:
[100592.236726] EtherCAT DEBUG 0-3: 9936 ns difference after 400 ms.
[100592.236728] EtherCAT DEBUG 0-3:    ref_time=812139542737448000
[100592.236729] EtherCAT DEBUG 0-3:    app_time=812139546509016167
[100592.236730] EtherCAT DEBUG 0-3:  start_time=812139546609016167
[100592.236731] EtherCAT DEBUG 0-3:       cycle=1000000
[100592.236732] EtherCAT DEBUG 0-3:  shift_time=700000
[100592.236733] EtherCAT DEBUG 0-3:   remainder=568167
[100592.236734] EtherCAT DEBUG 0-3:        start=812139546610148000
[100592.236735] EtherCAT DEBUG 0-3: Setting DC cyclic operation start time to 812139546610148000.
[100592.238726] EtherCAT DEBUG 0-3: Setting DC AssignActivate to 0x0300.
[100592.241726] EtherCAT ERROR 0-3: Failed to set SAFEOP state, slave refused state change (PREOP + ERROR).
[100592.242726] EtherCAT ERROR 0-3: AL status message 0x001E: "Invalid input configuration".
[100592.244725] EtherCAT 0-3: Acknowledged state PREOP.
[100592.465795] EtherCAT WARNING 0: 1 datagram UNMATCHED!
[100592.489802] EtherCAT WARNING: Datagram 0000000070b69bf8 (master-fsm) was SKIPPED 1 time.
  • farmer_mike
  • farmer_mike
14 Sep 2025 04:59
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build

Getting (hopefully) close to an Rtelligent build

Category: EtherCAT

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>

 
  • farmer_mike
  • farmer_mike
12 Sep 2025 13:35 - 13 Sep 2025 01:36
Replied by farmer_mike on topic Getting (hopefully) close to an Rtelligent build

Getting (hopefully) close to an Rtelligent build

Category: EtherCAT

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]
Displaying 1 - 15 out of 67 results.
Time to create page: 0.435 seconds
Powered by Kunena Forum