Ethercat HAL driver
- sirop
-
- Offline
- Elite Member
-
- Posts: 193
- Thank you received: 56
Thanks for your fast reply!
The four Sync Managers were just a test. At first I tried only two Sync Managers (0 and 1) with no success.
That's strange as the case of only 2 Sync Managers is allowed by the EtherCAT standard.
It's a mystery to me, why only the outputs operate. So the communication couldn't be completely wrong.
Are you sure that you use the latest linuxcnc-ethercat? This patch github.com/sittner/linuxcnc-ethercat/com...e59d9d70b46cb2c7f3cc solved the parsing problem of complex pins,
so it might help you too.
Do you use this patch github.com/sittner/ec-debianize/blob/mas...ead_pdo_count.dpatch with etherlabmaster-1.5.2 ?
BTW: is there any way to use the Etherlab Master (Slaves PREOP -> OP and reading Process Data) from Terminal without using the lcec driver, or do I have to write a C-Program?
I would like to test my Network without lcec in order to identify the point of failure.
ethercat command line utility can help you read SDOs, not PDOs as those are read and written in a real time cycle.
You can however insert something like rtapi_print_msg at any place of linuxcnc-ethercat for debugging.
Please Log in or Create an account to join the conversation.
- sirop
-
- Offline
- Elite Member
-
- Posts: 193
- Thank you received: 56
I think my first answer was too fast and therefore incomplete.
1. Look, for example, at this line:
<pdoEntry idx="0005" subIdx="32" bitLen="8" halPin="out-31" halType="u32"/>
2. This Arduino slave has no DC functionality, however, this is the first slave on the physical ring in your case,
that's why it is chosen per default to be
[Do Jun 23 01:58:17 2016] EtherCAT 0: Using slave 0 as DC reference clock.
So rearrange your slaves so that this Arduino slave without DC is not slave 0 .
Please Log in or Create an account to join the conversation.
- sirop
-
- Offline
- Elite Member
-
- Posts: 193
- Thank you received: 56
2.) In addition to getting newer firmware you must declare a domain for
the Output and a second one for the Input
since Yaskawa sets notLRW = yes.
You can check if your Arduino Slave supports LRW with
ethercat slaves -v
Please Log in or Create an account to join the conversation.
- highbiker
- Offline
- New Member
-
- Posts: 7
- Thank you received: 3
thank you very much for your help

The EasyCAT-Shield uses a LAN9252 chip (with µC SPI-Interface), which supports distributed clocks. The output of ethercat slaves -v is: "[...]Distributed clocks: yes, 64 bit[...]".This Arduino slave has no DC functionality,
I tried a lot and finally I figured out a solution. I don't know if it's the best way, but it works. And sorry that I didn't write earlier

