ethercatmain.c File Reference
Main EtherCAT functions.
More...
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <unistd.h>
#include "ethercattype.h"
#include "nicdrv.h"
#include "ethercatbase.h"
#include "ethercatmain.h"
Data Structures |
struct | ec_idxstackT |
struct | ec_eepromt |
struct | ec_eringt |
struct | ec_emcyt |
Defines |
#define | EC_LOCALDELAY 200 |
Functions |
void | ec_pusherror (const ec_errort *Ec) |
boolean | ec_poperror (ec_errort *Ec) |
boolean | ec_iserror (void) |
static void | ec_mbxemergencyerror (uint16 Slave, uint16 ErrorCode, uint16 ErrorReg, uint8 b1, uint16 w1, uint16 w2) |
int | ec_init (const char *ifname) |
int | ec_init_redundant (const char *ifname, const char *if2name) |
void | ec_close (void) |
uint8 | ec_siigetbyte (uint16 slave, uint16 address) |
int16 | ec_siifind (uint16 slave, uint16 cat) |
void | ec_siistring (char *str, uint16 slave, uint16 Sn) |
uint16 | ec_siiFMMU (uint16 slave, ec_eepromFMMUt *FMMU) |
uint16 | ec_siiSM (uint16 slave, ec_eepromSMt *SM) |
uint16 | ec_siiSMnext (uint16 slave, ec_eepromSMt *SM, uint16 n) |
uint16 | ec_siiPDO (uint16 slave, ec_eepromPDOt *PDO, uint8 t) |
int | ec_readstate (void) |
int | ec_writestate (uint16 slave) |
uint16 | ec_statecheck (uint16 slave, uint16 reqstate, int timeout) |
uint8 | ec_nextmbxcnt (uint8 cnt) |
void | ec_clearmbx (ec_mbxbuft *Mbx) |
int | ec_mbxsend (uint16 slave, ec_mbxbuft *mbx, int timeout) |
int | ec_mbxreceive (uint16 slave, ec_mbxbuft *mbx, int timeout) |
void | ec_esidump (uint16 slave, uint8 *esibuf) |
uint32 | ec_readeeprom (uint16 slave, uint16 eeproma, int timeout) |
int | ec_writeeeprom (uint16 slave, uint16 eeproma, uint16 data, int timeout) |
int | ec_eeprom2master (uint16 slave) |
int | ec_eeprom2pdi (uint16 slave) |
uint64 | ec_readeepromFP (uint16 configadr, uint16 eeproma, int timeout) |
int | ec_writeeepromFP (uint16 configadr, uint16 eeproma, uint16 data, int timeout) |
void | ec_readeeprom1 (uint16 slave, uint16 eeproma) |
uint32 | ec_readeeprom2 (uint16 slave, int timeout) |
static void | ec_pushindex (uint8 idx, void *data, uint16 length) |
static int | ec_pullindex (void) |
int | ec_send_processdata (void) |
int | ec_receive_processdata (int timeout) |
Variables |
ec_slavet | ec_slave [EC_MAXSLAVE] |
int | ec_slavecount |
static uint8 | esibuf [EC_MAXEEPBUF] |
static uint32 | esimap [EC_MAXEEPBITMAP] |
static uint16 | esislave = 0 |
static ec_eringt | ec_elist |
static ec_idxstackT | ec_idxstack |
boolean | EcatError = FALSE |
uint16 | ec_DCtO |
static uint16 | ec_DCl |
int64 | ec_DCtime |
Detailed Description
Main EtherCAT functions.
Initialisation, state set and read, mailbox primitives, EEPROM primitives, SII reading and processdata exchange.
Defines ec_slave[]. All slave information is put in this structure. Needed for most user interaction with slaves.
Define Documentation
#define EC_LOCALDELAY 200 |
delay in us for eeprom ready loop
Function Documentation
Clear mailbox buffer.
- Parameters:
-
[out] | Mbx | = Mailbox buffer to clear |
int ec_eeprom2master |
( |
uint16 |
slave |
) |
|
Set eeprom control to master. Only if set to PDI.
- Parameters:
-
[in] | slave | = Slave number |
- Returns:
- >0 if OK
int ec_eeprom2pdi |
( |
uint16 |
slave |
) |
|
Set eeprom control to PDI. Only if set to master.
- Parameters:
-
[in] | slave | = Slave number |
- Returns:
- >0 if OK
Dump complete EEPROM data from slave in buffer.
- Parameters:
-
[in] | slave | = Slave number |
[out] | esibuf | = EEPROM data buffer, make sure it is big enough. |
int ec_init |
( |
const char * |
ifname |
) |
|
Initialise lib in single NIC mode
- Parameters:
-
[in] | ifname | = Dev name, f.e. "eth0" |
- Returns:
- >0 if OK
int ec_init_redundant |
( |
const char * |
ifname, |
|
|
const char * |
if2name | |
|
) |
| | |
Initialise lib in redundant NIC mode
- Parameters:
-
[in] | ifname | = Primary Dev name, f.e. "eth0" |
[in] | if2name | = Secondary Dev name, f.e. "eth1" |
- Returns:
- >0 if OK
Check if error list has entries.
- Returns:
- TRUE if error list contains entries.
Report Mailbox Emergency Error
- Parameters:
-
[in] | Slave | = Slave number |
[in] | ErrorCode | = Following EtherCAT specification |
[in] | ErrorReg | |
[in] | b1 | |
[in] | w1 | |
[in] | w2 | |
Read OUT mailbox from slave. Supports Mailbox Link Layer with repeat requests.
- Parameters:
-
[in] | slave | = Slave number |
[out] | mbx | = Mailbox data |
[in] | timeout | = Timeout in us |
- Returns:
- Work counter (>0 is success)
Write IN mailbox to slave.
- Parameters:
-
[in] | slave | = Slave number |
[out] | mbx | = Mailbox data |
[in] | timeout | = Timeout in us |
- Returns:
- Work counter (>0 is success)
Get index of next mailbox counter value. Used for Mailbox Link Layer.
- Parameters:
-
[in] | cnt | = Mailbox counter value [0..7] |
- Returns:
- next mailbox counter value
Pops an error from the list.
- Parameters:
-
[out] | Ec | = Struct describing the error. |
- Returns:
- TRUE if an error was popped.
static int ec_pullindex |
( |
void |
|
) |
[static] |
Pull index of segmented LRD/LWR/LRW combination.
- Returns:
- Stack location, -1 if stack is empty.
Pushes an error on the error list.
- Parameters:
-
[in] | Ec | Struct describing the error. |
static void ec_pushindex |
( |
uint8 |
idx, |
|
|
void * |
data, |
|
|
uint16 |
length | |
|
) |
| | [static] |
Push index of segmented LRD/LWR/LRW combination.
- Parameters:
-
[in] | idx | = Used datagram index. |
[in] | data | = Pointer to process data segment. |
[in] | length | = Length of data segment in bytes. |
Read EEPROM from slave bypassing cache.
- Parameters:
-
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | timeout | = Timeout in us. |
- Returns:
- EEPROM data 32bit
Read EEPROM from slave bypassing cache. Parallel read step 1, make request to slave.
- Parameters:
-
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
Read EEPROM from slave bypassing cache. Parallel read step 2, actual read from slave.
- Parameters:
-
[in] | slave | = Slave number |
[in] | timeout | = Timeout in us. |
- Returns:
- EEPROM data 32bit
Read EEPROM from slave bypassing cache. FPRD method.
- Parameters:
-
[in] | configadr | = configured address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | timeout | = Timeout in us. |
- Returns:
- EEPROM data 64bit or 32bit
int ec_readstate |
( |
void |
|
) |
|
Read all slave states in ec_slave.
- Returns:
- lowest state found
int ec_receive_processdata |
( |
int |
timeout |
) |
|
Receive processdata from slaves. Second part from ec_send_processdata(). Received datagrams are recombined with the processdata with help from the stack. If a datagram contains input processdata it copies it to the processdata structure.
- Parameters:
-
[in] | timeout | = Timeout in us. |
- Returns:
- Work counter.
int ec_send_processdata |
( |
void |
|
) |
|
Transmit processdata to slaves. Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW). Both the input and output processdata are transmitted. The outputs with the actual data, the inputs have a placeholder. The inputs are gathered with the receive processdata function. In contrast to the base LRW function this function is non-blocking. If the processdata does not fit in one datagram, multiple are used. In order to recombine the slave response, a stack is used.
- Returns:
- >0 if processdata is transmitted.
Find SII section header in slave EEPROM.
- Parameters:
-
[in] | slave | = slave number |
[in] | cat | = section category |
- Returns:
- byte address of section at section length entry, if not available then 0
Get FMMU data from SII FMMU section in slave EEPROM.
- Parameters:
-
[in] | slave | = slave number |
[out] | FMMU | = FMMU struct from SII, max. 4 FMMU's |
- Returns:
- number of FMMU's defined in section
Read one byte from slave EEPROM via cache. If the cache location is empty then a read request is made to the slave. Depending on the slave capabillities the request is 4 or 8 bytes.
- Parameters:
-
[in] | slave | = slave number |
[in] | address | = eeprom address in bytes (slave uses words) |
- Returns:
- requested byte, if not available then 0xff
Get PDO data from SII PDO section in slave EEPROM.
- Parameters:
-
[in] | slave | = slave number |
[out] | PDO | = PDO struct from SII |
[in] | t | = 0=RXPDO 1=TXPDO |
- Returns:
- mapping size in bits of PDO
Get SM data from SII SM section in slave EEPROM.
- Parameters:
-
[in] | slave | = slave number |
[out] | SM | = first SM struct from SII |
- Returns:
- number of SM's defined in section
Get next SM data from SII SM section in slave EEPROM.
- Parameters:
-
[in] | slave | = slave number |
[out] | SM | = first SM struct from SII |
[in] | n | = SM number |
- Returns:
- >0 if OK
Get string from SII string section in slave EEPROM.
- Parameters:
-
[out] | str | = requested string, 0x00 if not found |
[in] | slave | = slave number |
[in] | Sn | = string number |
Check actual slave state. This is a blocking function.
- Parameters:
-
[in] | slave | = Slave number, 0 = all slaves |
[in] | reqstate | = Requested state |
[in] | timeout | = Timout value in us |
- Returns:
- Requested state, or found state after timeout.
Write EEPROM to slave bypassing cache.
- Parameters:
-
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | data | = 16bit data |
[in] | timeout | = Timeout in us. |
- Returns:
- >0 if OK
Write EEPROM to slave bypassing cache. FPWR method.
- Parameters:
-
[in] | configadr | = configured address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | data | = 16bit data |
[in] | timeout | = Timeout in us. |
- Returns:
- >0 if OK
int ec_writestate |
( |
uint16 |
slave |
) |
|
Write slave state, if slave = 0 then write to all slaves. The function does not check if the actual state is changed.
- Parameters:
-
[in] | slave | = Slave number, 0 = master |
- Returns:
- 0
Variable Documentation
Main slave data array. Each slave found on the network gets its own record. ec_slave[0] is reserved for the master. Structure gets filled in by the configuration function ec_config().
number of slaves found on the network
Global variable TRUE if error available in error stack
cache for EEPROM read functions
bitmap for filled cache buffer bytes
current slave for EEPROM cache buffer