SOEM  v1.4.0
Data Structures | Macros | Functions | Variables
ethercatconfig.c File Reference

Configuration module for EtherCAT master. More...

#include <stdio.h>
#include <string.h>
#include "osal.h"
#include "oshw.h"
#include "ethercattype.h"
#include "ethercatbase.h"
#include "ethercatmain.h"
#include "ethercatcoe.h"
#include "ethercatsoe.h"
#include "ethercatconfig.h"
#include "ethercatconfiglist.h"

Data Structures

struct  ecx_mapt_t
 
struct  ec_configlist_t
 

Macros

#define EC_DEFAULTMBXSM0   0x00010026
 
#define EC_DEFAULTMBXSM1   0x00010022
 
#define EC_DEFAULTDOSM0   0x00010044
 

Functions

int ec_findconfig (uint32 man, uint32 id)
 
void ecx_init_context (ecx_contextt *context)
 
int ecx_detect_slaves (ecx_contextt *context)
 
static void ecx_set_slaves_to_default (ecx_contextt *context)
 
static int ecx_config_from_table (ecx_contextt *context, uint16 slave)
 
static int ecx_lookup_prev_sii (ecx_contextt *context, uint16 slave)
 
int ecx_config_init (ecx_contextt *context, uint8 usetable)
 
static int ecx_lookup_mapping (ecx_contextt *context, uint16 slave, int *Osize, int *Isize)
 
static int ecx_map_coe_soe (ecx_contextt *context, uint16 slave, int thread_n)
 
static int ecx_map_sii (ecx_contextt *context, uint16 slave)
 
static int ecx_map_sm (ecx_contextt *context, uint16 slave)
 
static int ecx_get_threadcount (void)
 
static void ecx_config_find_mappings (ecx_contextt *context, uint8 group)
 
static void ecx_config_create_input_mappings (ecx_contextt *context, void *pIOmap, uint8 group, int16 slave, uint32 *LogAddr, uint8 *BitPos)
 
static void ecx_config_create_output_mappings (ecx_contextt *context, void *pIOmap, uint8 group, int16 slave, uint32 *LogAddr, uint8 *BitPos)
 
int ecx_config_map_group (ecx_contextt *context, void *pIOmap, uint8 group)
 
int ecx_config_overlap_map_group (ecx_contextt *context, void *pIOmap, uint8 group)
 
int ecx_recover_slave (ecx_contextt *context, uint16 slave, int timeout)
 
int ecx_reconfig_slave (ecx_contextt *context, uint16 slave, int timeout)
 
int ec_config_init (uint8 usetable)
 
int ec_config_map_group (void *pIOmap, uint8 group)
 
int ec_config_overlap_map_group (void *pIOmap, uint8 group)
 
int ec_config_map (void *pIOmap)
 
int ec_config_overlap_map (void *pIOmap)
 
int ec_config (uint8 usetable, void *pIOmap)
 
int ec_config_overlap (uint8 usetable, void *pIOmap)
 
int ec_recover_slave (uint16 slave, int timeout)
 
int ec_reconfig_slave (uint16 slave, int timeout)
 

Variables

ecx_mapt_t ecx_mapt [EC_MAX_MAPT]
 

Detailed Description

Configuration module for EtherCAT master.

After successful initialisation with ec_init() or ec_init_redundant() the slaves can be auto configured with this module.

Macro Definition Documentation

◆ EC_DEFAULTDOSM0

#define EC_DEFAULTDOSM0   0x00010044

standard SM0 flags configuration for digital output slaves

◆ EC_DEFAULTMBXSM0

#define EC_DEFAULTMBXSM0   0x00010026

standard SM0 flags configuration for mailbox slaves

◆ EC_DEFAULTMBXSM1

#define EC_DEFAULTMBXSM1   0x00010022

standard SM1 flags configuration for mailbox slaves

Function Documentation

◆ ec_config()

int ec_config ( uint8  usetable,
void *  pIOmap 
)

Enumerate / map and init all slaves.

Parameters
[in]usetable= TRUE when using configtable to init slaves, FALSE otherwise
[out]pIOmap= pointer to IOmap
Returns
Workcounter of slave discover datagram = number of slaves found

◆ ec_config_init()

int ec_config_init ( uint8  usetable)

Enumerate and init all slaves.

Parameters
[in]usetable= TRUE when using configtable to init slaves, FALSE otherwise
Returns
Workcounter of slave discover datagram = number of slaves found
See also
ecx_config_init

◆ ec_config_map()

int ec_config_map ( void *  pIOmap)

Map all PDOs from slaves to IOmap with Outputs/Inputs in sequential order (legacy SOEM way).

Parameters
[out]pIOmap= pointer to IOmap
Returns
IOmap size

◆ ec_config_map_group()

int ec_config_map_group ( void *  pIOmap,
uint8  group 
)

Map all PDOs in one group of slaves to IOmap with Outputs/Inputs in sequential order (legacy SOEM way).

Parameters
[out]pIOmap= pointer to IOmap
[in]group= group to map, 0 = all groups
Returns
IOmap size
See also
ecx_config_map_group

◆ ec_config_overlap()

int ec_config_overlap ( uint8  usetable,
void *  pIOmap 
)

Enumerate / map and init all slaves.

Parameters
[in]usetable= TRUE when using configtable to init slaves, FALSE otherwise
[out]pIOmap= pointer to IOmap
Returns
Workcounter of slave discover datagram = number of slaves found

