SOEM
v1.4.0
|
Headerfile for ethercatmain.c. More...
Data Structures | |
struct | ec_adaptert |
struct | ec_fmmut |
struct | ec_smt |
struct | ec_state_status |
struct | ec_slavet |
struct | ec_groupt |
struct | ec_eepromFMMUt |
struct | ec_eepromSMt |
struct | ec_eepromPDOt |
struct | ec_mbxheadert |
struct | ec_alstatust |
struct | ec_idxstackT |
struct | ec_eringt |
struct | ec_SMcommtypet |
struct | ec_PDOassignt |
struct | ec_PDOdesct |
struct | ecx_contextt |
Macros | |
#define | EC_MAXELIST 64 |
#define | EC_MAXNAME 40 |
#define | EC_MAXSLAVE 200 |
#define | EC_MAXGROUP 2 |
#define | EC_MAXIOSEGMENTS 64 |
#define | EC_MAXMBX 1486 |
#define | EC_MAXEEPDO 0x200 |
#define | EC_MAXSM 8 |
#define | EC_MAXFMMU 4 |
#define | EC_MAXLEN_ADAPTERNAME 128 |
#define | EC_MAX_MAPT 1 |
#define | ECT_MBXPROT_AOE 0x0001 |
#define | ECT_MBXPROT_EOE 0x0002 |
#define | ECT_MBXPROT_COE 0x0004 |
#define | ECT_MBXPROT_FOE 0x0008 |
#define | ECT_MBXPROT_SOE 0x0010 |
#define | ECT_MBXPROT_VOE 0x0020 |
#define | ECT_COEDET_SDO 0x01 |
#define | ECT_COEDET_SDOINFO 0x02 |
#define | ECT_COEDET_PDOASSIGN 0x04 |
#define | ECT_COEDET_PDOCONFIG 0x08 |
#define | ECT_COEDET_UPLOAD 0x10 |
#define | ECT_COEDET_SDOCA 0x20 |
#define | EC_SMENABLEMASK 0xfffeffff |
Typedefs | |
typedef uint8 | ec_mbxbuft[EC_MAXMBX+1] |
Functions | |
ec_adaptert * | ec_find_adapters (void) |
void | ec_free_adapters (ec_adaptert *adapter) |
uint8 | ec_nextmbxcnt (uint8 cnt) |
void | ec_clearmbx (ec_mbxbuft *Mbx) |
void | ecx_pusherror (ecx_contextt *context, const ec_errort *Ec) |
boolean | ecx_poperror (ecx_contextt *context, ec_errort *Ec) |
boolean | ecx_iserror (ecx_contextt *context) |
void | ecx_packeterror (ecx_contextt *context, uint16 Slave, uint16 Index, uint8 SubIdx, uint16 ErrorCode) |
int | ecx_init (ecx_contextt *context, const char *ifname) |
int | ecx_init_redundant (ecx_contextt *context, ecx_redportt *redport, const char *ifname, char *if2name) |
void | ecx_close (ecx_contextt *context) |
uint8 | ecx_siigetbyte (ecx_contextt *context, uint16 slave, uint16 address) |
int16 | ecx_siifind (ecx_contextt *context, uint16 slave, uint16 cat) |
void | ecx_siistring (ecx_contextt *context, char *str, uint16 slave, uint16 Sn) |
uint16 | ecx_siiFMMU (ecx_contextt *context, uint16 slave, ec_eepromFMMUt *FMMU) |
uint16 | ecx_siiSM (ecx_contextt *context, uint16 slave, ec_eepromSMt *SM) |
uint16 | ecx_siiSMnext (ecx_contextt *context, uint16 slave, ec_eepromSMt *SM, uint16 n) |
int | ecx_siiPDO (ecx_contextt *context, uint16 slave, ec_eepromPDOt *PDO, uint8 t) |
int | ecx_readstate (ecx_contextt *context) |
int | ecx_writestate (ecx_contextt *context, uint16 slave) |
uint16 | ecx_statecheck (ecx_contextt *context, uint16 slave, uint16 reqstate, int timeout) |
int | ecx_mbxempty (ecx_contextt *context, uint16 slave, int timeout) |
int | ecx_mbxsend (ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx, int timeout) |
int | ecx_mbxreceive (ecx_contextt *context, uint16 slave, ec_mbxbuft *mbx, int timeout) |
void | ecx_esidump (ecx_contextt *context, uint16 slave, uint8 *esibuf) |
uint32 | ecx_readeeprom (ecx_contextt *context, uint16 slave, uint16 eeproma, int timeout) |
int | ecx_writeeeprom (ecx_contextt *context, uint16 slave, uint16 eeproma, uint16 data, int timeout) |
int | ecx_eeprom2master (ecx_contextt *context, uint16 slave) |
int | ecx_eeprom2pdi (ecx_contextt *context, uint16 slave) |
uint64 | ecx_readeepromAP (ecx_contextt *context, uint16 aiadr, uint16 eeproma, int timeout) |
int | ecx_writeeepromAP (ecx_contextt *context, uint16 aiadr, uint16 eeproma, uint16 data, int timeout) |
uint64 | ecx_readeepromFP (ecx_contextt *context, uint16 configadr, uint16 eeproma, int timeout) |
int | ecx_writeeepromFP (ecx_contextt *context, uint16 configadr, uint16 eeproma, uint16 data, int timeout) |
void | ecx_readeeprom1 (ecx_contextt *context, uint16 slave, uint16 eeproma) |
uint32 | ecx_readeeprom2 (ecx_contextt *context, uint16 slave, int timeout) |
int | ecx_send_overlap_processdata_group (ecx_contextt *context, uint8 group) |
int | ecx_receive_processdata_group (ecx_contextt *context, uint8 group, int timeout) |
int | ecx_send_processdata (ecx_contextt *context) |
int | ecx_send_overlap_processdata (ecx_contextt *context) |
int | ecx_receive_processdata (ecx_contextt *context, int timeout) |
int | ecx_send_processdata_group (ecx_contextt *context, uint8 group) |
Headerfile for ethercatmain.c.
#define EC_MAX_MAPT 1 |
define maximum number of concurrent threads in mapping
#define EC_MAXEEPDO 0x200 |
max. eeprom PDO entries
#define EC_MAXELIST 64 |
max. entries in EtherCAT error list
#define EC_MAXFMMU 4 |
max. FMMU used
#define EC_MAXGROUP 2 |
max. number of groups
#define EC_MAXIOSEGMENTS 64 |
max. number of IO segments per group
#define EC_MAXLEN_ADAPTERNAME 128 |
max. Adapter
#define EC_MAXMBX 1486 |
max. mailbox size
#define EC_MAXNAME 40 |
max. length of readable name in slavelist and Object Description List
#define EC_MAXSLAVE 200 |
max. number of slaves in array
#define EC_MAXSM 8 |
max. SM used
#define EC_SMENABLEMASK 0xfffeffff |
#define ECT_COEDET_PDOASSIGN 0x04 |
#define ECT_COEDET_PDOCONFIG 0x08 |
#define ECT_COEDET_SDO 0x01 |
#define ECT_COEDET_SDOCA 0x20 |
#define ECT_COEDET_SDOINFO 0x02 |
#define ECT_COEDET_UPLOAD 0x10 |
#define ECT_MBXPROT_AOE 0x0001 |
#define ECT_MBXPROT_COE 0x0004 |
#define ECT_MBXPROT_EOE 0x0002 |
#define ECT_MBXPROT_FOE 0x0008 |
#define ECT_MBXPROT_SOE 0x0010 |
#define ECT_MBXPROT_VOE 0x0020 |
typedef uint8 ec_mbxbuft[EC_MAXMBX+1] |
mailbox buffer array
void ec_clearmbx | ( | ec_mbxbuft * | Mbx | ) |
Clear mailbox buffer.
[out] | Mbx | = Mailbox buffer to clear |
ec_adaptert* ec_find_adapters | ( | void | ) |
Create list over available network adapters.
void ec_free_adapters | ( | ec_adaptert * | adapter | ) |
Free dynamically allocated list over available network adapters.
[in] | adapter | = Struct holding adapter name, description and pointer to next. |
uint8 ec_nextmbxcnt | ( | uint8 | cnt | ) |
Get index of next mailbox counter value. Used for Mailbox Link Layer.
[in] | cnt | = Mailbox counter value [0..7] |
void ecx_close | ( | ecx_contextt * | context | ) |
Close lib.
[in] | context | = context struct |
int ecx_eeprom2master | ( | ecx_contextt * | context, |
uint16 | slave | ||
) |
Set eeprom control to master. Only if set to PDI.
[in] | context | = context struct |
[in] | slave | = Slave number |
int ecx_eeprom2pdi | ( | ecx_contextt * | context, |
uint16 | slave | ||
) |
Set eeprom control to PDI. Only if set to master.
[in] | context | = context struct |
[in] | slave | = Slave number |
void ecx_esidump | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint8 * | esibuf | ||
) |
Dump complete EEPROM data from slave in buffer.
[in] | context | = context struct |
[in] | slave | = Slave number |
[out] | esibuf | = EEPROM data buffer, make sure it is big enough. |
int ecx_init | ( | ecx_contextt * | context, |
const char * | ifname | ||
) |
Initialise lib in single NIC mode
[in] | context | = context struct |
[in] | ifname | = Dev name, f.e. "eth0" |
int ecx_init_redundant | ( | ecx_contextt * | context, |
ecx_redportt * | redport, | ||
const char * | ifname, | ||
char * | if2name | ||
) |
Initialise lib in redundant NIC mode
[in] | context | = context struct |
[in] | redport | = pointer to redport, redundant port data |
[in] | ifname | = Primary Dev name, f.e. "eth0" |
[in] | if2name | = Secondary Dev name, f.e. "eth1" |
boolean ecx_iserror | ( | ecx_contextt * | context | ) |
Check if error list has entries.
[in] | context | = context struct |
int ecx_mbxempty | ( | ecx_contextt * | context, |
uint16 | slave, | ||
int | timeout | ||
) |
Check if IN mailbox of slave is empty.
[in] | context | = context struct |
[in] | slave | = Slave number |
[in] | timeout | = Timeout in us |
int ecx_mbxreceive | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_mbxbuft * | mbx, | ||
int | timeout | ||
) |
Read OUT mailbox from slave. Supports Mailbox Link Layer with repeat requests.
[in] | context | = context struct |
[in] | slave | = Slave number |
[out] | mbx | = Mailbox data |
[in] | timeout | = Timeout in us |
int ecx_mbxsend | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_mbxbuft * | mbx, | ||
int | timeout | ||
) |
Write IN mailbox to slave.
[in] | context | = context struct |
[in] | slave | = Slave number |
[out] | mbx | = Mailbox data |
[in] | timeout | = Timeout in us |
void ecx_packeterror | ( | ecx_contextt * | context, |
uint16 | Slave, | ||
uint16 | Index, | ||
uint8 | SubIdx, | ||
uint16 | ErrorCode | ||
) |
Report packet error
[in] | context | = context struct |
[in] | Slave | = Slave number |
[in] | Index | = Index that generated error |
[in] | SubIdx | = Subindex that generated error |
[in] | ErrorCode | = Error code |
boolean ecx_poperror | ( | ecx_contextt * | context, |
ec_errort * | Ec | ||
) |
Pops an error from the list.
[in] | context | = context struct |
[out] | Ec | = Struct describing the error. |
void ecx_pusherror | ( | ecx_contextt * | context, |
const ec_errort * | Ec | ||
) |
Pushes an error on the error list.
[in] | context | = context struct |
[in] | Ec | pointer describing the error. |
uint32 ecx_readeeprom | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | eeproma, | ||
int | timeout | ||
) |
Read EEPROM from slave bypassing cache.
[in] | context | = context struct |
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | timeout | = Timeout in us. |
void ecx_readeeprom1 | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | eeproma | ||
) |
Read EEPROM from slave bypassing cache. Parallel read step 1, make request to slave.
[in] | context | = context struct |
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
uint32 ecx_readeeprom2 | ( | ecx_contextt * | context, |
uint16 | slave, | ||
int | timeout | ||
) |
Read EEPROM from slave bypassing cache. Parallel read step 2, actual read from slave.
[in] | context | = context struct |
[in] | slave | = Slave number |
[in] | timeout | = Timeout in us. |
uint64 ecx_readeepromAP | ( | ecx_contextt * | context, |
uint16 | aiadr, | ||
uint16 | eeproma, | ||
int | timeout | ||
) |
Read EEPROM from slave bypassing cache. APRD method.
[in] | context | = context struct |
[in] | aiadr | = auto increment address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | timeout | = Timeout in us. |
uint64 ecx_readeepromFP | ( | ecx_contextt * | context, |
uint16 | configadr, | ||
uint16 | eeproma, | ||
int | timeout | ||
) |
Read EEPROM from slave bypassing cache. FPRD method.
[in] | context | = context struct |
[in] | configadr | = configured address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | timeout | = Timeout in us. |
int ecx_readstate | ( | ecx_contextt * | context | ) |
Read all slave states in ec_slave.
[in] | context | = context struct |
int ecx_receive_processdata | ( | ecx_contextt * | context, |
int | timeout | ||
) |
int ecx_receive_processdata_group | ( | ecx_contextt * | context, |
uint8 | group, | ||
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.
[in] | context | = context struct |
[in] | group | = group number |
[in] | timeout | = Timeout in us. |
int ecx_send_overlap_processdata | ( | ecx_contextt * | context | ) |
int ecx_send_overlap_processdata_group | ( | ecx_contextt * | context, |
uint8 | group | ||
) |
Transmit processdata to slaves. Uses LRW, or LRD/LWR if LRW is not allowed (blockLRW). Both the input and output processdata are transmitted in the overlapped IOmap. The outputs with the actual data, the inputs replace the output data in the returning frame. 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.
[in] | context | = context struct |
[in] | group | = group number |
int ecx_send_processdata | ( | ecx_contextt * | context | ) |
int ecx_send_processdata_group | ( | ecx_contextt * | context, |
uint8 | group | ||
) |
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.
[in] | context | = context struct |
[in] | group | = group number |
int16 ecx_siifind | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | cat | ||
) |
Find SII section header in slave EEPROM.
[in] | context | = context struct |
[in] | slave | = slave number |
[in] | cat | = section category |
uint16 ecx_siiFMMU | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_eepromFMMUt * | FMMU | ||
) |
Get FMMU data from SII FMMU section in slave EEPROM.
[in] | context | = context struct |
[in] | slave | = slave number |
[out] | FMMU | = FMMU struct from SII, max. 4 FMMU's |
uint8 ecx_siigetbyte | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | address | ||
) |
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 capabilities the request is 4 or 8 bytes.
[in] | context | = context struct |
[in] | slave | = slave number |
[in] | address | = eeprom address in bytes (slave uses words) |
int ecx_siiPDO | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_eepromPDOt * | PDO, | ||
uint8 | t | ||
) |
Get PDO data from SII PDO section in slave EEPROM.
[in] | context | = context struct |
[in] | slave | = slave number |
[out] | PDO | = PDO struct from SII |
[in] | t | = 0=RXPDO 1=TXPDO |
uint16 ecx_siiSM | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_eepromSMt * | SM | ||
) |
Get SM data from SII SM section in slave EEPROM.
[in] | context | = context struct |
[in] | slave | = slave number |
[out] | SM | = first SM struct from SII |
uint16 ecx_siiSMnext | ( | ecx_contextt * | context, |
uint16 | slave, | ||
ec_eepromSMt * | SM, | ||
uint16 | n | ||
) |
Get next SM data from SII SM section in slave EEPROM.
[in] | context | = context struct |
[in] | slave | = slave number |
[out] | SM | = first SM struct from SII |
[in] | n | = SM number |
void ecx_siistring | ( | ecx_contextt * | context, |
char * | str, | ||
uint16 | slave, | ||
uint16 | Sn | ||
) |
Get string from SII string section in slave EEPROM.
[in] | context | = context struct |
[out] | str | = requested string, 0x00 if not found |
[in] | slave | = slave number |
[in] | Sn | = string number |
uint16 ecx_statecheck | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | reqstate, | ||
int | timeout | ||
) |
Check actual slave state. This is a blocking function. To refresh the state of all slaves ecx_readstate()should be called
[in] | context | = context struct |
[in] | slave | = Slave number, 0 = all slaves (only the "slavelist[0].state" is refreshed) |
[in] | reqstate | = Requested state |
[in] | timeout | = Timeout value in us |
int ecx_writeeeprom | ( | ecx_contextt * | context, |
uint16 | slave, | ||
uint16 | eeproma, | ||
uint16 | data, | ||
int | timeout | ||
) |
Write EEPROM to slave bypassing cache.
[in] | context | = context struct |
[in] | slave | = Slave number |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | data | = 16bit data |
[in] | timeout | = Timeout in us. |
int ecx_writeeepromAP | ( | ecx_contextt * | context, |
uint16 | aiadr, | ||
uint16 | eeproma, | ||
uint16 | data, | ||
int | timeout | ||
) |
Write EEPROM to slave bypassing cache. APWR method.
[in] | context | = context struct |
[in] | aiadr | = configured address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | data | = 16bit data |
[in] | timeout | = Timeout in us. |
int ecx_writeeepromFP | ( | ecx_contextt * | context, |
uint16 | configadr, | ||
uint16 | eeproma, | ||
uint16 | data, | ||
int | timeout | ||
) |
Write EEPROM to slave bypassing cache. FPWR method.
[in] | context | = context struct |
[in] | configadr | = configured address of slave |
[in] | eeproma | = (WORD) Address in the EEPROM |
[in] | data | = 16bit data |
[in] | timeout | = Timeout in us. |
int ecx_writestate | ( | ecx_contextt * | context, |
uint16 | slave | ||
) |
Write slave state, if slave = 0 then write to all slaves. The function does not check if the actual state is changed.
[in] | context | = context struct |
[in] | slave | = Slave number, 0 = master |