Closed lshoek closed 7 months ago
Problem solved! Will briefly describe how I came to the solution and hopefully help out others working with these drives.
Inspecting the TC3 Wireshark trace for important data packets that were absent in my own startup procedure (during the transition from PREOP to SAFEOP) turned up the missing pieces. Unlike the previous drives we worked with, it seems that it was required to overwrite the configuration for FMMU
and SyncManager
, as also stated in the EtherCAT device protocol.
Filtering for FPWR
packets (ecat.cmd == 5
) and the specified power supply (ecat.sub1.adp == x
) made it easier to comb through the DC and mapping configuration. These entries were missing from my startup:
SyncManager (0x0810 = SM2): 0012000004000000
SyncManager (0x0818 = SM3): 0019020020000100
FMMU (0x0600 = FMMU0): 00080001020000070019000101000000
Which correspond to the appropriate members in the SOEM information struct:
ec_slavet& s = context->slavelist[index];
std::vector<uint8> data = { 0x00, 0x12, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00 };
std::memcpy(&s.SM[2], data.data(), data.size());
data = { 0x00, 0x19, 0x02, 0x00, 0x20, 0x00, 0x01, 0x00 };
std::memcpy(&s.SM[3], data.data(), data.size());
Or as such:
s.FMMU[0].LogStart = 0x01000800;
s.FMMU[0].LogLength = 0x0002;
s.FMMU[0].LogStartbit = 0x00;
s.FMMU[0].LogEndbit = 0x07;
s.FMMU[0].PhysStart = 0x1900;
s.FMMU[0].PhysStartBit = 0x00;
s.FMMU[0].FMMUtype = 0x01;
s.FMMU[0].FMMUactive = 0x01;
Setting these after the SDO startup configuration (in the PO2SOconfigx
) got the devices into SAFEOP
!
I suppose this was a far too involved way to find this solution. I'm not an EtherCAT dev first so I'm still rather fuzzy on some of the concepts. Any comments on proper commissioning with this drive are still welcome. Anyway thank you very much for this great library!
Thanks for the feedback! I notice that complex slaves from Beckhoff are very complicated to get going without special knowledge. Standard EtherCAT behaviour certainly does not cut it any longer. Sorry I was not able to help you dissect the issue, too much other work.
Hi all,
I am currently working a custom application built on SOEM to commission a Beckhoff AX8000 series power supply (AX8620) and two drives (AX8108). Unfortunately I have been unable to advance these devices' states to
SAFE_OP
.This issue board has been incredibly helpful in providing information and tips to deal with all sorts of drives, but now I have hit a wall.
My configuration is validated and tested with TwinCAT 3 (TC3), which is able to advance to OP. To mirror the extensive configuration set, I have exported the TC3 startup lists of all devices to XML and wrote a parser that reads and transmits all entries correctly using
ecx_SDOwrite
calls. Workcounters report successful writes andecx_readState
calls to individual devices show no errors. The DC sync is also adopted from the TC3 settings. Yet, I never succeed in getting toSAFE_OP
. Am I overlooking any important steps in the configuration process? It is probably worth mentioning that I can successfully configure and operate the (supposedly simpler) Beckhoff EL72x1 drive with my current SOEM implementation.TC3's commissioning procedure seems very complicated judging from the capture, and I have trouble finding the cause of this problem with the available documentation of the AX8000 series.
Here is a log snippet from my application. I have reached a point where I can now consistently get all SDO calls to succeed after introducing delay.
This is the log of a clean run of
slaveinfo.exe -map
after a power cycle:Here are captures of the startup procedure using TwinCAT 3 and my custom application: captures.zip
Has anyone been able to setup these devices successfully using SOEM? Please reach out! I can provide more information/context if needed. Thanks!