In the original ESI-File of the EasyCAT-Shield ( www.bausano.net/images/arduino-easycat/EasyCAT.xml ) the index and subindices of the pdoEntries of the outputs and inputs are equal. So the outputs and inputs are only kept apart by the configured channels.
This shouldn't be a problem!!! But for a try I changed the pdoEntry Index of the Inputs in the ESI-File to another value (e.g. #x0006) and wrote it onto the Slave-EEPROM of the EasyCAT-Shield. Of course I also changed the entries in the ethercat-conf.xml and now it works.
My ESI-File
<?xml version="1.0"?>
<EtherCATInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EtherCATInfo.xsd" Version="1.6">
<!-- ***************** EasyCAT V 1.0 ********************************************************** -->
<Vendor>
<Id>#x0000079A</Id>
<Name>AB&T</Name>
<ImageData16x14>424dd6020000000000003600000028000000100000000e0000000100180000000000a0020000c40e0000c40e000000000000000000004cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb1224cb122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff241cedffffff241cedffffff241ced241cedffffffffffffffffff241ced241ced241cedffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffffffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffffffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffffffffff241cedffffffffffffffffff241cedffffffffffff241ced241ced241cedffffff241ced241cedffffffffffff241cedffffff241cedffffffffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffff241cedffffffffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffffffffff241cedffffffffffffffffff241cedffffffffffff241cedffffff241cedffffff241cedffffff241cedffffffffffffffffffffffffffffffffffff241cedffffffffffffffffff241cedffffffffffffffffff241cedffffffffffffffffffffffffffffffffffff241ced241ced241cedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</ImageData16x14>
</Vendor>
<Descriptions>
<Groups>
<Group SortOrder="0">
<Type>SSC_Device</Type>
<Name LcId="1033">EasyCAT</Name>
<ImageData16x14>424dd6020000000000003600000028000000100000000e0000000100180000000000a0020000c40e0000c40e00000000000000000000241ced241ced241ced241cedffffff241cedffffffffffffffffff241cedffffffffffffffffff241cedffffffffffff241cedffffffffffffffffffffffff241cedffffffffffffffffff241cedffffffffffffffffff241cedffffffffffff241cedffffffffffffffffffffffff241ced241ced241ced241ced241cedffffffffffffffffff241cedffffffffffff241cedffffffffffffffffffffffff241cedffffffffffffffffff241cedffffffffffffffffff241cedffffffffffff241cedffffffffffffffffffffffff241ced241cedffffff241ced241cedffffff241cedffffff241cedffffff241ced241ced241ced241ced241cedffffffffffff241ced241ced241cedffffffffffff241ced241ced241ced241ced241cedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff241ced241ced241cedffffffffffff241ced241ced241cedffffff241ced241ced241cedffffff241ced241ced241ced241cedffffffffffffffffff241cedffffffffffff241cedffffffffffffffffff241cedffffffffffffffffff241ced241cedffffffffffffffffffffffff241ced241cedffffffffffff241ced241ced241cedffffff241ced241ced241ced241ced241cedffffffffffffffffffffffffffffff241cedffffff241cedffffffffffffffffff241cedffffff241ced241cedffffffffffffffffffffffff241ced241ced241cedffffff241ced241ced241cedffffff241cedffffff241ced241cedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff241ced241ced241cedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff</ImageData16x14>
</Group>
</Groups>
<Devices>
<Device Physics="YY">
<Type ProductCode="#x00DEFEDE" RevisionNo="#x00005A00">EasyCAT 32+32</Type>
<Name LcId="1033"><![CDATA[Generic 32+32 bytes]]></Name>
<URL LcId="1033"><![CDATA[http://www.bausano.net/]]></URL>
<GroupType>SSC_Device</GroupType>
<Fmmu>Outputs</Fmmu>
<Fmmu>Inputs</Fmmu>
<!-- indirizzo fisico di base per gli output -->
<Sm StartAddress="#x1000" ControlByte="#x64" Enable="1">Outputs</Sm>
<!-- indirizzo fisico di base per gli input -->
<Sm StartAddress="#x1200" ControlByte="#x20" Enable="1">Inputs</Sm>
<!-- ***************** PDO di output ********************************************************** -->
<RxPdo Fixed="1" Mandatory="1" Sm="0">
<Index>#x1600</Index>
<Name>Outputs</Name>
<Entry>
<Index>#x0005</Index>
<SubIndex>1</SubIndex>
<BitLen>8</BitLen>
<Name>Byte0</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>2</SubIndex>
<BitLen>8</BitLen>
<Name>Byte1</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>3</SubIndex>
<BitLen>8</BitLen>
<Name>Byte2</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>4</SubIndex>
<BitLen>8</BitLen>
<Name>Byte3</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>5</SubIndex>
<BitLen>8</BitLen>
<Name>Byte4</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>6</SubIndex>
<BitLen>8</BitLen>
<Name>Byte5</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>7</SubIndex>
<BitLen>8</BitLen>
<Name>Byte6</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>8</SubIndex>
<BitLen>8</BitLen>
<Name>Byte7</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>9</SubIndex>
<BitLen>8</BitLen>
<Name>Byte8</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>10</SubIndex>
<BitLen>8</BitLen>
<Name>Byte9</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>11</SubIndex>
<BitLen>8</BitLen>
<Name>Byte10</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>12</SubIndex>
<BitLen>8</BitLen>
<Name>Byte11</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>13</SubIndex>
<BitLen>8</BitLen>
<Name>Byte12</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>14</SubIndex>
<BitLen>8</BitLen>
<Name>Byte13</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>15</SubIndex>
<BitLen>8</BitLen>
<Name>Byte14</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>16</SubIndex>
<BitLen>8</BitLen>
<Name>Byte15</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>17</SubIndex>
<BitLen>8</BitLen>
<Name>Byte16</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>18</SubIndex>
<BitLen>8</BitLen>
<Name>Byte17</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>19</SubIndex>
<BitLen>8</BitLen>
<Name>Byte18</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>20</SubIndex>
<BitLen>8</BitLen>
<Name>Byte19</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>21</SubIndex>
<BitLen>8</BitLen>
<Name>Byte20</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>22</SubIndex>
<BitLen>8</BitLen>
<Name>Byte21</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>23</SubIndex>
<BitLen>8</BitLen>
<Name>Byte22</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>24</SubIndex>
<BitLen>8</BitLen>
<Name>Byte23</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>25</SubIndex>
<BitLen>8</BitLen>
<Name>Byte24</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>26</SubIndex>
<BitLen>8</BitLen>
<Name>Byte25</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>27</SubIndex>
<BitLen>8</BitLen>
<Name>Byte26</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>28</SubIndex>
<BitLen>8</BitLen>
<Name>Byte27</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>29</SubIndex>
<BitLen>8</BitLen>
<Name>Byte28</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>30</SubIndex>
<BitLen>8</BitLen>
<Name>Byte29</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>31</SubIndex>
<BitLen>8</BitLen>
<Name>Byte30</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0005</Index>
<SubIndex>32</SubIndex>
<BitLen>8</BitLen>
<Name>Byte31</Name>
<DataType>USINT</DataType>
</Entry>
<!-- ***************** PDO di input *********************************************************** -->
</RxPdo>
<TxPdo Fixed="1" Mandatory="1" Sm="1">
<Index>#x1A00</Index>
<Name>Inputs</Name>
<Entry>
<Index>#x0006</Index>
<SubIndex>1</SubIndex>
<BitLen>8</BitLen>
<Name>Byte0</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>2</SubIndex>
<BitLen>8</BitLen>
<Name>Byte1</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>3</SubIndex>
<BitLen>8</BitLen>
<Name>Byte2</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>4</SubIndex>
<BitLen>8</BitLen>
<Name>Byte3</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>5</SubIndex>
<BitLen>8</BitLen>
<Name>Byte4</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>6</SubIndex>
<BitLen>8</BitLen>
<Name>Byte5</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>7</SubIndex>
<BitLen>8</BitLen>
<Name>Byte6</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>8</SubIndex>
<BitLen>8</BitLen>
<Name>Byte7</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>9</SubIndex>
<BitLen>8</BitLen>
<Name>Byte8</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>10</SubIndex>
<BitLen>8</BitLen>
<Name>Byte9</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>11</SubIndex>
<BitLen>8</BitLen>
<Name>Byte10</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>12</SubIndex>
<BitLen>8</BitLen>
<Name>Byte11</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>13</SubIndex>
<BitLen>8</BitLen>
<Name>Byte12</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>14</SubIndex>
<BitLen>8</BitLen>
<Name>Byte13</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>15</SubIndex>
<BitLen>8</BitLen>
<Name>Byte14</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>16</SubIndex>
<BitLen>8</BitLen>
<Name>Byte15</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>17</SubIndex>
<BitLen>8</BitLen>
<Name>Byte16</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>18</SubIndex>
<BitLen>8</BitLen>
<Name>Byte17</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>19</SubIndex>
<BitLen>8</BitLen>
<Name>Byte18</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>20</SubIndex>
<BitLen>8</BitLen>
<Name>Byte19</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>21</SubIndex>
<BitLen>8</BitLen>
<Name>Byte20</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>22</SubIndex>
<BitLen>8</BitLen>
<Name>Byte21</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>23</SubIndex>
<BitLen>8</BitLen>
<Name>Byte22</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>24</SubIndex>
<BitLen>8</BitLen>
<Name>Byte23</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>25</SubIndex>
<BitLen>8</BitLen>
<Name>Byte24</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>26</SubIndex>
<BitLen>8</BitLen>
<Name>Byte25</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>27</SubIndex>
<BitLen>8</BitLen>
<Name>Byte26</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>28</SubIndex>
<BitLen>8</BitLen>
<Name>Byte27</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>29</SubIndex>
<BitLen>8</BitLen>
<Name>Byte28</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>30</SubIndex>
<BitLen>8</BitLen>
<Name>Byte29</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>31</SubIndex>
<BitLen>8</BitLen>
<Name>Byte30</Name>
<DataType>USINT</DataType>
</Entry>
<Entry>
<Index>#x0006</Index>
<SubIndex>32</SubIndex>
<BitLen>8</BitLen>
<Name>Byte31</Name>
<DataType>USINT</DataType>
</Entry>
</TxPdo>
<Eeprom>
<ByteSize>1024</ByteSize> <!-- EEprom - 1KB 24LC08 -->
<ConfigData>80030000000000000000</ConfigData>
</Eeprom>
</Device>
</Devices>
</Descriptions>
</EtherCATInfo>
There shouldn't be any problems with equal pdoEntry Indices on generic slaves on different channels - but unfortunately there might be some.
Best regards and thanks for your help!
P.S.:
I don't know if "channel" is the correct term. In my post "channel" means the PDO-Groups which are defned with indices in the RxPdo or TxPdo tag. For Example
[...]
<RxPdo [...]>
<Index>[Channelindex]</Index>
[...]
Please Log in or Create an account to join the conversation.
- DaPeace
- Offline
- Junior Member
-
- Posts: 38
- Thank you received: 2
Regards, Jan
Please Log in or Create an account to join the conversation.
- Allan
- Offline
- Junior Member
-
- Posts: 26
- Thank you received: 5
The EL7041-1000 is supported and has been tested:
wiki.linuxcnc.org/cgi-bin/wiki.pl?EtherCatDriver
Even I managed to get it moving. Here's a machine,
tutorial and videos (in German) that uses the EL7041-1000:
github.com/koppi/mk/blob/daa3fd64a0b2b61...mai-Thinkpad-X200.md
Allan
Please Log in or Create an account to join the conversation.
- DaPeace
- Offline
- Junior Member
-
- Posts: 38
- Thank you received: 2
Im asking because a can get a EL7041 (without the -1000) really cheap and i want to make some tests if those drivers are usable for my mill.
But if i see how complex that stuff could be i would prefer something thats working out of the box..
Im not really sure whats the difference between EL7041 and EL7041-1000 except there is a little change in pinout of the clamp.
Jan
Please Log in or Create an account to join the conversation.
- Allan
- Offline
- Junior Member
-
- Posts: 26
- Thank you received: 5
Reading this post:
forum.linuxcnc.org/forum/24-hal-componen...iver?start=230#68369
from CGC is appears that the 7041 runs.
Hopefully someone can clarify this for you?
I took the easy route and bought EL7041-1000s.
I am really new to this and know that I would
struggle (fail) if I had to deviate from the instructions
available on the forum.
It might be possible to use the generic driver if you
are able to understand it - I have looked at the
generic driver a few times and just cannot understand
despite looking at the examples on here. I am just
too stupid!
Good luck!
Allan
PS Just noticed that user Markux reported that he could
drive his motor using the 7041:
forum.linuxcnc.org/forum/24-hal-componen...hal-driver?start=240
Please Log in or Create an account to join the conversation.
- zerix
- Offline
- New Member
-
- Posts: 7
- Thank you received: 0
Please Log in or Create an account to join the conversation.
- sirop
-
- Offline
- Elite Member
-
- Posts: 193
- Thank you received: 56
2. What is your Linux blend and its bitness?
3. What do ethercat slaves and ethercat master yield?
Please Log in or Create an account to join the conversation.