====== EtherCAT Teststand ====== To be able to check the [[embedded_systems:ethercat:#recommended_workflow|Recommended Workflow ]] steps 1-8, we have a test bench equipped with two ELMO drives, see hardware description below. As host-machine you either use a x86 based PC or a PLC system CX2020. The following manual can be used for both machines. A test program is available in which the drives turn the two motors while position and velocity data are logged. The code can be found under [[https://gitlab.ost.ch/tech/inf/public/ethercat-teststand]]. You will find two applications: * standalone * using EEROS ===== Build the Image with Yocto ===== In order to run the test program, you first have to build the correct image. Follow [[software:linux:yocto:setup|this (Setting up the Build Environment)]] to build the environment **but**:\\ Clone the following additional layers into the directory //yocto//:\\ Note: At the time of writing the latest LTS release is //dunfell//. Check the[[https://git.yoctoproject.org/cgit/cgit.cgi/poky | poky repository]] for all available releases. git clone git://git.openembedded.org/meta-openembedded -b dunfell git clone https://gitlab.ost.ch/tech/inf/public/meta-ost git clone https://gitlab.ost.ch/tech/inf/projects/yocto/meta-ost-ethercat Add these new layers in //yocto/build/conf/bblayers.conf//, so the file looks like this afterwards:\\ # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \ /yocto/poky/meta \ /yocto/poky/meta-poky \ /yocto/poky/meta-yocto-bsp \ /yocto/meta-openembedded/meta-oe \ /yocto/meta-ost/meta-ost \ /yocto/meta-ost-ethercat \ " Make sure your //yocto/build/conf/local.conf// has the following settings:\\ … MACHINE = "c6930" … DISTRO = "ost-distro" … CONF_VERSION = "1" OST_DEVBUILD = "1" CORE_IMAGE_EXTRA_INSTALL_append = " iproute2 canutils" ==== Choose the Right Machine ==== Since the linklayer configuration depends on the host machine, it must be chosen accordingly. If you are using a PC as host, you can skip the following sentences and use the '' MACHINE = "c6930"'' configuration and connect the ethernet port of the PC to the first elmo drive. \\ To connect the PLC with the Elmo-Drives via EtherCAT there are two possibilities. Either via the plug at the front of the PLC (X000/X001) or via a terminal module on the side of the PLC. Depending on this connection, the link layer must be set differently. To use the ports in front of the PLC, make sure your machine is '' MACHINE = "c6930"''. To use the terminal modules on the side of the PLC use the '' MACHINE = "CX2020"'' configuration. \\ The command to build the teststand-image is ''bitbake teststand-image'' but do not forget to source the build environment.\\ ==== Flash the image ==== Follow [[software:linux:images:downloads:#flashing_a_.wic_image|this]] guide to flash the image to e.g. a USB-Stick. The image was created in\\ ''/build/tmp/deploy/images/c6930/teststand-image-c6930.wic''.\\ ==== Run the example ==== If the connection is not yet established, connect the PLC to the Elmo Drives via the port selected earlier. Before running the example one has to unbind the ethernet port. Therefore you first have to find the PCI device. Either you query the Instance-ID via //lspci// commmand or simply run the program (as shown in the next steps) to get the Instance-ID from the thrown error message. With the now known Instance-ID, the driver name can be found with //lspci -v//. Note: If you are using the test bench at OST Campus Buchs with the PLC CX2020 plug the ethernet connecter at port //X000//. This should be the port with Instance-ID //0000:03:00.0// and driver name //e1000e//.\\ Use this port, because the other port //X001// can be used to access via ssh. To now unbind the standard driver and load the EC LinkLayer module you can run the following three lines: modprobe atemsys echo '' > /sys/bus/pci/drivers//unbind # for example echo '0000:03:00.0' > /sys/bus/pci/drivers/e1000e/unbind modprobe atemsys Now you are ready to run the test program. Either the standard test program: teststand -f /etc/eni/teststand.xml –i8254x 2 1 -dcmmode off -perf or the test program with EEROS: teststand_eeros -f /etc/eni/teststand.xml –i8254x 2 1 -dcmmode off -perf **Syntax**: * **-f** Path to corresponding ENI file ((The ENI file is already provided in the cloned repository. If you want to change the EtherCAT network, create a new ENI file as described in [[embedded_systems:ethercat:create_eni_file|Create an ENI File]].)) * **-i8254x** Use LinkLayer "//emllI8254x Intel Pro/1000//" for "//Intel Pro/1000 network adapter cards//" if you use the plug in front of the PLC. If used via a terminal module on the side of the PLC use the Beckhoff link layer ''-ccat''. But you may also have a different link layer. * **2** Select the EtherCAT port. * **1** * Mode 0 = Interrupt mode (Interrupt mode is not supported for ECMasterDemo) * Mode 1 = Polling mode * **-dcmmode** on = enable dcmmode, off = disable dcmmode * **-perf** Display performance measurements (Enable max. and average time measurement in μs for all EtherCAT jobs) ===== Findings ===== * When ENI are not setup correctly, the process data image can show strange alignment problems. * Velocity readings on the teststand may vary greatly. The internal sampling rate of the drive may be 8 times higher than the sampling on the bus with 1ms. This leads to very few ticks, because the encoder has 25000 ticks per turn and the velocity is very slow. The drive obviously has an internal filter / observer . * There is a emergency stop button. This button is connected to a digital input of the ELMO drive. However, we currently do not read this input, because that's not possible with PDO transfers. ===== Hardware ===== The drives are [[https://www.elmomc.com/product/gold-twitter/ | Gold Twitter]] drives from ElmoMC. All datasheets and the standalone test-program code inclusive corresponding ENI-file are stored in the following GitLab repository: [[https://gitlab.ost.ch/tech/inf/projects/ethercat-teststand|ethercat-teststand Repository]]. \\ {{ :embedded_systems:ethercat:20211029_blockdiagramm_teststand.png?nolink |}}