EL5112: Change PDO assignments via LinuxCNC?

More
1 year 10 months ago #317637 by thomaseg
Hi,

I've been struggling with getting an EL5112 encoder to work. I've spent most of the day battling this and i think i need some input/assistance.
The module is this one:  www.beckhoff.com/da-dk/products/i-o/ethe...surement/el5112.html
The manual is here:  download.beckhoff.com/download/Document/...rminals/el5112en.pdf

The module is an encoder ane it can run as either "1xABC" or "2xAB" encoder(s). I need it to run as "1xAB" encoder, not using the 2nd channel. However, its factory default set to "1xABC". If i look in the manual i find this regarding the "Predefined PDO assignment":
 

Attachment not found


...and what i can gather from the manual is that i need to use 0x1A02 for input and 0x1602 for output. I've tried that with this configuration:
Code:
<slave idx="1" type="generic" vid="00000002" pid="13F83052" configPdos="true" name="ENC1">   <syncManager idx="2" dir="out">     <pdo idx="1602">       <pdoEntry idx="7000" subIdx="02" bitLen="1" halPin="cmd-EnableLatchPosEdge" halType="bit"/>       <pdoEntry idx="7000" subIdx="03" bitLen="1" halPin="cmd-SetCounter" halType="bit"/>       <pdoEntry idx="7000" subIdx="04" bitLen="1" halPin="cmd-EnableLatchNegEdge" halType="bit"/>       <pdoEntry idx="7000" subIdx="09" bitLen="1" halPin="cmd-SetSoftwareGate" halType="bit"/>       <pdoEntry idx="7000" subIdx="0a" bitLen="1" halPin="cmd-SetCounterLatchPosEdge" halType="bit"/>       <pdoEntry idx="7000" subIdx="0b" bitLen="1" halPin="cmd-SetCounterLatchNegEdge" halType="bit"/>       <pdoEntry idx="7000" subIdx="11" bitLen="32" halPin="cmd-SetCounterValue" halType="s32"/>     </pdo>   </syncManager>   <syncManager idx="3" dir="in">     <pdo idx="1a02">       <pdoEntry idx="6000" subIdx="02" bitLen="1" halPin="sta-LatchExtValid" halType="bit"/>       <pdoEntry idx="6000" subIdx="03" bitLen="1" halPin="sta-SetCounterDone" halType="bit"/>       <pdoEntry idx="6000" subIdx="04" bitLen="1" halPin="sta-CounterUnderflow" halType="bit"/>       <pdoEntry idx="6000" subIdx="05" bitLen="1" halPin="sta-CounterOverflow" halType="bit"/>       <pdoEntry idx="6000" subIdx="07" bitLen="1" halPin="sta-OpenCircuit" halType="bit"/>       <pdoEntry idx="6000" subIdx="09" bitLen="1" halPin="sta-StatusInputA" halType="bit"/>       <pdoEntry idx="6000" subIdx="0a" bitLen="1" halPin="sta-StatusInputB" halType="bit"/>       <pdoEntry idx="6000" subIdx="0c" bitLen="1" halPin="sta-StatusInputGate" halType="bit"/>       <pdoEntry idx="6002" subIdx="0d" bitLen="1" halPin="sta-Diag" halType="bit"/>       <pdoEntry idx="6002" subIdx="0e" bitLen="1" halPin="sta-TxPDOState" halType="bit"/>       <pdoEntry idx="6002" subIdx="0f" bitLen="2" halPin="sta-InputCycleCounter" halType="u32"/>       <pdoEntry idx="6002" subIdx="11" bitLen="1" halPin="sta-SoftwareGateValid" halType="bit"/>       <pdoEntry idx="6002" subIdx="15" bitLen="1" halPin="sta-CounterValueOutOfRange" halType="bit"/>       <pdoEntry idx="6000" subIdx="11" bitLen="32" halPin="sta-CounterValue" halType="s32"/>       <pdoEntry idx="6000" subIdx="12" bitLen="32" halPin="sta-LatchValue" halType="s32"/>     </pdo>   </syncManager> </slave>
...and if i run a command to see the pdos i also get what i expect with regards to "0x1600/0x1a00" vs. "0x1602/0x1a02"(1xABC vs 2xAB):
Code:
$ ethercat pdos -p 1 SM0: PhysAddr 0x1000, DefaultSize  128, ControlRegister 0x26, Enable 1 SM1: PhysAddr 0x1100, DefaultSize  128, ControlRegister 0x22, Enable 1 SM2: PhysAddr 0x1200, DefaultSize    6, ControlRegister 0x24, Enable 1   RxPDO 0x1602 "ENC RxPDO-Map Control Ch.1"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x7000:02,  1 bit, "Enable latch extern on positive edge"     PDO entry 0x7000:03,  1 bit, "Set counter"     PDO entry 0x7000:04,  1 bit, "Enable latch extern on negative edge"     PDO entry 0x0000:00,  4 bit, "Gap"     PDO entry 0x7000:09,  1 bit, "Set software gate"     PDO entry 0x7000:0a,  1 bit, "Set counter on latch extern on positive edge"     PDO entry 0x7000:0b,  1 bit, "Set counter on latch extern on negative edge"     PDO entry 0x0000:00,  5 bit, "Gap"     PDO entry 0x7000:11, 32 bit, "Set counter value" SM3: PhysAddr 0x1300, DefaultSize   16, ControlRegister 0x20, Enable 1   TxPDO 0x1a02 "ENC TxPDO-Map Status Ch.1"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x6000:02,  1 bit, "Latch extern valid"     PDO entry 0x6000:03,  1 bit, "Set counter done"     PDO entry 0x6000:04,  1 bit, "Counter underflow"     PDO entry 0x6000:05,  1 bit, "Counter overflow"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x6000:07,  1 bit, "Open circuit"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x6000:09,  1 bit, "Status of input A"     PDO entry 0x6000:0a,  1 bit, "Status of input B"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x6000:0c,  1 bit, "Status of input gate"     PDO entry 0x6002:0d,  1 bit, "Diag"     PDO entry 0x6002:0e,  1 bit, "TxPDO State"     PDO entry 0x6002:0f,  2 bit, "Input cycle counter"     PDO entry 0x6002:11,  1 bit, "Software gate valid"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x0000:00,  1 bit, "Gap"     PDO entry 0x6002:15,  1 bit, "Counter value out of range"     PDO entry 0x0000:00, 11 bit, "Gap"     PDO entry 0x6000:11, 32 bit, "Counter value"     PDO entry 0x6000:12, 32 bit, "Latch value"

