====== Writing a new interface for a new EtherCAT slave ====== ===== Hints ===== * You can use ''EtherCatInterfaceElmo'' as an example. * Your interface has to inherit from ''EtherCATInterfaceBase''. * The most basic implementation only includes the low level functions ('ll_'-prefix) * A method like ''int64_t getPosition()'' is recommended to avoid overflow problems (see below) ===== int64_t getPosition() ===== The position is often sent as a 32 bit signed integer (~4*e+9 different values). With a high-resolution encoder, this value can easily overflow. To avoid this problem use a method implementation like this: int64_t EtherCATInterfaceElmo::getPosition(int driveNumber) { int32_t rawPos = ll_getPositionActualValue(driveNumber); int32_t diff = rawPos - drives[driveNumber].prevRawPos; drives[driveNumber].prevRawPos = rawPos; drives[driveNumber].absPos += static_cast(diff); return drives[driveNumber].absPos + static_cast(drives[driveNumber].posOffset); }