---
title: 6-axis F/T Sensor(AFT200, EtherCAT)
description: 6-axis Force/Torque Sensor(AFT200, EtherCAT)
---

[Skip to content](https://help.aidinrobotics.co.kr/en/6-axis-force-torque-sensor-ethercat#main-content)

- [English](https://help.aidinrobotics.co.kr/en/6-axis-force-torque-sensor-ethercat)
- [한국어 - 대한민국 (Korean - South Korea)](https://help.aidinrobotics.co.kr/6축-힘/토크-센서-ethercat)

English

Show submenu for translations

[![에이딘로보틱스 로고](https://help.aidinrobotics.co.kr/hs-fs/hubfs/%EB%A1%9C%EA%B3%A02%EC%97%B4_grey@2x.png?width=120&height=40&name=%EB%A1%9C%EA%B3%A02%EC%97%B4_grey@2x.png)](https://help.aidinrobotics.co.kr/?hsLang=en)

- [Full Manual](https://help.aidinrobotics.co.kr/en/full-manual)
- [Install Guide](https://help.aidinrobotics.co.kr/en/install-guide)
- [Contact Us](https://www.aidinrobotics.co.kr/en/contact)

Open main navigation

Close main navigation

- [Full Manual](https://help.aidinrobotics.co.kr/en/full-manual)
- [Install Guide](https://help.aidinrobotics.co.kr/en/install-guide)
- [Contact Us](https://www.aidinrobotics.co.kr/en/contact)
- - [English](https://help.aidinrobotics.co.kr/en/6-axis-force-torque-sensor-ethercat)
    - [한국어 - 대한민국 (Korean - South Korea)](https://help.aidinrobotics.co.kr/6축-힘/토크-센서-ethercat)

  English
  
  Show submenu for translations
- [Official Site](https://www.aidinrobotics.co.kr/en)

[Official Site](https://www.aidinrobotics.co.kr/en)

 How can we help you?

- There are no suggestions because the search field is empty.

1. [AIDIN ROBOTICS Knowledge Base](https://help.aidinrobotics.co.kr/en?hsLang=en)
2. [Full Manual](https://help.aidinrobotics.co.kr/en/full-manual?hsLang=en)

June 11, 2026

# 6-axis F/T Sensor(AFT200, EtherCAT)

## ✅ revision date: 2026.04.28

### FOREWORD

Thank you for purchasing our Force Torque sensor. This manual contains the information necessary for the correct use of the AIDIN ROBOTICS AFT200-D80 sensor. Please carefully read this manual when using this software. Please note that the basic performance of the product will not be exhibited when the robot system is used out of conditions. This manual describes possible dangers and consequences using Force Torque sensor. Be sure to comply with safety precautions written in this manual to use safety and correctly.

### NOTICE

This manual Do **NOT** allow copy, reproduction or share without authorization of AIDIN ROBOTICS. Please notify us any errors in this manual or the provided instructions.

### MANUFACTURER

AIDIN ROBOTICS

### SAFETY PRECAUTIONS

Installation of Force Torque sensor **MUST** be performed by qualified personnel in accordance with national and local codes. Please carefully read this manual when using this software.

### WARNING & CAUTION

🚫 This symbol indicates that a danger of possible serious injury or death exists if the associated instructions are not followed properly.

⚠️ This symbol indicates that a danger of possible harm to people or physical damage to equipment and facilities exists if the associated instructions are not followed properly.

✅ AFT200-D80-EC sensor from AIDIN ROBOTICS meets CE-certified “A Class”

### 1. Introduction

#### 1.1 Smart 6-axis Force Torque Sensor, AFT200-D80

![image-png](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png.png?width=670&height=377&name=image-png.png)

#### 1.2 Key features

- Smart 6-axis force/torque sensor
- All-in-one sensor (No additional amplifier)
- Digital output communications (EtherCAT)
- Easy installation and data collection
- Grippers, robot hands, collaborative robot, industrial robot

#### 1.3 Specs.

| Index | Unit | Value |
| --- | --- | --- |
| Operating voltage | VDC | 12 |
| Max. safe excitation voltage | VDC | 24 |
| Nominal force range | N | 200 |
| Nominal torque range | Nm | 15 |
| Limit force (Fxyz) | N | 300 |
| Limit torque | Nm | 22.5 |
| Force Resolution | N | 0.15 |
| Torque Resolution | Nm | 0.015 |
| Force Noise-free resolution (STD) | N | 0.4 |
| Torque Noise-free resolution (STD) | Nm | 0.025 |
| Maximum sample rate | Hz | 1,000 |
| Dimensions | mm | D80 x H21.5 |
| IP rating |  | IP65 |
| Operating temperature |  | 10-50℃ |

#### 1.4 Flyer

[\[AIDIN ROBOTICS\] AFT MINI+AFT200 leaflet(EN, 26.06).pdf](https://help.aidinrobotics.co.kr/hubfs/%EC%97%90%EC%9D%B4%EB%94%98%20%EB%A6%AC%ED%94%8C%EB%A0%9B/%5BAIDIN%20ROBOTICS%5D%20AFT%20MINI+AFT200%20leaflet(EN%2c%2026.06).pdf?hsLang=en)

 

### 2. Installation Guide

#### 2.1 **Basic Components**

- AFT200-D80 x 1 EA
- 1.5m Cable x 1 EA

![image-png-1](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-1.png?width=670&height=463&name=image-png-1.png)

#### 2.2 Mounting

- **M5 bolt 5.2Nm required for tightening**
- Performance cannot be guaranteed and A/S not possible when disassembling internal/external bolts

![image-png-3](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-3.png?width=670&height=274&name=image-png-3.png)

- Sensor tightening order

![image-png-2](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-2.png?width=670&height=583&name=image-png-2.png)

- CAUTION OF CABLE CUTTING AND EXCESS PULLING
- Secure the sensor line with the robot so that it does not pull as it moves
  
    - Do not fix it to the robot using cable ties, etc., or use cable ties to fix it in a bundle shape like other wires
    - We recommend that you use Velcro to fix it with the robot, and please use Velcro to fix it when fixing it in a bundle form with other lines

💡 Performance CANNOT be guaranteed if not followed to the tightening torque guide.

💡 If the sensor line is not fixed to the robot, the output signal may have a noise due to the pulled by robot

💡 Please check More detail setup guide as follow: 

#### 2.3 AXIS & Drawings

![image-png-4](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-4.png?width=670&height=603&name=image-png-4.png)

![image-png-Sep-01-2025-12-36-10-5254-AM](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-Sep-01-2025-12-36-10-5254-AM.png?width=670&height=471&name=image-png-Sep-01-2025-12-36-10-5254-AM.png)

Drawing File : 

[AFT200\_D80.pdf](https://help.aidinrobotics.co.kr/hubfs/%EC%97%90%EC%9D%B4%EB%94%98%20%EB%8F%84%EB%A9%B4/AFT200_D80_Drawing.pdf?hsLang=en)

**💡 Port Location Notice**

- **EtherCAT** Type model has two ports: **IN** and **OUT**.
- **Ethernet** Type model has one port, located on the **left side**.
- **CAN** Type model has one port, located on the **right side**.

 

STEP File:

[AFT200-D80-EC\_배포용.STEP](https://help.aidinrobotics.co.kr/hubfs/%EC%97%90%EC%9D%B4%EB%94%98%20%EC%8A%A4%ED%85%9D%ED%8C%8C%EC%9D%BC/AFT200-D80-EC_%EB%B0%B0%ED%8F%AC%EC%9A%A9.STEP.zip?hsLang=en)

#### 2.3 Wiring

The EtherCAT device are provided with a POE injector and a 12-24V AC/DC power supply. The sensor is complying with 802.3af Mode A protocol, but the power is being delivered by **only one unused pair** of the Cat5e ethernet cable. Make sure DO NOT apply the over voltage to the sensor cable. The user should connect the sensor cable to the “POE” marked port of the injector.

Other POE Injectors compatible with the 802.3af Mode A can be used with 12-24V supply voltage.

##### 2.3.1 Pin out

![Untitled-52](https://help.aidinrobotics.co.kr/hs-fs/hubfs/Untitled-52.png?width=670&height=186&name=Untitled-52.png)

- Use POE Connector to connect Power & EtherNET signal

![Untitled-36](https://help.aidinrobotics.co.kr/hs-fs/hubfs/Untitled-36.png?width=670&height=374&name=Untitled-36.png)

![Untitled-37](https://help.aidinrobotics.co.kr/hs-fs/hubfs/Untitled-37.png?width=670&height=523&name=Untitled-37.png)

|  | Cable wires color | EtherCAT Signal |
| --- | --- | --- |
| 1 | Green/White | TX+ |
| 2 | Green | TX- |
| 3 | Orange/White | RX+ |
| 4 | Blue | 12V |
| 5 | Blue/White | NC |
| 6 | Orange | RX- |
| 7 | Brown/White | NC |
| 8 | Brown | GND |

#### 2.5 EtherCAT interface

The AFT200-D80-EC model support the RUN state where the sensor is providing the force/torque measurements. Also the IMU measurements can be activated by using activating signal to AFT200-D80-EC sensor. To activate the IMU signal or biasing the sensor signal, please follow the instructor in section 2.6.

The EtherCAT interface is used to give the users the following capabilities:

• Read the Product Number, Serial Number, etc.

• Read Force/Torque Data

→ Force \[N\] = Force output/100-300, Torque = Torque output/500-50

• Read IMU data

→ Acceleration \[m/s^2\]= (Acceleration value – 32767)/1000

→ gyroscope \[ ˚/s\] = (gyroscope value – 32767)/16.4

 

##### 2.5.1 PDO interface

The PDO interface exchanges data in real time with the F/T sensor. The PDO mapping used is given in the following:

2.5.1.1 RxPDO1: Object 0x1600 Digital Output

| Name Type | Index | Subindex | Size | Bit Size | Access |
| --- | --- | --- | --- | --- | --- |
| Digital Output | 0x7000 | 0x00 | BOOL | 1 | RO |
| BIAS\_ON | 0x7000 | 0x01 | BOOL | 1 | RO |
| ACC\_ON | 0x7000 | 0x02 | BOOL | 1 | RO |
| GYRO\_ON | 0x7000 | 0x03 | BOOL | 1 | RO |
| NC | 0x7000 | 0x04 | BOOL | 1 | RO |

2.5.1.2 TxPDO1: Object 0x1A00 Digital Output

| Name Type | Index | Subindex | Size | Bit Size | Access |
| --- | --- | --- | --- | --- | --- |
| Status | 0x6000 | 0x00 | SINT | 8 | RO |
| Force x | 0x6000 | 0x01 | REAL | 32 | RO |
| Force y | 0x6000 | 0x02 | REAL | 32 | RO |
| Force z | 0x6000 | 0x03 | REAL | 32 | RO |
| Torque x | 0x6000 | 0x04 | REAL | 32 | RO |
| Torque y | 0x6000 | 0x05 | REAL | 32 | RO |
| Torque z | 0x6000 | 0x06 | REAL | 32 | RO |
| Out of Range | 0x6000 | 0x07 | REAL | 32 | RO |
| Out of Range status | 0x6000 | 0x08 | REAL | 32 | RO |
| Acceleration x | 0x6000 | 0x09 | REAL | 32 | RO |
| Acceleration y | 0x6000 | 0x0a | REAL | 32 | RO |
| Acceleration z | 0x6000 | 0x0b | REAL | 32 | RO |
| Angular Rate x | 0x6000 | 0x0c | REAL | 32 | RO |
| Angular Rate y | 0x6000 | 0x0d | REAL | 32 | RO |
| Angular Rate z | 0x6000 | 0x0e | REAL | 32 | RO |
| Temperature | 0x6000 | 0x0f | REAL | 32 | RO |

##### 2.5.2 SDO interface

The SDO data configures the sensor and reads the manufacturing and calibration data. This section lists dictionary objects specific to the EtherCAT F/T sensor application; it does not list objects that are a required part of the EtherCAT standard. These dictionary objects can also be found in the ESI file on the website

| Object |  | Name | Type | Description |
| --- | --- | --- | --- | --- |
| 0x2000 | 0 | Status | RO |  |
| 0x6000 | 0 | Sensor Data | RO | Used to read the Force/Torque data, IMU etc. from the sensor |
| 0x7000 | 0 | Digital Output | RO |  |

💡 To stabilize the sensor signal, it is recommended to have a running time of about 30 minutes.

\* Please leave the sensor data on for at least 10 minutes before using it

💡 The first 10 minutes of sensor output data can cause data to flow.

#### 2.6 Force/Torque Out of Range

The sensor can operate up to its nominal capacity, while a single axis load. On Nominal capacity reading is incorrect and invalid.

The nominal capacity of composite loading is The following diagram illustrates a complex loading scenario. The sensor cannot operate outside the normal operating area

![image-png-Sep-01-2025-01-00-24-7868-AM](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-Sep-01-2025-01-00-24-7868-AM.png?width=670&height=254&name=image-png-Sep-01-2025-01-00-24-7868-AM.png)

The following graph shows the range of payloads and tool lengths that can be used with AFT200-D80-EC sensor for applications requiring high or moderate precision.

F/T load is outside the sensor’s detection capability. TxPDO1\[0x6000, Index: 0x08\] shows the value type and TxPDO1\[0x6000, Index: 0x09\] shows the status.

• The total percentage of the calibrated range used by Fxy and Tz axes is greater than 105%. Refer to the following Fxy, Tz equation.

![image-png-Sep-01-2025-01-00-53-2317-AM](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-Sep-01-2025-01-00-53-2317-AM.png?width=496&height=70&name=image-png-Sep-01-2025-01-00-53-2317-AM.png)

• The total percentage of the calibrated range used by Fz and Txy axes is greater than 105%. Refer to the following Fz, Txy equation.

![image-png-Sep-01-2025-01-01-24-1910-AM](https://help.aidinrobotics.co.kr/hs-fs/hubfs/image-png-Sep-01-2025-01-01-24-1910-AM.png?width=465&height=66&name=image-png-Sep-01-2025-01-01-24-1910-AM.png)

 

### 3. SOFTWARE

#### 3.1 Testing the EtherCAT in Windows application ( TwinCAT3 )

[EtherCAT\_manual.pdf](https://help.aidinrobotics.co.kr/hubfs/%EC%97%90%EC%9D%B4%EB%94%98%20%EB%A7%A4%EB%89%B4%EC%96%BC/EtherCAT_manual.pdf?hsLang=en)

##### 3.1.1 ESI(EtherCAT Slave Information) XML file for EtherCAT

- XML file name : AFT200-D80-EC.xml
  
  [AFT200\_D80\_EC.xml](https://help.aidinrobotics.co.kr/hubfs/%EC%97%90%EC%9D%B4%EB%94%98%20xml%20%ED%8C%8C%EC%9D%BC/AFT200_D80_EC.xml?hsLang=en)
- Download the XML file and paste it to the installed directory of TwinCAT. “C:/TwinCAT/3.1/Config/Io/EtherCAT”

##### 3.1.2. Sequence of Testing

1. Create a TwinCAT project using Visual Studio.
2. Connect a LAN cable to EtherCAT Master (Ethernet adapter).
3. Turn on AFT sensor.
4. Scan the device.
5. Activate the TwinCAT in free-run mode
6. Observe the output values of PDO (Process Data Object) and SDO (Service Data Object)

 

#### 3.2 Testing the EtherCAT in Linux application ( SOEM )

##### 3.2.1 clone the SOEM source code from the following page **(C++)**

git clone https://github.com/OpenEtherCATsociety/SOEM

[https://github.com/OpenEtherCATsociety/SOEM](https://github.com/OpenEtherCATsociety/SOEM)

1. Follow the installation steps according to the SOEM webpage
   
     - `mkdir build`
     - `cd build`
     - `cmake ..`
     - `make`
2. Copy the following code and paste to the simpletest.c code (C++)
   
   /\*\* \\file  
    \* \\brief Example code for Simple Open EtherCAT master  
    \*  
    \* Usage : simple\_test \[ifname1\]  
    \* ifname is NIC interface, f.e. eth0  
    \*  
    \* This is a minimal test.  
    \*  
    \* (c)Arthur Ketels 2010 - 2011  
    \*/
   
   #include \<stdio.h\>  
   #include \<string.h\>  
   #include \<inttypes.h\>
   
   #include "ethercat.h"
   
   #define EC\_TIMEOUTMON 500
   
   char IOmap\[4096\];  
   OSAL\_THREAD\_HANDLE thread1;  
   int expectedWKC;  
   boolean needlf;  
   volatile int wkc;  
   boolean inOP;  
   uint8 currentgroup = 0;  
   boolean forceByteAlignment = FALSE;
   
   void simpletest(char \*ifname)  
   {  
       int i, j, oloop, iloop, chk;  
       needlf = FALSE;  
       inOP = FALSE;
   
      printf("Starting simple test\\n");
   
      /\* initialise SOEM, bind socket to ifname \*/  
      if (ec\_init(ifname))  
      {  
         printf("ec\_init on %s succeeded.\\n",ifname);  
         /\* find and auto-config slaves \*/
   
          if ( ec\_config\_init(FALSE) \> 0 )  
         {  
            printf("%d slaves found and configured.\\n",ec\_slavecount);
   
            if (forceByteAlignment)  
            {  
               ec\_config\_map\_aligned(&IOmap);  
            }  
            else  
            {  
               ec\_config\_map(&IOmap);  
            }
   
            ec\_configdc();
   
            printf("Slaves mapped, state to SAFE\_OP.\\n");  
            /\* wait for all slaves to reach SAFE\_OP state \*/  
            ec\_statecheck(0, EC\_STATE\_SAFE\_OP,  EC\_TIMEOUTSTATE \* 4);
   
            oloop = ec\_slave\[0\].Obytes;  
            if ((oloop == 0) && (ec\_slave\[0\].Obits \> 0)) oloop = 1;  
            if (oloop \> 8) oloop = 8;  
            iloop = ec\_slave\[0\].Ibytes;  
            if ((iloop == 0) && (ec\_slave\[0\].Ibits \> 0)) iloop = 1;  
            if (iloop \> 8) iloop = 8;
   
            printf("segments : %d : %d %d %d %d\\n",ec\_group\[0\].nsegments ,ec\_group\[0\].IOsegment\[0\],ec\_group\[0\].IOsegment\[1\],ec\_group\[0\].IOsegment\[2\],ec\_group\[0\].IOsegment\[3\]);
   
            printf("Request operational state for all slaves\\n");  
            expectedWKC = (ec\_group\[0\].outputsWKC \* 2) + ec\_group\[0\].inputsWKC;  
            printf("Calculated workcounter %d\\n", expectedWKC);  
            ec\_slave\[0\].state = EC\_STATE\_OPERATIONAL;  
            /\* send one valid process data to make outputs in slaves happy\*/  
            ec\_send\_processdata();  
            ec\_receive\_processdata(EC\_TIMEOUTRET);  
            /\* request OP state for all slaves \*/  
            ec\_writestate(0);  
            chk = 200;  
            /\* wait for all slaves to reach OP state \*/  
            do  
            {  
               ec\_send\_processdata();  
               ec\_receive\_processdata(EC\_TIMEOUTRET);  
               ec\_statecheck(0, EC\_STATE\_OPERATIONAL, 50000);  
            }  
            while (chk-- && (ec\_slave\[0\].state != EC\_STATE\_OPERATIONAL));  
            if (ec\_slave\[0\].state == EC\_STATE\_OPERATIONAL )  
            {  
               printf("Operational state reached for all slaves.\\n");  
               inOP = TRUE;  
                   /\* cyclic loop \*/  
               for(i = 1; i \<= 10000; i++)  
               {  
                  ec\_send\_processdata();  
                  wkc = ec\_receive\_processdata(EC\_TIMEOUTRET);
   
      
   
                       if(wkc \>= expectedWKC)  
                       {  
                           printf("Processdata cycle %4d, WKC %d , O:", i, wkc);
   
                           for(j = 0 ; j \< oloop; j++)  
                           {  
                               printf(" %2.2x", \*(ec\_slave\[0\].outputs + j));  
                           }
   
                           printf(" I:");  
                        //Test  
                           int Fx= \*(ec\_slave\[0\].inputs+1)\*256+\*(ec\_slave\[0\].inputs);  
                           int Fy= \*(ec\_slave\[0\].inputs+5)\*256+\*(ec\_slave\[0\].inputs+4);  
                           int Fz= \*(ec\_slave\[0\].inputs+9)\*256+\*(ec\_slave\[0\].inputs+8);  
                           int Tx= \*(ec\_slave\[0\].inputs+13)\*256+\*(ec\_slave\[0\].inputs+12);  
                           int Ty= \*(ec\_slave\[0\].inputs+17)\*256+\*(ec\_slave\[0\].inputs+16);  
                           int Tz= \*(ec\_slave\[0\].inputs+21)\*256+\*(ec\_slave\[0\].inputs+20);  
                           int Ax= \*(ec\_slave\[0\].inputs+25)\*256+\*(ec\_slave\[0\].inputs+24);  
                           int Ay= \*(ec\_slave\[0\].inputs+29)\*256+\*(ec\_slave\[0\].inputs+28);  
                           int Az= \*(ec\_slave\[0\].inputs+33)\*256+\*(ec\_slave\[0\].inputs+32);
   
                           printf(" Fx: %d, Fy: %d,Fz: %d,Tx: %d,Ty: %d,Tz: %d,Ax: %d,Ay: %d,Az: %d, ", Fx, Fy,Fz,Tx,Ty,Tz,Ax,Ay,Az);  
                           printf(" T:%"PRId64"\\n",ec\_DCtime);  
                           needlf = TRUE;  
                       }  
                       osal\_usleep(5000);
   
                   }  
                   inOP = FALSE;  
               }  
               else  
               {  
                   printf("Not all slaves reached operational state.\\n");  
                   ec\_readstate();  
                   for(i = 1; i\<=ec\_slavecount ; i++)  
                   {  
                       if(ec\_slave\[i\].state != EC\_STATE\_OPERATIONAL)  
                       {  
                           printf("Slave %d State=0x%2.2x StatusCode=0x%4.4x : %s\\n",  
                               i, ec\_slave\[i\].state, ec\_slave\[i\].ALstatuscode, ec\_ALstatuscode2string(ec\_slave\[i\].ALstatuscode));  
                       }  
                   }  
               }  
               printf("\\nRequest init state for all slaves\\n");  
               ec\_slave\[0\].state = EC\_STATE\_INIT;  
               /\* request INIT state for all slaves \*/  
               ec\_writestate(0);  
           }  
           else  
           {  
               printf("No slaves found!\\n");  
           }  
           printf("End simple test, close socket\\n");  
           /\* stop SOEM, close socket \*/  
           ec\_close();  
       }  
       else  
       {  
           printf("No socket connection on %s\\nExecute as root\\n",ifname);  
       }  
   }
   
   OSAL\_THREAD\_FUNC ecatcheck( void \*ptr )  
   {  
       int slave;  
       (void)ptr;                  /\* Not used \*/
   
       while(1)  
       {  
           if( inOP && ((wkc \< expectedWKC) || ec\_group\[currentgroup\].docheckstate))  
           {  
               if (needlf)  
               {  
                  needlf = FALSE;  
                  printf("\\n");  
               }  
               /\* one ore more slaves are not responding \*/  
               ec\_group\[currentgroup\].docheckstate = FALSE;  
               ec\_readstate();  
               for (slave = 1; slave \<= ec\_slavecount; slave++)  
               {  
                  if ((ec\_slave\[slave\].group == currentgroup) && (ec\_slave\[slave\].state != EC\_STATE\_OPERATIONAL))  
                  {  
                     ec\_group\[currentgroup\].docheckstate = TRUE;  
                     if (ec\_slave\[slave\].state == (EC\_STATE\_SAFE\_OP + EC\_STATE\_ERROR))  
                     {  
                        printf("ERROR : slave %d is in SAFE\_OP + ERROR, attempting ack.\\n", slave);  
                        ec\_slave\[slave\].state = (EC\_STATE\_SAFE\_OP + EC\_STATE\_ACK);  
                        ec\_writestate(slave);  
                     }  
                     else if(ec\_slave\[slave\].state == EC\_STATE\_SAFE\_OP)  
                     {  
                        printf("WARNING : slave %d is in SAFE\_OP, change to OPERATIONAL.\\n", slave);  
                        ec\_slave\[slave\].state = EC\_STATE\_OPERATIONAL;  
                        ec\_writestate(slave);  
                     }  
                     else if(ec\_slave\[slave\].state \> EC\_STATE\_NONE)  
                     {  
                        if (ec\_reconfig\_slave(slave, EC\_TIMEOUTMON))  
                        {  
                           ec\_slave\[slave\].islost = FALSE;  
                           printf("MESSAGE : slave %d reconfigured\\n",slave);  
                        }  
                     }  
                     else if(!ec\_slave\[slave\].islost)  
                     {  
                        /\* re-check state \*/  
                        ec\_statecheck(slave, EC\_STATE\_OPERATIONAL, EC\_TIMEOUTRET);  
                        if (ec\_slave\[slave\].state == EC\_STATE\_NONE)  
                        {  
                           ec\_slave\[slave\].islost = TRUE;  
                           printf("ERROR : slave %d lost\\n",slave);  
                        }  
                     }  
                  }  
                  if (ec\_slave\[slave\].islost)  
                  {  
                     if(ec\_slave\[slave\].state == EC\_STATE\_NONE)  
                     {  
                        if (ec\_recover\_slave(slave, EC\_TIMEOUTMON))  
                        {  
                           ec\_slave\[slave\].islost = FALSE;  
                           printf("MESSAGE : slave %d recovered\\n",slave);  
                        }  
                     }  
                     else  
                     {  
                        ec\_slave\[slave\].islost = FALSE;  
                        printf("MESSAGE : slave %d found\\n",slave);  
                     }  
                  }  
               }  
               if(!ec\_group\[currentgroup\].docheckstate)  
                  printf("OK : all slaves resumed OPERATIONAL.\\n");  
           }  
           osal\_usleep(10000);  
       }  
   }
   
   int main(int argc, char \*argv\[\])  
   {  
      printf("SOEM (Simple Open EtherCAT Master)\\nSimple test\\n");
   
      if (argc \> 1)  
      {  
         /\* create thread to handle slave error handling in OP \*/  
   //      pthread\_create( &thread1, NULL, (void \*) &ecatcheck, (void\*) &ctime);  
         osal\_thread\_create(&thread1, 128000, &ecatcheck, (void\*) &ctime);  
         /\* start cyclic part \*/  
         simpletest(argv\[1\]);  
      }  
      else  
      {  
         ec\_adaptert \* adapter = NULL;  
         printf("Usage: simple\_test ifname1\\nifname = eth0 for example\\n");
   
         printf ("\\nAvailable adapters:\\n");  
         adapter = ec\_find\_adapters ();  
         while (adapter != NULL)  
         {  
            printf ("    - %s  (%s)\\n", adapter-\>name, adapter-\>desc);  
            adapter = adapter-\>next;  
         }  
         ec\_free\_adapters(adapter);  
      }
   
      printf("End program\\n");  
      return (0);  
   }
3. do `make` in build folder
4. then run the simpletest program as follow(C++)

SOEM/build/test/linux/simple\_test  
sudo ./simple\_test -(port)

![Untitled-53](https://help.aidinrobotics.co.kr/hs-fs/hubfs/Untitled-53.png?width=670&height=389&name=Untitled-53.png)

 

[^ Go to First page](https://help.aidinrobotics.co.kr/en/6-axis-force-torque-sensor-ethercat#Go-to-Firstpage-AFT200EC)

- [Full Manual](https://help.aidinrobotics.co.kr/en/full-manual?hsLang=en)
- [Install Guide](https://help.aidinrobotics.co.kr/en/install-guide?hsLang=en)

[![에이딘로보틱스](https://help.aidinrobotics.co.kr/hs-fs/hubfs/%EB%A1%9C%EA%B3%A01%EC%97%B4_grey.png?width=160&height=16&name=%EB%A1%9C%EA%B3%A01%EC%97%B4_grey.png "에이딘로보틱스")](https://help.aidinrobotics.co.kr/help?hsLang=en)

**(주)에이딘로보틱스, AIDIN ROBOTICS Inc.**​

5F, 12-20, Simin-daero 327beon-gil, Dongan-gu, Anyang-si,Gyeonggi-do, South Korea (14055)​  
영업/마케팅/PR: [sales@aidinrobotics.co.kr](mailto:sales@aidinrobotics.co.kr) | 채용문의: [hr@aidinrobotics.co.kr](mailto:hr@aidinrobotics.co.kr) | 기업문의: [info@aidinrobotics.co.kr](mailto:info@aidinrobotics.co.kr) |  Tel: +82-31-360-7926

<http://linkedin.com/company/89803190/> <https://www.facebook.com/aidinrobotics> <https://instagram.com/aidinrobotics/> <https://www.youtube.com/channel/UCl-oWZpe9Cx48BuTRgk7QnA>

Copyright @ AIDIN ROBOTICS 2024   I  [개인정보처리방침](https://www.aidinrobotics.co.kr/privacypolicy)