r2k-in-the-vortex / ethercat_src

9 stars 8 forks source link

# ethercat_src ethercat connection for OpenPLC

example workflow

ethercat_src ties Etherlabs IgH EtherCAT master to OpenPLC

links

setup instructions

ethercat_src can be built and installed independently of OpenPLC but is meant to be installed and work with it.

Reference hardware is Raspberry pi 4

Some dependancies should be checked to exist

sudo apt-get update
sudo apt-get install udev
sudo apt-get install libxml2-dev
sudo apt-get install autoconf
sudo apt-get install libtool

to install ethercat capable branch of OpenPLC

git clone https://github.com/thiagoralves/OpenPLC_v3.git
cd OpenPLC_v3

ethercat_src is arranged as submodules so these need to be fetched

git submodule init
git submodule update
cd utils/ethercat_src
git checkout main

git submodule init
git submodule update
cd external/ethercat

now Etherlabs IgH EtherCAT master needs to be built and installed

./bootstrap
./configure --sysconfdir=/etc --enable-8139too=no
make
make modules

sudo make install
sudo make modules_install install
sudo depmod

configured to correct ethernet adapter, first figure out mac address of interface you wish to use (ifconfig)

and then configure ethercat

sudo nano /etc/ethercat.conf

set correct mac address to MASTER0_DEVICE="xx:xx:xx:xx:xx:xx" and set DEVICE_MODULES="generic" unless you have a native driver available save the file and exit

a device reboot at this point is recommended

After startup etherlabs master should be running, this can be verified by ls /dev/EtherCAT0 and by infomation from sudo ethercat master which shows state of master interface. ethercat --help for more information.

if EtherCAT0 doesn't run, try to start it with

systemctl start ethercat   # For systemd based distro
/etc/init.d/ethercat start # For init.d based distro

sudo ethercat rescan and sudo ethercat xml obtains ethercat slave configuration which needs to be given to ethercat_src

At this point, OpenPLC may be built and installed

cd to OpenPLC_v3 source folder and ./install.sh linux ethercat to install OpenPLC along with ethercat_src

ethercat_src is controlled by conf files, in the OpenPLC folder OpenPLC_v3/utils/ethercat_src/build/ethercat.cfg are the main options

xml file is the previously mentioned slave configuration.

Now OpenPLC can be started, on startup OpenPLC will print out (also in web ide) the pdos - input / output variables it has on ethercat

e.g.

Slave0_Channel_1 AT %IX0.0 : BOOL; (* EK1814 EtherCAT-EA-Koppler (1A E-Bus, 4 K. Dig. Ein, 3ms, 4 K.  *)
Slave0_Channel_2 AT %IX1.0 : BOOL; (* EK1814 EtherCAT-EA-Koppler (1A E-Bus, 4 K. Dig. Ein, 3ms, 4 K.  *)
Slave0_Channel_3 AT %IX2.0 : BOOL; (* EK1814 EtherCAT-EA-Koppler (1A E-Bus, 4 K. Dig. Ein, 3ms, 4 K.  *)
....

These variables must be copied into PLC program and used to access the IO

This is how the runtime log should look like if EtherCAT is installed and configured properly

image

If everything goes well then EtherCAT status will progress like so

4 slave(s).
AL states: PREOP.
Link is up.
Domain1: WC 3.
Domain1: State 1.
Domain1: WC 4.
Domain1: WC 5.
Domain1: WC 7.
Domain1: State 2.
AL states: OP.

WC or Working Counter is incremented each time a device successfully reads or writes from the datagram and as such is diagnostic indicator to show all the configured slaves recieved and sent their data. Correct WC value depends on how many and which devices are configured.

Domain1: State 2. is good state

AL states: OP. means all slave devices are operational

Advanced devices

Some devices like many servo drives will not start up unless they are correctly configured, which involves Service Data Objects

OpenPLC and ethercat_src provide no means to configure SDOs, but IgH EtherCAT master does

For example, running the following script before starting OpenPLC prepares EL7047 stepper driver in pos 4 for OP mode, it will not enter OP mode without this configuration

ethercat states preop
sleep 3
ethercat download -p 4 -t uint16 0x10f3 5 0x0000
ethercat download -p 4 -t uint32 0xf081 1 0x00100000
ethercat download -p 4 -t uint8 0x1c12 0 0x00
ethercat download -p 4 -t uint8 0x1c13 0 0x00
ethercat download -p 4 -t uint16 0x1c12 1 0x1600
ethercat download -p 4 -t uint16 0x1c12 2 0x1602
ethercat download -p 4 -t uint16 0x1c12 3 0x1604
ethercat download -p 4 -t uint16 0x1c13 1 0x1a00
ethercat download -p 4 -t uint16 0x1c13 1 0x1a03
ethercat download -p 4 -t uint8 0x1c12 0 0x03
ethercat download -p 4 -t uint8 0x1c13 0 0x02

The specific list of parameters and in which order they have to be written is device specific, one way to determine correct configuration is to set the device up in TwinCAT or other commercial EtherCAT capable PLC software and copy the configuration from there. For example startup tab in TwinCAT