1 Example project
The location for the ECS CustomOD Example is in our Knowledge Base
KB → Software → LFW Host Examples → EtherCAT Slave
For netX90:
2 ECS Sources
The ECS Sources in the ECS CustomOD Example are in the folder:
netXStudio_ECSV5_simpleConfig_V2.1.0.0\netX 90 - EtherCAT Slave - simpleConfig V2.1.0.0\Components\cifXApplicationDemoECS\Sources
3 Configuration packet
The ECS Configuration packet is in the file AppECS_DemoApplicationFuction.c. The Configuration packet is explained in the SimpleConfig Example.
In the CustomOD Example the There is no EoE Example available. Take the source from ECS simpleConfig Example and Socket Interface Example
2 Configuration packet
For EoE it is necessary to change the EtherCAT Set Configuration Packet.
add ECAT_SET_CONFIG_COE is usedEOE flag:
ptConfigReq->tData.tBasicCfg.ulComponentInitialization |= ECAT_SET_CONFIG_DEVICEINFO | ECAT_SET_CONFIG_COEEOE;
Then this structure needs to be filled:
ECAT_SET_CONFIG_COE_T* ptCoECfg;
ptCoECfg = &ptConfigReq->tData.tComponentsCfg.tCoECfg;
ptCoECfg->bCoeFlags = ECAT_SET_CONFIG_COEFLAGS_USE_CUSTOM_OD;
ptCoECfg->bCoeDetails = ECAT_SET_CONFIG_COEDETAILS_ENABLE_SDO
| ECAT_SET_CONFIG_COEDETAILS_ENABLE_SDOINFO
| ECAT_SET_CONFIG_COEDETAILS_ENABLE_UPLOAD
| ECAT_SET_CONFIG_COEDETAILS_ENABLE_SDOCOMPLETEACCESS;
ptCoECfg->ulOdIndicationTimeout = 1000;
ptCoECfg->ulDeviceType = 0;
This: “ECAT_SET_CONFIG_COEFLAGS_USE_CUSTOM_OD” activates the custom OD. The stack will now only create the Object 0x1000 for device Type and the object 0x1018 for VendorID, Productcode, Revision Number and SerialNumber
All other Objects need to be created by application.
4 Create Object dictionary
The file AppECS_DemoObjectDictionary.h has a tables of objects and subobjects.
OBJECT_DESCRIPTION_T g_tObjects[] has the object table with the Indexs:
0x1600 → RxPDO
0x1A00 → TxPDO
0x1C00 → Sync Manager Comunication Type
0x1C12 → Sync Manger 1 PDO Assignment
0x1C13 → Sync Manger 1 PDO Assignment
0x2000 → Manufacture specific Outputs
0x3000 → Manufacture specific Inptus
0x4000 → Hello World Object
Each of the objects has a table of subobjects.
In the file AppECS_DemoApplicationFuction.c are the functions.
AppECS_OD_SendCreateObjectReq() and
AppECS_OD_SendCreateSubObjectReq()
5 Start Sequenz
The Object Dictionary must be created between Channel Init and Bus ON. This is done in AppECS_ConfigureStack():
/* initialize channel to use the configured data */
App_SysPkt_AssembleChannelInitReq(&ptAppData->tPacket);
ulRet = Pkt_SendReceivePacket( ptAppData->hChannel[0], &ptAppData->tPacket, TXRX_TIMEOUT );
if( ulRet != CIFX_NO_ERROR )
return ulRet;
/* Create Objects */
AppECS_OD_SendCreateObjectReq(ptAppData, &g_customOd);
//ulRet = Pkt_SendReceivePacket( ptAppData->hChannel, &ptAppData->tPacket, TXRX_TIMEOUT );
if( ulRet != CIFX_NO_ERROR )
return ulRet;
App_SysPkt_AssembleStartStopCommReq( &ptAppData->tPacket, true );
ulRet = Pkt_SendReceivePacket( ptAppData->hChannel[0], &ptAppData->tPacket, TXRX_TIMEOUT );
if( ulRet != CIFX_NO_ERROR )
return ulRet;
6 ECM Master
As soon as the ECS Stack in successfully configured and the Start Communication Request / Bus On is done, the EtherCAT Slave goes into Init State.
The EtherCAT Master can read out the Object dictionary in Pre-Operation State.
Bring device in Preop with TwinCAT:
Read out the Object dictionary:
List of All Objects:
and Subobjects
6 Structure of Manufacturer Object dictionary for processdata.
In the CustomOD Example only one PDO (0x1600) is used. One Object can have 255 subobjects. If each Subobject represents 1 Byte and the number of Byte is more then 255 Byte, it is necessary to create an second PDO Object 0x1601.
Example for Processdata structue with more than one PDO.
...
Manufacturer
Objects
...
Suboabjects in the
Manufacturer Object
...
For Example a Device
...
0x1600
0x1601
0x1602
...
...
0x2000
0x2001
0x2002
....
...
0x2000:01 ; ...
0x2001:01 ; 0x2001:02 ; 0x2001:03 ; ...
0x2002:01 ; 0x2002:02 ; ...
...
...
Command (1 Byte)
Zero level (3 Byte)
Speed Value (2 Byte)
...
SM3 Object
...
0x1A00
0x1A01
0x1A02
...
...
0x3000
0x3001
0x3002
...
...
0x3000:01 ; 0x3000:02 ; ...
0x3001:01 ; 0x3001:02 ; 0x3001:03 ...
0x3002:01 ; 0x3002:02 ; ...
...
...
Status Byte (2 Byte)
Sensor Data 1 (255 Byte)
Sensor Data 2 (2 Byte )
...
The Manufacturer Object can have the Index 0x2000 till 0x5FFF. The Values 0x2000 and 0x3000 can be changed.
In a profile device the object does not have a Index between 0x2000 till 0x5FFF. In this case, the Index has a range of 0x6000 - 0x9FFF.
...
Profiel
Objects
...
Suboabjects in the
ProfielObject
...
For Example a MDP Device
with IO Link profile
...
0x1600
0x1601
0x1602
...
...
0x6000
0x6001
0x6002
....
...
0x6000:01 ; 0x6000:02 ; 0x6000:03 ...
0x6001:01 ; 0x6001:02 ; 0x6001:03 ...
0x6002:01 ; 0x6002:02 ; 0x6002:03 ...
...
...
IO Link Sensor 1 (4 Byte)
IO Link Sensor 2 (10 Byte)
IO Link Sensor 3 (64 Byte)
...
...
SM3 Object
...
0x1A00
0x1A01
0x1A02
...
...
0x7000
0x7001
0x7002
...
...
0x7000:01 ; 0x7000:02 ; 0x7000:03 ...
0x7001:01 ; 0x7001:02 ; 0x7001:03 ...
0x7002:01 ; 0x7002:02 ; 0x7002:03 ...
....
...
IO Link Sensor 1 (4 Byte)
IO Link Sensor 2 (10 Byte)
IO Link Sensor 3 (64 Byte)
...
This picture shows the Linking of this objects:
A Sync Manager Object has a table of PDOs with PDO objects and subobjects. The PDO objects and subobjects are linked to manufacturer obects or profile objects.
3 ESI
Add in the following EoE parameters to the ESI, in the Mailbox area:
<Mailbox DataLinkLayer="1">
<EoE IP="1" MAC="1"/>
<CoE SdoInfo="1" PdoUpload="1" CompleteAccess="1"/>
</Mailbox>
4 TwinCAT
Install the new ESI in TwinCAT.
Now EoE can be seen in TwinCAT in the advanced settings.
The MAC and IP settings will be written to the slave with the following startup parameter.
There is no other way to set the IP to the EtherCAT Slave.
5 Application
To use EoE in the application the socket API is necessary. Go to the Socket Interface Example for more application sourcecode:
netX 90 - Ethernet Interface - Examples
copy the Socket folder to the ECS project
and change the wscript
and activate the ethernet interface channel 1
Bring the ECS Slave to Pre-Operational state. TwinCAT writes EoE startup parameter (MAC and IP) in the statechange form Init to Pre-Operational to the ECS Slave. After that EoE is ready.
The example demonstrates the TCP/UDP server and client ability of the socket interface. For the opposite part, any TCP/UDP server respectively client can be used, for example Socket Test shown below.
https://sourceforge.net/projects/sockettest/
use the same IP like in TwinCAT
The configuration of the socket interface is done by hSockCtrl[] table in AppSockIf_DemoApplicationFunctions.c. Several instances may be created, thus an amount of combination of TCP/UDP servers and clients can be implemented, the limitation of the instances is given by BACKLOG define, the bigger the BACKLOG, the fewer instances are possible.