An Et9300 V1i8
An Et9300 V1i8
Version 1.8
Date: 2017-11-14
LEGAL NOTICE
Trademarks
Beckhoff®, TwinCAT®, EtherCAT®, Safety over EtherCAT®, TwinSAFE® and
XFC® are registered trademarks of and licensed by Beckhoff Automation GmbH.
Other designations used in this publication may be trademarks whose use by third
parties for their own purposes could violate the rights of the owners.
Patent Pending
The EtherCAT Technology is covered, including but not limited to the following
German patent applications and patents: DE10304637, DE102004044764,
DE102005009224, DE102007017835 with corresponding applications or
registrations in various other countries.
Disclaimer
The documentation has been prepared with care. The products described are,
however, constantly under development. For that reason the documentation is not in
every case checked for consistency with performance data, standards or other
characteristics. In the event that it contains technical or editorial errors, we retain the
right to make alterations at any time and without warning. No claims for the
modification of products that have already been supplied may be made on the basis
of the data, diagrams and descriptions in this documentation.
Copyright
© Beckhoff Automation GmbH
The reproduction, distribution and utilization of this document as well as the
communication of its contents to others without express authorization are prohibited.
Offenders will be held liable for the payment of damages. All rights reserved in the
event of the grant of a patent, utility model or design.
Version Comment
1.0 Start document
1.1 Chapter 4 “Hardware access”.
Define descriptions; prototypes changed
1.2 Add chapter 5 Application
Add chapter 9 Tool
Add chapter 9 TestApplication
Enhance Hardware access (chapter 4)
update name references
Enhance EoE chapter
1.3 TestApplication; chapter9 :Update object/entry description (0x2020.1, 0x3003, 0x3004 and
0x3007)
Update “HW_GetTimer()” description
SSC Tool: Edit file information
Update SSC Structure
Add “Find Setting” dialog description
Update naming in Object chapter
1.4 SSCTool:
- Remove Wizard
- Add Configuration handling
1.5 Editorial changes
Add “Getting Started” chapter
Add description for hardware adaption
Test Application:
- Add new test description
- Enhance/update application description
- Describe mechanism to control the behaviors
Enhance Application chapter
- Add setting description
- Interface variables
- Guide to create an application
Add “Synchronization” chapter
Hardware chapter: Sync1_Isr() description added
Update SSC configuration references
Add “EEPROM Handling” chapter
- EEPORM Emulation
- EEPROM Programming
1.6 Editorial changes
Update object list of test application
Update SSC Tool description (chapter 12) according version 1.3.1
1.7 Chapter 6.4.1 : Add offline object dictionary enhancement
Add new mailbox test behaviors
Indicate obsolete hardware functions
Editorial changes
Update SSC Tool screenshots and GUI description
Add further test object in the test application
Add object design rules
Update references if TwinCAT 3 is used
Add SSC OD Tool description
Add optional EEPROM interface functions.
Add Bootloader information
1.8 Update synchronization chapter (describe the timing measurement feature)
Add an EtherCAT state machine chapter
Add EoE application interface description
Add Backup Parameter function list and function calls.
Enhance FoE description and add FoE callback functions.
Add examples how to define an application
Add application parser CoE callback infos
Update EEPROM emulation infos
Testapplication : enhance object 0x3001 to test real and 64bit datatypes
Add clause “Process Data” and “EtherCAT State Machine”
Add clause Slave Identification
2.1 Abbreviation
Abbreviation Description
AL Application Layer
DC Distributed Clocks
NC Numeric Control
SI SubIndex
SII Slave Information Interface
SM Sync Manager
SPI Serial Peripheral Interface
SSC Slave Stack Code
Application User
e.g. CiA402 Drive Profile Application
EoE
SoE
VoE
FoE
EtherCAT Generic
Process
State EtherCAT stack
data
Machine
Mailbox
Hardware function set
Figure 2 shows the association between the Slave Stack Code layers and the source files.
eoeappl.*
foeappl.*
Emergency (emcy.*)
AoE (ecataoe.*)
CoE (ecatcoe.*)
EoE (ecateoe.*)
SoE (ecatsoe.*)
FoE (ecatfoe.*)
VoE
User application files (el9800appl.*,cia402appl.*,... )
Sate machine (ecatslv.*) Process data handling (ecatappl.*) Mailbox handling (mailbox.*)
The structure of the code can be adapted to the application specific requirements by using the Slave
Stack Code Tool (chapter 12).
The function MainLoop() contains the main cycle of the Slave´s firmware, which always runs in free-
run (unsynchronised endless loop):
MainLoop() (file: ecatappl.c)
- ECAT_Main() (file: ecatslv.c)
- CoE_Main() (file: coeappl.c)
- [PDO_OutputMapping() (file:ecatappl.c) only in Free-Run mode]
The only interrupt sources which are actually handled by PDI ISR in the SSC, and therefore not
filtered by the AL Event Mask, are the Process Data SyncManager interrupts, and specifically: SM2
if Process Data Outputs are configured for the Slave, otherwise SM3. All the other possible sources
(included all other SyncManagers) can be directly polled in Register 0x0220.
The defines “EL9800_HW”, “PIC24”, “PIC18”, MCI_HW”, “FC1100_HW” are used to activate a
predefined hardware access implementation. An extract of platforms/ µC is listed in Table 2:
Recommended Hardware Configurations including the recommended defines. Some of the
configurations can also be selected if a new project is created with the SSC Tool (see comment). If
none of these defines are used, then user specific hardware access files need to be added to the
BIG_ENDIAN_FORMAT
CONTROLLER_16BIT
CONTROLLER_32BIT
MBX_16BIT_ACCESS
ESC_16BIT_ACCESS
ESC_32BIT_ACCESS
BIG_ENDIAN_16BIT
FC1100_HW
EL9800_HW
MCI_HW
PIC24
PIC18
Microchip PIC18F452 1 0 1 0 0 0 0 0 0 0 0 0 The stack is ready to use if the PIC 18 on the EL9800 EtherCAT Evaluation board
Generic : 8Bit µC ; SPI ESC is used. Otherwise there might be requirements to adapt the hardware access
access
Microchip 1 1 0 0 0 1 0 1 0 1 0 0 The stack is ready to use if the PIC 24 on the EL9800 EtherCAT Evaluation board
PIC24HJ128GP306 is used. Otherwise there might be requirements to adapt the hardware access.
Generic: 16Bit µC; SPI ESC
access
x86 0 0 0 0 1 0 1 0 1 0 0 0 The stack is ready to use if the stack shall run on a Win32 OS in user mode.
(OS Windows) Otherwise changes in hardware access might be required.
The define “FC1100_HW” is a adapted implementation based on “MCI_HW
Texas Instruments Sitara 0 0 0 0 0 0 0 0 0 0 0 0 To use the SSC on TI AM335x chips the hardware access files from the TI SDK
AM335x need to be added to the project. The files can be added to the slave project via the
patch file (delivered with the SDK), by selecting the TI configuration in the SSC
Tool or by adding the files manually.
Altera® NIOS®II 0 0 0 1 0 x x x x x 0 0 x: depends on the NIOS® configuration in the SOPC builder.
(ESC connected via Avalon In general the following points need to be adapted:
bus) - define “MAKE_PTR_TO_ESC”
- ISRs for Timer/PDI interrupt and Sync0 (depends on the supported features)
- Implement timer access functions and macros
Depending on the platform configuration further changes may be required.
BIG_ENDIAN_FORMAT
CONTROLLER_16BIT
CONTROLLER_32BIT
MBX_16BIT_ACCESS
ESC_16BIT_ACCESS
ESC_32BIT_ACCESS
BIG_ENDIAN_16BIT
FC1100_HW
EL9800_HW
MCI_HW
PIC24
PIC18
Xilinx Microblaze™ 0 0 0 1 0 x x x x x x 0 x: depends on the Microblaze™ configuration.
(ESC connected via PLB) In general the following points need to be adapted:
- define “MAKE_PTR_TO_ESC”
- ISRs for Timer/PDI interrupt and Sync0 (depends on the supported features)
- Implement timer access functions and macros
Depending on the platform configuration further changes may be required.
Renesas - RIN32M3 0 0 0 0 0 0 0 0 0 0 0 0 To use the SSC on Renesas RIN32M3 chip the chip specific hardware access files
need to be added to the project. The files are added automatically if the Renesas
PIN32M3 configuration is selected in the SSC Tool.
Xilinx ZYNQ™ 0 0 0 1 0 x x x x x 0 0 x: depends on the ZYNQ™ configuration.
(ESC connected via the on- In general the following points need to be adapted:
chip bus) - define “MAKE_PTR_TO_ESC”
- ISRs for Timer/PDI interrupt and Sync0 (depends on the supported features)
- Implement timer access functions and macros
Depending on the platform configuration further changes may be required.
- Interrupt Handler: functions completely defined and implemented in the generic EtherCAT
stack, shall be called by the hardware interrupt routines of the specific µC. (chapter 5.1)
If interrupts are used also two macros shall be defined “ENABLE_ESC_INT” and
“DISABLE_ESC_INT”. These shall enable/disable all four interrupt sources.
- Interface Functions/Macros: functions called by the generic EtherCAT stack, shall be
implemented in the hardware access code. (chapter 0)
Parameter void
Return void
Description This function needs to be called every 1ms from a timer ISR
(ECAT_TIMER_INT = 1). If no timer interrupt is supported this function is called
automatically when 1ms is elapsed (based on the provided timer).
Parameter void
Return void
Description This function need to be called from the PDI ISR. For the PDI specific pin
naming and the interrupt generation logic please refer to [6] . To support PDI
interrupt handling it is also required to set “AL_EVENT_ENABLED” to 1.
Parameter void
Return void
Description This function needs to be called from the Sync0 ISR. The Sync0 interrupt is
generated by the DC Unit of the ESC. It is currently not supported by default to
map the Sync0 signal to the PDI interrupt. To support Dc synchronization
“DC_SUPPORTED” need to be set.
Parameter void
Return void
Description This function needs to be called from the Sync1 ISR. The Sync1 interrupt is
generated by the DC Unit of the ESC. It is currently not supported by default to
map the Sync1 signal to the PDI interrupt. To support Dc synchronization
“DC_SUPPORTED” need to be set.
If interrupts are used also two macros shall be defined “ENABLE_ESC_INT” and
“DISABLE_ESC_INT”. These shall enable/disable all four interrupt sources.
5.2.1 Generic
Parameter void
Description Initializes the host controller, process data interface (PDI) and allocates
resources which are required for hardware access.
Parameter void
Return void
Parameter void
Description Get the first two bytes of the AL Event register (0x220-0x221).
Parameter void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
HW_GetALEventRegister.
Get the first two bytes of the AL Event register (0x220-0x221).
Return void
Description Performs a logical AND with the AL Event Mask register (0x0204 : 0x0205).
This function is only required if “AL_EVENT_ENABLED” is set.
NOTE: This function is only required for SSC 5.10 or older.
Return void
Description Performs a logical OR with the AL Event Mask register (0x0204 : 0x0205).
This function is only required if “AL_EVENT_ENABLED” is set.
NOTE: This function is only required for SSC 5.10 or older.
Return void
Description Updates the EtherCAT Run and Error LEDs (or EtherCAT Status LED).
Parameter void
Return void
Return void
Description Disables selected SyncManager channel. Sets bit 0 of the corresponding 0x807
register.
NOTE: This function is only required for SSC 5.10 or older.
Return void
Description Gets the content of the SyncManager register from the stated channel. Reads 8
Bytes starting at 0x800 + 8*channel.
NOTE: This function is only required for SSC 5.10 or older.
Parameter void
Description Reads the current register value of the hardware timer. If no hardware timer is
available the function shall return the counter value of a multimedia timer. The
timer ticks value (increments / ms) is defined in “ECAT_TIMER_INC_P_MS”.
This function is required if no timer interrupt is supported (“ECAT_TIMER_INT”
= 0) and to calculate the bus cycle time.
Parameter void
Return void
Parameter void
Description This function is called if an EEPROM reload request is triggered by the master.
Only required if EEPROM Emulation is supported and the function pointer
“pAPPL_EEPROM_Reload” is not set.
In case that the full eeprom emulation is configured (register 0x502, bit6 is 1)
the reload function is not called and does not to be implemented.
Parameter “pData” Pointer to local destination buffer. Type of the pointer depends
on the host controller architecture (specified in ecat_def.h or
the SSC Tool).
Return void
Description Reads from the EtherCAT Slave Controller. This function is used to access
ESC registers and the DPRAM area.
Parameter “pData” Pointer to local destination buffer. Type of the pointer depends
on the host controller architecture (specified in ecat_def.h or
the SSC Tool).
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscRead”.
Reads from the EtherCAT Slave Controller. This function is used to access
ESC registers and the DPRAM area.
Parameter “DWordValue” Local 32Bit variable where the register value shall be stored.
Return void
Description Reads two words from the specified address of the EtherCAT Slave Controller.
In case that no specific read DWORD marco is used the default EscRead
function may be used:
“HW_EscRead(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4)”
Parameter “DWordValue” Local 32Bit variable where the register value shall be stored.
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscReadWord”.
Reads two words from the specified address of the EtherCAT Slave Controller.
Parameter “WordValue” Local 16Bit variable where the register value shall be stored.
Return void
Description Reads one word from the specified address of the EtherCAT Slave Controller.
Only required if “ESC_32BIT_ACCESS” is not set.
In case that no specific read WORD marco is used the default EscRead
function may be used:
“HW_EscRead(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2)”
Parameter “WordValue” Local 16Bit variable where the register value shall be stored.
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscReadWord”.
Reads one word from the specified address of the EtherCAT Slave Controller.
Only required if “ESC_32_BIT_ACCESS” is not set.
Parameter “ByteValue” Local 8Bit variable where the register value shall be stored.
Return void
Parameter “ByteValue” Local 8Bit variable where the register value shall be stored.
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscReadByte”.
Reads one byte from the EtherCAT Slave Controller.
Only required if “ESC_16BIT_ACCESS” and “ESC_32BIT_ACCESS” are not
set.
Parameter “pData” Pointer to local destination mailbox buffer. Type of the pointer
depends on the host controller architecture (specified in
ecat_def.h or the SSC Tool).
Return void
Description Reads data from the ESC and copies to slave mailbox memory. If the local
mailbox memory is also located in the application memory this function is equal
to “HW_EscRead”.
Parameter “pData” Pointer to local source buffer. Type of the pointer depends on
the host controller architecture (specified in ecat_def.h or the
SSC Tool).
Return void
Description Writes from the EtherCAT Slave Controller. This function is used to access
ESC registers and the DPRAM area.
Parameter “pData” Pointer to local source buffer. Type of the pointer depends on
the host controller architecture (specified in ecat_def.h or the
SSC Tool).
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscWrite”.
Writes from the EtherCAT Slave Controller. This function is used to access ESC
registers and the DPRAM area.
Parameter “DWordValue” Local 32Bit variable which contains the data to be written to
the ESC memory area.
Return void
Parameter “DWordValue” Local 32Bit variable which contains the data to be written to
the ESC memory area.
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscWriteWord”.
Writes two words to the EtherCAT Slave Controller.
Parameter “WordValue” Local 16Bit variable which contains the data to be written to
the ESC memory area.
Return void
Description Writes one word to the EtherCAT Slave Controller. Only required if
“ESC_32BIT_ACCESS” is not set.
Parameter “WordValue” Local 16Bit variable which contains the data to be written to
the ESC memory area.
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscWriteWord”.
Writes one word to the EtherCAT Slave Controller. Only required if
“ESC_32BIT_ACCESS” is not set.
Parameter “ByteValue” Local 8Bit variable which contains the data to be written to
the ESC memory area.
Return void
Parameter “ByteValue” Local 8Bit variable which contains the data to be written to
the ESC memory area
Return void
Description This function should be implemented if a special function for ESC access from
interrupt service routines is required; otherwise this function is defined as
“HW_EscWriteByte”.
Writes one byte to the EtherCAT Slave Controller.
Only defined if “ESC_16BIT_ACCESS” and “ESC_32BIT_ACCESS” are
disabled.
Parameter “pData” Pointer to local source mailbox buffer. Type of the pointer
depends on the host controller architecture (specified in
ecat_def.h or the SSC Tool).
Return void
Description Writes data from the slave mailbox memory to ESC memory. If the local
mailbox memory is also located in the application memory this function is equal
to “HW_EscWrite”.
- SSC Functions: functions completely defined and implemented in the generic EtherCAT stack,
shall be called by the main() function of the user application code in order to trigger the
generic stack. (chapter 6.1)
- Interface Functions: functions called by the generic EtherCAT stack, shall be implemented in
the user application code. (chapter 6.2)
Parameter Void
Parameter Void
Return Void
Description This function handles the low priority function like EtherCAT state machine
handling, mailbox protocols and if no synchronization is enabled also the
application.
This function shall be called cyclically from the application.
alStatusCode AL Status Code. (if != 0 the error flag indication will be set)
Return Void
Description This function shall be called by the application to trigger state transition in case
of an application error or to complete a pending transition.
If the function was called due to an error it shall be again if the error is gone.
NOTE: state requests to a higher state than the current state are not allowed.
Return UINT16 0 if the frame sending started, 1 if the frame sending has to be
retried later
Description This function sends an Ethernet frame via EoE to the master. The frame buffer
shall dynamic allocated memory which will be deallocated by the SSC after the
last EOE segment was send.
Received frames are forwarded to “pAPPL_EoeReceive()” (chapter 6.2.4).
6.2.1 Generic
Parameter Void
Return void
Description This function is called by the synchronization ISR or from the mainloop if not
synchronization is activated.
Parameter Void
Description This function is called if the master requests the Explicit Device ID.
Only required if the slave supports Explicit Device ID handling
(EXPLICIT_DEVICE_ID).
Parameter Void
Parameter void
Return void
Description If EEPROM Emulation is enabled and the written data is not stored directly
during the EEPROM Write commands to the permanent memory this function
can be used to store the EEPROM data.
It is called 1000 ms after the last EEPROM access. Using this function shall
only be used if it is not possible to store the EEPROM data directly during the
EEPROM write access.
This function pointer will be reset in MainInit().
Parameter void
Return void
Description Called from the mainloop and may be used for non process data operations
This function pointer will be reset in MainInit().
Parameter Void
Description This function is called during the state transition from INIT to PREOP or INIT to
BOOT.
Parameter Void
Description This function is called during the state transition from PREOP to INIT or BOOT
to INIT.
Description This function is called during the state transition from PREOP to SAFEOP
(even if no input process data is available).
Parameter Void
Description This function is called during the state transition from SAFEOP to PREOP(even
if no input process data is available).
Parameter Void
Description This function is called during the state transition from SAFEOP to OP (even if
no output process data is available).
Parameter Void
Description This function is called during the state transition from OP to SAFEOP(even if no
output process data is available).
Parameter Pointer to two 16bit variables to store the process data size.
pInputSize : Input process data (Slave -> Master).
pOutputSize : Output process data (Master - > Slave).
Description This function is called when the transition from PREOP to SAFEOP is
requested by the EtherCAT master. This function shall calculate the process
data size in bytes The values are required to check the SyncManager settings
and for the generic process data handling.
Return Void
Description This function is called when the master acknowledge and Error.
Return Void
Description This function is called after the application call to map the input process data to
the generic stack (The generic stack will copy the data to the SM buffer).
Return Void
Description This function is called before the application call to get the output process data.
Return Void
Description This function is called by the SSC if a new Ethernet frame is received via EoE.
The memory is freed after the function is called.
The response shall be send via "EOE_SendFrameRequest()" (chapter 6.1).
This function pointer will be reset in MainInit().
Return Void
Description This function is called by the SSC if a new EoE settings are written.
This function pointer will be reset in MainInit().
Parameter pName Pointer to the name of the file (the pointer is null if the function
is called due to a previous busy state)
nameSize Length of the file name (the value is 0 if the function is called
due to a previous busy state)
password Password for the file read (the value is 0 if the function is called
due to a previous busy state)
maxBlockSize Maximum size of a data block (copied to pData)
pData Destination pointer for the first FoE fragment
Description The function is called when a file read request was received. The Foe
fragments shall always have the length of "maxBlockSize" till the last file
fragment. In case that the file size is a multiple of "maxBlockSize" 0 shall be
returned after the last fragment.
This function pointer will be reset in MainInit().
Description The function is called to transmit FoE read data 2 .. n (the slave received an
acknowledge on a previous accepted file read request). The Foe fragments
shall always have the length of "maxBlockSize" till the last file fragment. In case
that the file size is a multiple of "maxBlockSize" 0 shall be returned after the last
fragment.
This function pointer will be reset in MainInit().
Return void
Description The function is called when the master has send an FoE Abort.
This function pointer will be reset in MainInit().
Return 0 in case that the write access is valid or one of the following error codes:
ECAT_FOE_ERRCODE_NOTDEFINED (0x8000)
ECAT_FOE_ERRCODE_NOTFOUND (0x8001)
ECAT_FOE_ERRCODE_ACCESS (0x8002)
ECAT_FOE_ERRCODE_DISKFULL (0x8003)
ECAT_FOE_ERRCODE_ILLEGAL (0x8004)
ECAT_FOE_ERRCODE_EXISTS (0x8006)
ECAT_FOE_ERRCODE_NOUSER (0x8007)
Return 0 in case that the data access is valid or one of the following values:
busy:
FOE_MAXBUSY-100 (0%) (0x7FFA - 100)
...
FOE_MAXBUSY (100%) (0x7FFA)
error:
ECAT_FOE_ERRCODE_NOTDEFINED (0x8000)
ECAT_FOE_ERRCODE_NOTFOUND (0x8001)
ECAT_FOE_ERRCODE_ACCESS (0x8002)
ECAT_FOE_ERRCODE_DISKFULL (0x8003)
ECAT_FOE_ERRCODE_ILLEGAL (0x8004)
ECAT_FOE_ERRCODE_EXISTS (0x8006)
ECAT_FOE_ERRCODE_NOUSER (0x8007)
Parameter void
Return void
Description This function shall clear the backup parameter memory. It is called from
“InitDefaultEntries()”
Parameter void
Description This function shall return a 32Bit Crc for the backup parameter memory. The
return value is stored in 0x10F0.1
Parameter void
Return UINT8 0 if the backup parameter memory was not initialized yet.
<>0 if the memory was initialized
Description The function is called on slave power up (from “COE_ObjInit()”) and shall check
if the backup parameter memory was already initialized.
Parameter void
Return void
Description The function is called after the default parameter values are written to the
memory. Called from “InitDefaultEntries()”
Parameter void
Return void
Description The function is called before the default parameter values are read from the
memory. Called from “LoadDefaultEntries()”
Return void
Description The function shall copy the stored parameter values to referenced pointer
(referencing the object entry). Called from “LoadBackupEntries ()”
Description The function shall copy the data to the non-volatile memory. Called from
“InitDefaultEntries()” ,StoreBackupEntries(), COE_WriteBackupEntry().
Name ApplicationObjDic
Description Only required if the slave supports CoE. The variable shall be defined in the
application header file. This array contains the application specific objects. The
last element of this array shall have the index 0xFFFF.
Name pEEPROM
Type UINT8 *
6.4.1 Examples
Examples to create application from the scratch are posted in the ETG Developers forum.
/* Only the object name is described all entries are automatically names as
“SubIndex 000” (000 is incremented for each entry) */
OBJCONST UCHAR OBJMEM aName0x1601[] = "RxPDO-Map\000\377";
#endif //#ifdef _OBJD_
/* Only the object name is described all entries are automatically names as
“SubIndex 000” (000 is incremented for each entry) */
OBJCONST UCHAR OBJMEM aName0x1A00[] = "TxPDO-Map\000\377";
#endif //#ifdef _OBJD_
/* Object 0x6010 */
{NULL,NULL, 0x6010, {DEFTYPE_UNSIGNED32, 0 | (OBJCODE_VAR << 8)},
&EntryDesc0x6010, aName0x6010, &ResultObj6010, NULL, NULL, 0x0000 },
/* Object 0x7010 */
{NULL,NULL, 0x7010, {DEFTYPE_RECORD, 2 | (OBJCODE_REC << 8)},
asEntryDesc0x7010, aName0x7010, &OutputData, NULL, NULL, 0x0000 },
{NULL,NULL, 0xFFFF, {0, 0}, NULL, NULL, NULL, NULL}};
5. File: sampleappl.c
Update the expected process data size (which is similar to the size of the corresponding
SyncManager).
NOTE: if one of the values mismatch with the information in the ESI file the slave will abort the
state transition from PreOP to SafeOP with the Error code 0x1E or 0x1D (depending on the wrong
value)
UINT16 APPL_GenerateMapping(UINT16 *pInputSize,UINT16 *pOutputSize)
{
/* 32Bit cyclic counter (0x6000) and 32Bit Result (*0x6010)/
*pInputSize = 8;
return ALSTATUSCODE_NOERROR;
}
6. File: sampleappl.c
Update the input process data mapping function to copy also the new process data.
void APPL_InputMapping(UINT16* pData)
{
MEMCPY(pData,&InputCounter,SIZEOF(InputCounter));
/* Increment the data pointer to write the next process data (pData refers
to the buffer which is copied to the ESC memory controlled by SyncManager 3
(input process data) */
pData +=2;
/* Increment the data pointer to write the next process data (pData refers
to the buffer which is copied to the ESC memory controlled by SyncManager 3
(input process data) */
pData += 2;
InputCounter++;
}
9. File: ESI file (in xml format)
Update the entries of the RxPdo and TxPdo elements according to step 3.
<RxPdo Mandatory="true" Fixed="true" Sm="2">
<Index>#x1601</Index>
<Name>RxPDO</Name>
<Entry>
<Index>#x7010</Index>
<SubIndex>1</SubIndex>
<BitLen>32</BitLen>
<Name>Value1</Name>
<DataType>UDINT</DataType>
</Entry>
<Entry>
<Index>#x7010</Index>
<SubIndex>2</SubIndex>
<BitLen>32</BitLen>
<Name>Value2</Name>
<DataType>UDINT</DataType>
</Entry>
</RxPdo>
<Object>
<Index>#x1a00</Index>
<Name>TxPDO-Map</Name>
<Type>DT1601</Type>
<BitSize>80</BitSize>
<Info>
<SubItem>
<Name>SubIndex 000</Name>
<Info>
<DefaultData>02</DefaultData>
</Info>
</SubItem>
<SubItem>
<Name>SubIndex 001</Name>
<Info>
<DefaultData>20000060</DefaultData>
</Info>
</SubItem>
<SubItem>
<Name>SubIndex 002</Name>
<Info>
<DefaultData>20101060</DefaultData>
</Info>
</SubItem>
</Info>
<Flags>
<Access>ro</Access>
<Category>o</Category>
</Flags>
</Object>
The other two Object Codes (ARRAY and RECORD) will be defined by structure. This contains an
8Bit variable as first member (Subindex0), which contains the highest subindex (last Object Entry).
Note: in The Slave Stack Code the Subindex0 will always be defined as 16Bit variable due to
alignment reasons!
_ARR_OBJ_DEF ArrObj;
_REC_OBJ_DEF RecObj;
If the EtherCAT slave supports CiA402 drive profile the object range 0x6000 – 0xDFFF is subdivided
according to [1] . The CiA402 objects used in the CiA402 sample listed in 10.1Objects.
The object indices used in the EL9800 Application are used according to the Modular device Profile
(Figure 13: EL9800 Application object ranges).
Configuration Area
0x1000 – 0x1FFF
Device Parameter
0xF000 – 0xFFFF
EE_IsDefaultDataInitialized()
No
InitDefaultEntries()
EE_ResetFlashData()
EE_StoreDefaultData()
LoadBackupEntries()
EE_LoadDefaultData()
LoadBackupEntries()
StoreBackupEntries()
8.3.1 Implementation
The EoE stack is Implemented in the files ecateoe.* (basic EoE handling) and eoeappl.* (EoE
application handling).To support EoE the switch “EOE_SUPPORTED” need to be set to 1 and the EoE
flag need to be set in the ESI (REF.[4] ). Depending on the switch “STATIC_ETHERNET_BUFFER”
dynamic memory is allocated for Ethernet frame handling or a fixed memory is used (1514 Bytes).
By default the stack only handles ICMP and ARP frames.
If MBX_MailboxSendReq() returns No
a value unequal 0 the mailbox Full Mbx buffer?
buffer is full
Yes
Store datagram in
„pEoESendStored“
Clear
„bSendFramePending“ flag
Yes
Checks if an EoE Init Request was
Init Request
received
No
Received MAC („aMacAdd“) and IP
(„aIpAdd“) address are stored. EOEAPPL_SettingsInd()
No
Yes
Which of these signals are supported by the stack are based on the following defines.
AL_EVENT_ENABLED: Enable/Disable the (PDI_)IRQ support. The interrupt can be triggered by
different event which are controlled by the AL event register (0x220:0x223) and the AL event mask
register (0x204:0x207). For further details see the ESC datasheet. By default only the process data
event (process data was written to SyncManager2 or process data was read from SyncManger3)
triggers the interrupt.
DC_SUPPORTED: Enable/Disable the handling of the Sync0/Sync1 signals generated by the DC
UNIT.
SyncManager(SM) * 1 -- Bit0:7: 0 --
*
SM/Sync0 1 1 Bit0: 1 --
Bit1: 1
Bit2:7: --
Sync0/Sync1 0 1 Bit0: 1 --
Bit1: 1
Bit2: 1
Bit3:7: --
9.1.2 SyncManager
In this mode the slave application is executed SyncManager synchronous (Figure 29: SyncManager
Synchronization). On every write event to the output process data SyncManager (SM2) the slave
application is started. If the device supports only inputs, then the application is started on reading the
input process data (SM3).
9.1.4 SyncManager/Sync0/Sync1
In this mode the output process data mapping is triggered by the SM2 event, the ECAT_Application is
started on Sync0 and the input latch is started with Sync1 (see Figure 31: SM/Sync0/Sync1
Synchronization).
NOTE: The input latch shall be added to APPL_InputMapping(); by default it is done in
APPL_Application()
Sync0 Sync0
Cycle Time (0x1C32.2/0x1C33.2)
9.1.6 Sync0/Sync1
The output process data mapping and the ECAT_Application is started on Sync0 and the input latch is
started with Sync1 (Figure 33: Sync0/Sync1 Synchronization).
NOTE: The input latch shall be added to APPL_InputMapping(); by default it is done in
APPL_Application().
Frame Frame
PDO_OutputMapping() PDO_InputMapping()
ECAT_Application() ECAT_Application() ECAT_Application() ECAT_Application()
Start Input Latch
10.1 Objects
All CiA402 specific objects are defined in file cia402appl.h.
All mandatory and some optional object are defined in this sample implementation. Table 8 contains a
list of all defined objects. The object variables are located in the structure CiA402Objects.
Table 8: Object definitions in file cia402appl.h
Index Object name Variable in source code Comment/Description
0x1600 Rx PDOs sRxPDOMap0 includes all objects required for
dynamic change between csv/csp
0x1601 Rx PDOs sRxPDOMap1 includes objects required for csp
mode of operation
0x1602 Rx PDOs sRxPDOMap2 includes objects required for csv
mode of operation
0x1A00 Tx PDOs sTxPDOMap0 includes all objects required for
dynamic change between csv/csp
0x1A01 Tx PDOs sTxPDOMap1 includes objects required for csp
mode of operation
0x1A02 Tx PDOs sTxPDOMap2 includes objects required for csv
mode of operation
0x1C12 SyncManger 2 sRxPDOassign this object is written in change
PDO assign state from PREOP to SAFEOP;
(Rx PDOs) the configuration depends on the
number of axes (not include in
CiA402Objects)
0x1C13 SyncManger 3 sTxPDOassign equal to 0x1C12 (not include in
PDO assign CiA402Objects)
(Tx PDOs)
0x603F Error Code objErrorCode this value shall be set if an error
in the PDS occurs
The objects from 0x6000 to 0x67FF are incremented with 0x800 for each axis (Index + #Axis*0x800).
bBrakeApplied
Applied
bLowLevelPower
Applied
bHighLevelPower
Enabled
bAxisFunction
Allowed
bConfiguration
3 0 x 1 1 1 Switched on true true true false true
4 0 1 1 1 1 Operation false true true true false
enabled
5 0 0 1 1 1 Switch on true true true false true
6 0 x 1 1 0 Ready to switch true true false false true
on
7 0 x x 0 x Switch on true true false false true
disabled
0 x 0 1 x
8 0 x 1 1 0 Ready to switch true true false false true
on
9 0 x x 0 x Switch on true true false false true
disabled
10 0 x x 0 x Switch on true true false false true
disabled
0 x 0 1 x
11 0 x 0 1 x Quick stop active false true true true false
12 0 x x 0 x Switch on true true false false true
disbaled
13 Triggered by application Fault reaction false true true true false
active
14 Transition if option code Fault true true false false true
0x605E is finished
15 1 x x x x Switch on true true false false true
disabled
16 After quick stop always (Operation false true true true false
goto “Switch on disabled” enabled)
The transition number in Table 8 referring to the transition number in Figure 35.[1]
b. TwinCAT 3: Open the Visual Studio shell, create a new TwinCAT project and scan the
network for new devices (Figure 27).
After the network scan is complete a message box appears with a notification that an EtherCAT drive
was found. If the this message is acknowledged with “Yes” the System Manager will automatically
create an NC task with the correct process data mapping.
a. TwinCAT 3 : Open the context menu of the MOTION TreeItem -> “Add New Item” -> Type
“NC/PTP NCI Configuration” -> Open the context menu of the new created “Axes” TreeItem ->
“Add New Item” -> Type “Continuous Axis” -> set Axis type to “CANopen DS402” (see Figure
41: TwinCAT 3 CiA402 axis setup).
Add a new EtherCAT device and append the CiA402 description (Figure 42).
Now the device variables (objects) need to be linked to the axis variables as shown in Table 10.
Table 10: Linking of device and NC variables
object index Type variable name
device NC axis
0x6040 output Controlword “Drive_Out” -> “nCtrl1” + “nCtrl2”
0x60FF output Target velocity “Drive_Out” -> “nOutData2”
0x6041 input Statusword “Drive_In” -> ”nStatus1” + “nStatus2”
For the Stausword and Controlword continues process data mapping is required. This can be
performed in the linking window (eg. Statusword link window Figure 43). Enable “All Types”,
“Continuous” and select the desired variables. TwinCAT will map “nStatus1” to the low byte and
“nStatus2” to the high byte of the Statusword.
12.2.1.1 File
The file menu (Figure 47: Configurator File Menu) contains the project file operations.
[New]
Create a new slave project based on the local SSC files. The project can either be created on
the default configuration or a custom configuration (Figure 48: Create New Project). To import
third party configurations see 12.6.
[Open]
Open an existing project file.
[Save]
Save the actual settings to the current project file (if no project file was created before a file
browser dialog appears to create a new file).
[Save As]
Save the actual settings to a new project file.
[Exit]
Close current session.
12.2.1.2 Project
12.2.1.3 Tool
- Generic
o [Open last project on startup]
The last slave project is reloaded on the next startup of the tool.
o [Update SSC before creating a new project]
If this flag is set the Slave Stack Code Tool checks if a new SSC version is available
before creating a new project.
NOTE: Before each project update ([Project] -> [Project Update]) an update of the
local SSC file will be triggered.
The local SSC files are stored in the application data folder.
o [Update local SSC]
Update local SSC files.
o [Vendor Name]
Add your Vendor name here. This information will be added to slave project.
o [Vendor ID]
Add your Vendor ID here. This information will be added to the slave project.
If you don’t have a Vendor ID yet please contact info@ethercat.org.
- Editor
o [Show advanced settings]
Show also defines which are marked as advanced (e.g. compiler defines)
o [Show read only settings]
Defines which are marked as read-only are shown (but remain read only). Read only
defines are marked with a lock symbol (see Figure 53: Configurator Locked Define).
12.2.1.4 Help
12.2.2 Windows
I. [Slave Project Navigation]
The Slave Project Navigation window lists all kinds of defines which can be configured.
Selecting one of the nodes, the corresponding defines are displayed in the Slave Settings
window. If the project was saved at least once the root node name is equal to the project
name. This window also supports Drag & Drop.
[Slave Settings]
The information shown in this window depends on the selected node in the Slave Project Navigation
window.
If the root project node is selected the SSC Version, Config File Version, a list of all Slave Stack Code
files and user files are shown (see Figure 56: Configurator Project Information). The file list within
provides a right-click context menu (see Figure 57: Configurator File Context Menu).
.
Figure 56: Configurator Project Information
[Reload File]
Cached file will be reloaded (only possible for user files).
[Remove File]
Remove file from project (only possible for user files).
If one of the setting nodes are selected within the Slave Project Navigation, the corresponding settings
are displayed within the Slave Settings window (Figure 58: Configurator Slave Settings).
[Cancel]
Close dialog without creating new files
[Close]
Close dialog when new files were created.
[Start]
Create new slave files in the specified folder.
After new slave files are created a dialog appears to open the specified output folder or to return to the
configurator.
[online]
Load SSC files from the Beckhoff FTP server.
[Current version]
Slave Stack Code version of the current project
[New version]
Latest Slave Stack Code version available
[Show only current project related changes]
If checked only changes are shown which are related to the current project settings. Otherwise all
changes are displayed.
NOTE: If checked only the latest changes are shown. Related changes which are older than one
version are not displayed.
[OK]
Update current project. If an exclamation mark is show important information need to be
acknowledged before the project is updated.
[Cancel]
Cancel project update
NOTE: a Configuration may reference files which are not covered by the Beckhoff Automation GmbH
license agreement. Contact the configuration vendor for further information.
For profiles like CiA402 input objects and output objects are all mapped into one single input and
output PDO.
13.4 Syntax
The following chapter describes the syntax for the application definition file.
13.4.1 Comment
Single lines can be used as a comment line (ignored) by setting a leading “//” (Figure 69).
13.4.3 ObjectCode
Valid object codes are “VARIABLE”, “ARRAY” or “RECORD”. The code VARIABLE identifies an object
a single entry, and ARRAY has multiple entries with the same base data type and a RECORD
contains multiple entries with different base data types. Examples for different ObjectCodes are shown
in Figure 70.
If this value is not set the object code will automatically set (based on the defined entries).
In the generated ESI file and source code objects with the code ARRAY or RECORD will have an
additional “Subindex0” entry which reflects the number of entries.
The generated source code variables based on the table in Figure 70 is as follows.
Object 0x8000:
PROTO UINT16 TestVarObject0x8000;
Object 0x8001:
typedef struct OBJ_STRUCT_PACKED_START {
UINT16 u16SubIndex0; /**< \brief Subindex 0 */
UINT16 aEntries[3]; /**< \brief Subindex 1 - 3 */
} OBJ_STRUCT_PACKED_END
TOBJ8001;
/**
* \brief Object variable
*/
PROTO TOBJ8001 TestArrObject0x8001
#if defined(_APPL_EXAMPLE_) && (_APPL_EXAMPLE_ == 1)
={3,{0,0,0}}
#endif
;
Object 0x8002:
typedef struct OBJ_STRUCT_PACKED_START {
UINT16 u16SubIndex0;
UINT16 Entry1; /* Subindex1 - Entry1 */
UINT32 Entry2; /* Subindex2 - Entry2 */
UINT8 Entry3; /* Subindex3 - Entry3 */
} OBJ_STRUCT_PACKED_END
TOBJ8002;
/**
13.4.4 SI (Subindex)
The Subindex can be either a decimal or hexadecimal value from 1 to 255. In case of an entry range
the syntax “n..m” shall be used (e.g. 1..15). If the object code is record the entries may have defined
names the placeholder “{_SI_:d}” can be used in the entry name, this placeholder will be replaced by
the subindex (in the specified format). How to use the Subindex formats is shown in Figure 71.
13.4.5 DataType
The following data types are supported. To set the entry data type the syntax in column “Base Data
Type” or SSC Syntax shall be used.
When specifying the object structure the object design rules shall be taken into account (chapter 7.1).
To specify gaps a padding entry shall be added. Notation ”pad_x” where x defines the bit size from 1
to 15.
Table 22: Base Data Types describes the supported data types. See ETG.1020 for reference.
Table 22: Base Data Types
Index Name Base Data Type Bit Size
0x0001 BOOLEAN BOOL 1
BIT
0x001E BYTE BYTE 8
0x001F WORD WORD 16
0x0020 DWORD DWORD 32
13.4.6 Default/Min/Max
The columns “Min”/”Max” are not evaluated by the SSC and can empty. The column “Default” defines
the default data of an entry. These shall be set as a hex value in little endian or big endian (with a
leading “0x”). Always the bytes shall be defined (as shown in Figure 73: Default data example).
13.4.8 Access
Defines the access rights via CoE. The access (read, write, readwrite) can be identical in PreOp,
SafeOp, Op. Or they can be different in some states. Example: A configuration value may be readable
and writeable in PreOp, but must not be changed any more in Op.
the allowed values are listed in Table 23: Entry access rights.
Table 23: Entry access rights
Syntax Description
RO Read-only in all states
WO Write-only in all states
RW Readable and writable in all states
rd_preop Readonly in Preop
rd_preop_safeop Read-only in PreOP and SafeOP
rd _safeop Read-only in SafeOP
rd_ safeop_op Read-only in SafeOP and OP
rd _op Read-only in OP
wr_preop Write only in PreOP
wr _preop_safeop Write only in PreOP and SafeOP
wr _safeop Write only in SafeOP
wr _Safeop_op Write only in SafeOP and OP
wr _op Write only in OP
13.4.9 CoeRead/CoeWrite
In case that CoE read and write requests shall be handled by the application a function name can be
added to these columns (Figure 74: CoeRead/CoeWrite example). The parser will create the
corresponding declaration (in the xxxObjects.h) and (in case that the application c file does not exist)
the dummy function body in the application c file (Figure 75).
13.5 ENUM
Enums shall be defined in the index range 0x800 to 0xFFF (see also ETG.1000-6).
The used name and data type shall be “DTXXXXENYY”. XXXX is the index of the enumeration and
YY the used bit size.
Example
Table 24 shows an Enum definition example.
Table 24: Enum definition
//Index ObjectCode SI DataType M/O/C Access Default Name
0x0800 DT0800EN03
1 1 Signed
2 2 Unsigned
Table 25 shows an example for an entry using the above defined Enum.
Table 25: Enum usage
//Index ObjectCode SI DataType M/O/C Acces Default Name
s
0x8nn0 RECORD
0x01 Pad_16
0x11 DT0800EN03 M RO 2 Presentation
The EEPROM emulation can be either implemented by application callback functions or by a static
EEPROM data array.
Callback functions : Read/Write and reload function are described in chapter 6.2.1.
Static EEPROM data : The EEPROM content is stored in an static array, and accessed by the global
pointer “pEEPROM” (defined in ecatappl.h.) and need to be initialized during startup. On an EEPROM
reload command the function “HW_EepromReload” is called which shall update the Station Alias and
Enhanced link detection in the EEPROM array (see SII Specification for the corresponding offsets).
In case that register 0x502 bit6 is set to 1 (8 Byte EEPROM access) the full EEPROM emulation is
enabled and the reload commands are not required (reload commands are handled similar to
EEPROM read).
Generating EEPROM content is required if the slave application has changed after the slave file
generation with the SSC Tool or if the basic SSC is used for the slave development. Therefore an
additional “EEPROM Programming” tool is provided (see chapter 14.2).
The firmware update itself (e.g. writing the flash and reset the Controller) can either be done during
the FoE file download or on the transition from BOOT to INIT. Which mechanism is implement is up to
the slave vendor.
For further information about the recommend slave behavior during a state transition see the
ETG.5003.2.
Figure 84 shows the process data watchdog configuration in the ESC. In case that the local timer is
used for the watchdog only the watchdog time will we read out from the ESC.
The SSC returns a watchdog error (AL Status Code 0x1B “Sync Manager Watchdog”):
1. During the SAFEOP → OP transition:
If the State Machine timeout for the SO transition is reached and no process data was
received.
• Returned in AL_ControlRes()
2. When the Slave is in OP:
If the watchdog mechanism in use expires ().
• Returned by ECAT_CheckIfEcatError() if
ESC_SM_WATCHDOG_SUPPORTED = 1
• Returned by ECAT_CheckWatchdog() if
ESC_SM_WATCHDOG_SUPPORTED = 0
The following variables are relevant:
• EcatWdValue : watchdog time value set by the Master in Register 0x420, is read by the
StartInputHandler() function during the PREOP → SAFEOP transition.
• WdStatusOK (ESC_SM_WATCHDOG_SUPPORTED = 1): value of Register 0x440.
• EcatWdCounter (ESC_SM_WATCHDOG_SUPPORTED = 0): incremented by
ECAT_CheckWatchdog(), and reset to zero when new Process Data are received.
MBX_StartMailboxHandler()
MBX_StopMailboxHandler()
StartInputHandler()
StopInputHandler()
StartOutputHandler()
StopOutputHandler()
MBX_StartMailboxHandler()
Check mailbox SyncManager (SM0 and SM1) settings
Activate mailbox SyncManager HW_EnableSyncManChannel()
Set global variable: bMbxRunning
Call Application Interface function: APPL_StartMailboxHandler()
MBX_StopMailboxHandler()
Deactivate mailbox SyncManager HW_DisableSyncManChannel()
Free mailbox Queue buffer
Clear global variable: bMbxRunning
Call Application Interface function: APPL_StopMailboxHandler()
StartInputHandler()
Check process data SyncManger settings (SM2 and SM3)
Usually a SyncManager which is enabled by the Master is also activated by the Slave, and vice-versa
a SyncManager which is disabled by the Master is also deactivated by the Slave.
Disabling a SyncManager on Slave side without a corresponding deactivation by the Master happens
only as error reaction mechanism, when the Slave spontaneously performs a backward transition due
to internal reasons
SyncManagers are checked by 2 functions, both called by AL_ControlInd() during a state transition:
CheckSmSettings() checks the basic SyncManager settings like Address, Length, Flags (all SMs) In
case of error, it returns the AL Status Codes:
0x17 “Invalid sync manager configuration” (Start Address and Length not compatible with µC
architecture)
0x16 “Invalid mailbox configuration” or 0x15 “Invalid mailbox configuration (bootstrap)” (Mailbox SM
settings)
0x1D “Invalid Output Configuration” or 0x1E “Invalid Input Configuration” (Process Data SM settings).
This function checks also if the maximum physical size of the ESC DPRAM is exceeded. In case of
error AL Status Code
0x14 “No valid firmware” is returned.
StartInputHandler() checks if the SyncManagers overlap (only Process Data SMs). In case of error, it
returns AL Status Codes:
0x1D “Invalid Output Configuration” or
0x1E “Invalid Input Configuration”.
Check is performed by comparing settings sent by the Master via Init Commands with the software
constants in the stack (Figure 89).
main()
APPL_StartMailboxHandler()
APPL_StartInputHandler()
Four application functions are involved in the Legacy Mode handling: “main()”,
“APPL_StartMailboxHandler()”,“APPL_StopMailboxHandler()” and “APPL_StartInputHandler()”. These
functions are all defined in the application files (e.g. “sampleappl.c” if “SAMPLE_APPLICATION” is
if(DipswitchIdValue != 0)
{
/*Write the ID value to register 0x12 (Configured Station
Alias)*/
HW_EscWriteWord(DipswitchIdValue,0x12);
}
bRunApplication = TRUE;
do
{
MainLoop();
…
APPL_StartMailboxHandler:
UINT16 APPL_StartMailboxHandler(void)
{
UINT16 SiiIDValue = 0;
ESC_EepromAccess(0x4,1,&SiiIDValue,ESC_RD);
idError = TRUE;
}
else
{
idError = FALSE;
}
return ALSTATUSCODE_NOERROR;
}
APPL_StopMailboxHandler:
UINT16 APPL_StopMailboxHandler(void)
{
idError = FALSE; /*clear the error indication on PreOP-Init
transition*/
return ALSTATUSCODE_NOERROR;
}
APPL_StartInputHandler:
UINT16 APPL_StartInputHandler(UINT16 *pIntMask)
{
if(idError == TRUE)
{
return 0x61; /*AL Status Error Code ID values not match*/
}
return ALSTATUSCODE_NOERROR;
}
Beckhoff Headquarters
Beckhoff Automation GmbH & Co. KG
Hülshorstweg 20
33415 Verl
Germany
phone: + 49 (0) 5246/963-0
fax: + 49 (0) 5246/963-198
e-mail: info@beckhoff.com
web: www.beckhoff.com
Beckhoff Support
Support offers you comprehensive technical assistance, helping you not only with the application of
individual Beckhoff products, but also with other, wide-ranging services:
world-wide support
design, programming and commissioning of complex automation systems
and extensive training program for Beckhoff system components
hotline: + 49 (0) 5246/963-157
fax: + 49 (0) 5246/963-9157
e-mail: support@beckhoff.com
Beckhoff Service
The Beckhoff Service Center supports you in all matters of after-sales service:
on-site service
repair service
spare parts service
hotline service
hotline: + 49 (0) 5246/963-460
fax: + 49 (0) 5246/963-479
e-mail: service@beckhoff.com