====== ecmasterlib ====== ===== Overview ===== The //"ecmasterlib"// offers an easy way to use EtherCAT with [[http://eeros.org/|EEROS]] or in a standalone project. * **EtherCAT stack**: The EtherCAT stack from Acontis, see [[embedded_systems:ethercat:understanding_acontis|The Acontis EtherCAT Stack]]. * **ecmasterlib**: This library provides an easy interface to the EtherCAT stack. The library initializes the stack and takes over the periodic sending and receiving of the data on the bus. It provides the following basic interfaces * **Elmo.hpp**: An interface for Elmo drives * **Beckhoff/EL1008.hpp**: An interface for digital input terminal * **Beckhoff/EL2008.hpp**: An interface for digital output terminal * **Beckhoff/EL3004.hpp**: An interface for analog input terminal * **Beckhoff/EL4004.hpp**: An interface for analog output terminal You may need to implement your own interfaces for other drives and terminals. ===== Installation ===== Once the EtherCAT stack has been installed and the demo application is running, the //ecmasterlib// can be installed. $ cd path/to/working/directory $ git clone https://gitlab.ost.ch/tech/inf/public/ecmasterlib $ cd ecmasterlib $ mkdir externalLib $ cp ''''/SDK/LIB/Linux/x64/libAtemRasSrv.a externalLib $ cp ''''/SDK/LIB/Linux/x64/libEcMaster.a externalLib $ mkdir build-x86-64 $ cd build-x86-64 $ cmake -DCMAKE_INSTALL_PREFIX=/absolute/path/to/working/directory/install-x86-64 .. $ make $ make install ===== Functionality ===== The examples show how to use the interfaces, e.g. ecmasterlib::device::beckhoff::EL1008 inputs{}; auto &stack = ecmasterlib::EcMasterlibMain::createInstance(argc, argv, inputs); std::cout << inputs[0] << std::endl; // reads first digital input channel You create an interface instance which must be passed to the EtherCAT stack. See the examples within [[https://gitlab.ost.ch/tech/inf/public/ecmasterlib|ecmasterlib]]. Elmo drives could be used as follows ecmasterlib::device::Elmo drive{}; auto &stack = ecmasterlib::EcMasterlibMain::createInstance(argc, argv, drive); sleep(10); std::cout << "init start\n"; drive.init([&stack]() { stack.sync(); }); drive.setMode(ecmasterlib::device::Elmo::Mode::PROFILE_VELOCITY); drive.setTargetVelocity(1000); drive.setMaximumTorque(300); std::cout << "loop start\n"; while(stack.isRunning()) { std::cout << "Current Position: " << drive.getPosition() << '\n'; sleep(1); } See [[embedded_systems:ethercat:teststand#run_test_program|EtherCat Teststand]] ===== Modifications ===== If you switch to other drives or terminals or if you want to transmit a different set of PDOs, you have to undertake the following steps - Create or modify ENI-Files - Create or modify interface files accordingly