◆ ec_config_overlap_map()

int ec_config_overlap_map ( void *  pIOmap)

Map all PDOs from slaves to IOmap with Outputs/Inputs overlapping. NOTE: Must use this for TI ESC when using LRW.

Parameters
[out]pIOmap= pointer to IOmap
Returns
IOmap size

◆ ec_config_overlap_map_group()

int ec_config_overlap_map_group ( void *  pIOmap,
uint8  group 
)

Map all PDOs in one group of slaves to IOmap with Outputs/Inputs overlapping. NOTE: Must use this for TI ESC when using LRW.

Parameters
[out]pIOmap= pointer to IOmap
[in]group= group to map, 0 = all groups
Returns
IOmap size
See also
ecx_config_overlap_map_group

◆ ec_findconfig()

int ec_findconfig ( uint32  man,
uint32  id 
)

Find slave in standard configuration list ec_configlist[]

Parameters
[in]man= manufacturer
[in]id= ID
Returns
index in ec_configlist[] when found, otherwise 0

◆ ec_reconfig_slave()

int ec_reconfig_slave ( uint16  slave,
int  timeout 
)

Reconfigure slave.

Parameters
[in]slave= slave to reconfigure
[in]timeout= local timeout f.e. EC_TIMEOUTRET3
Returns
Slave state
See also
ecx_reconfig_slave

◆ ec_recover_slave()

int ec_recover_slave ( uint16  slave,
int  timeout 
)

Recover slave.

Parameters
[in]slave= slave to recover
[in]timeout= local timeout f.e. EC_TIMEOUTRET3
Returns
>0 if successful
See also
ecx_recover_slave

◆ ecx_config_create_input_mappings()

static void ecx_config_create_input_mappings ( ecx_contextt *  context,
void *  pIOmap,
uint8  group,
int16  slave,
uint32 *  LogAddr,
uint8 *  BitPos 
)
static

◆ ecx_config_create_output_mappings()

static void ecx_config_create_output_mappings ( ecx_contextt *  context,
void *  pIOmap,
uint8  group,
int16  slave,
uint32 *  LogAddr,
uint8 *  BitPos 
)
static

◆ ecx_config_find_mappings()

static void ecx_config_find_mappings ( ecx_contextt *  context,
uint8  group 
)
static

◆ ecx_config_from_table()

static int ecx_config_from_table ( ecx_contextt *  context,
uint16  slave 
)
static

◆ ecx_config_init()

int ecx_config_init ( ecx_contextt *  context,
uint8  usetable 
)

Enumerate and init all slaves.

Parameters
[in]context= context struct
[in]usetable= TRUE when using configtable to init slaves, FALSE otherwise
Returns
Workcounter of slave discover datagram = number of slaves found

◆ ecx_config_map_group()

int ecx_config_map_group ( ecx_contextt *  context,
void *  pIOmap,
uint8  group 
)

Map all PDOs in one group of slaves to IOmap with Outputs/Inputs in sequential order (legacy SOEM way).

Parameters
[in]context= context struct
[out]pIOmap= pointer to IOmap
[in]group= group to map, 0 = all groups
Returns
IOmap size

◆ ecx_config_overlap_map_group()

int ecx_config_overlap_map_group ( ecx_contextt *  context,
void *  pIOmap,
uint8  group 
)

Map all PDOs in one group of slaves to IOmap with Outputs/Inputs overlapping. NOTE: Must use this for TI ESC when using LRW.

Parameters
[in]context= context struct
[out]pIOmap= pointer to IOmap
[in]group= group to map, 0 = all groups
Returns
IOmap size

◆ ecx_detect_slaves()

int ecx_detect_slaves ( ecx_contextt *  context)

◆ ecx_get_threadcount()

static int ecx_get_threadcount ( void  )
static

◆ ecx_init_context()

void ecx_init_context ( ecx_contextt *  context)

◆ ecx_lookup_mapping()

static int ecx_lookup_mapping ( ecx_contextt *  context,
uint16  slave,
int *  Osize,
int *  Isize 
)
static

◆ ecx_lookup_prev_sii()

static int ecx_lookup_prev_sii ( ecx_contextt *  context,
uint16  slave 
)
static

◆ ecx_map_coe_soe()

static int ecx_map_coe_soe ( ecx_contextt *  context,
uint16  slave,
int  thread_n 
)
static

◆ ecx_map_sii()

static int ecx_map_sii ( ecx_contextt *  context,
uint16  slave 
)
static

◆ ecx_map_sm()

static int ecx_map_sm ( ecx_contextt *  context,
uint16  slave 
)
static

◆ ecx_reconfig_slave()

int ecx_reconfig_slave ( ecx_contextt *  context,
uint16  slave,
int  timeout 
)

Reconfigure slave.

Parameters
[in]context= context struct
[in]slave= slave to reconfigure
[in]timeout= local timeout f.e. EC_TIMEOUTRET3
Returns
Slave state

◆ ecx_recover_slave()

int ecx_recover_slave ( ecx_contextt *  context,
uint16  slave,
int  timeout 
)

Recover slave.

Parameters
[in]context= context struct
[in]slave= slave to recover
[in]timeout= local timeout f.e. EC_TIMEOUTRET3
Returns
>0 if successful

◆ ecx_set_slaves_to_default()

static void ecx_set_slaves_to_default ( ecx_contextt *  context)
static

Variable Documentation

◆ ecx_mapt