...so far so good....but it ain't working:
Code:
$ ethercat slaves  0  0:0   OP     +  EK1100 EtherCAT-Koppler (2A E-Bus)  1  0:1   PREOP  E  EL5112 2K. Inc. Encoder 5V (2xAB oder 1xABC RS422,TTL)  2  0:2   OP     +  EL3255 5K. Potentiometerauswertung mit Sensorversorgung  3  0:3   OP     +  EL1008 8K. Dig. Eingang 24V, 3ms  4  0:4   OP     +  EL1008 8K. Dig. Eingang 24V, 3ms  5  0:5   OP     +  EL2024 4K. Dig. Ausgang 24V, 2A  6  0:6   OP     +  EL1859 8K. Dig. Eingang 24V, 3ms, 8K. Dig. Ausgang 24V, 0.5A  7  0:7   OP     +  EL1859 8K. Dig. Eingang 24V, 3ms, 8K. Dig. Ausgang 24V, 0.5A  8  0:8   OP     +  EL1859 8K. Dig. Eingang 24V, 3ms, 8K. Dig. Ausgang 24V, 0.5A  9  0:9   OP     +  EK1100 EtherCAT-Koppler (2A E-Bus) 10  0:10  OP     +  EL1018 8K. Dig. Eingang 24V, 10▒s 11  0:11  OP     +  EL1018 8K. Dig. Eingang 24V, 10▒s 12  0:12  OP     +  EL1008 8K. Dig. Eingang 24V, 3ms 13  0:13  OP     +  EL1008 8K. Dig. Eingang 24V, 3ms 14  0:14  OP     +  EL3052 2K. Ana. Eingang 4-20mA 15  0:15  OP     +  EL3052 2K. Ana. Eingang 4-20mA 16  0:16  OP     +  EL2024 4Ch. Dig. Output 24V, 2A 17  0:17  OP     +  EL2024 4Ch. Dig. Output 24V, 2A 18  0:18  OP     +  EL2024 4Ch. Dig. Output 24V, 2A 19  0:19  OP     +  EL2008 8K. Dig. Ausgang 24V, 0.5A
(note the "PREOP" at pos 1)

