Ethercat HAL driver
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.
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.
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.
thank you very much for your help You were right: I hadn't installed the newest ethercat master. I didn't know the ec-debianize git. I reinstalled my system and used that git, but it didn't solve the problem.
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.
Regards, Jan
Please Log in or Create an account to join the conversation.
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.
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.
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.
Please Log in or Create an account to join the conversation.
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.