If i look at dmesg this is what i get:
Code:
$ sudo dmesg | egrep EtherCAT [...cut...] [ 5920.784378] EtherCAT 0: Starting EtherCAT-IDLE thread. [ 5920.784441] EtherCAT ERROR 0-9: Failed to receive AL state datagram: Datagram initialized. [ 5920.784470] EtherCAT 0: Releasing master... [ 5920.784474] EtherCAT 0: Released. [ 5920.969712] EtherCAT 0: Slave states on main device: PREOP. [ 5921.481681] EtherCAT WARNING: Datagram 000000000caaf331 (master-fsm) was SKIPPED 1 time. [ 5921.996024] EtherCAT: Requesting master 0... [ 5921.996031] EtherCAT: Successfully requested master 0. [ 5922.006960] EtherCAT 0: Domain0: Logical address 0x00000000, 388 byte, expected working counter 43. [ 5922.006965] EtherCAT 0:   Datagram domain0-0-main: Logical offset 0x00000000, 388 byte, type LRW. [ 5922.006988] EtherCAT 0: Master thread exited. [ 5922.006991] EtherCAT 0: Starting EtherCAT-OP thread. [ 5922.007052] EtherCAT WARNING 0: 9 datagrams UNMATCHED! [ 5922.350569] EtherCAT ERROR 0-1: Failed to set SAFEOP state, slave refused state change (PREOP + ERROR). [ 5922.351567] EtherCAT ERROR 0-1: AL status message 0x001E: "Invalid input configuration". [ 5922.353905] EtherCAT 0-1: Acknowledged state PREOP. [ 5922.821510] EtherCAT 0: Slave states on main device: PREOP, OP. [ 5923.009501] EtherCAT WARNING 0: 8 datagrams UNMATCHED!

..."Invalid input configuration"... 

So my question is: Does this "PDO assignment" in TwinCAT do anything else behind the scene that i need to do in my setup aswell? I don't use/have TwinCAT anywhere and i actually don't have a PC that can run it in my workshop, otherwise i would have testet it. But i was hoping others have had similar issues, maybe with other devices that support multiple "modes"...

Have i missed anything obvious?

/Thomas

Please Log in to join the conversation.

More
1 year 10 months ago #317666 by thomaseg
...or maybe there is a way of configuring devices that i don't know of? The manual does not seem to mention ANY configuration apart from this PDO assignment...

Please Log in to join the conversation.

More
1 year 10 months ago #317672 by Hakan
No idea really, but you can always try the "lcec_configgen" command to see what lcec's guess of a config can look like.
EL5102 is available as a lcec device if you want to look at how it is done for that one. I is a similar encoder I think.

Please Log in to join the conversation.

More
1 year 10 months ago #317675 by thomaseg

No idea really, but you can always try the "lcec_configgen" command to see what lcec's guess of a config can look like.
EL5102 is available as a lcec device if you want to look at how it is done for that one. I is a similar encoder I think.
Oh, that was a neat tool! Thanks! That Scott-guy has been busy! The resulting config looks very similar to what i'm trying to do...apart from it defaulting to 1xABC aswell(0x1600/0x1A00) and then i got some of the types wrong(u32 vs. s32)...

However! I restart the module(power off/on) then the new config worked! I'm not quite sure why though, which annoys me quite a lot! I even managed to change the pdos to use 2xAB(with 0x1602/0x1A02) and it still works...and i'm getting proper data from my encoder... I ran a diff between the two configs and apart from the type-error and naming they are identical...

My current/best theory is that one of the configurations i've made yesterday somehow made the module go into an "error mode" of sorts and only a physical powercycle could get it out again. So i might have had it correct in one of my attempts, but since i never powercycled the modules i somehow kept getting "old errors" or something along those lines...jezz... anyways, it is working, so thanks!

/Thomas

Please Log in to join the conversation.

Time to create page: 2.042 seconds
Powered by Kunena Forum