SOEM EtherCAT Master library for STM Nucleo F767ZI
Dependents: EasyCAT_LAB_simple EasyCAT_LAB_very_simple EasyCAT_LAB
- This repository contains the SOEM (Simple Open EtherCAT® Master) library by rt-labs, that has been ported in the ecosystem by AB&T Tecnologie Informatiche.
- It has been developed for the EasyCAT LAB , a complete educational and experimental EtherCAT® system, composed of one master and two slaves .
- The EasyCAT LAB is provided as a kit by AB&T Tecnologie Informatiche, to allow everybody to have an educational EtherCAT® system up and running in a matter of minutes.
Warning
- Currently only the Nucleo STM32F767ZI board is supported.
SOEM/ethercatsoe.h@0:543d6784d4cc, 2019-06-11 (annotated)
- Committer:
- EasyCAT
- Date:
- Tue Jun 11 10:29:09 2019 +0000
- Revision:
- 0:543d6784d4cc
SOEM EtherCAT Master Library for STM Nucleo F767ZI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
EasyCAT | 0:543d6784d4cc | 1 | /* |
EasyCAT | 0:543d6784d4cc | 2 | * Licensed under the GNU General Public License version 2 with exceptions. See |
EasyCAT | 0:543d6784d4cc | 3 | * LICENSE file in the project root for full license information |
EasyCAT | 0:543d6784d4cc | 4 | */ |
EasyCAT | 0:543d6784d4cc | 5 | |
EasyCAT | 0:543d6784d4cc | 6 | /** \file |
EasyCAT | 0:543d6784d4cc | 7 | * \brief |
EasyCAT | 0:543d6784d4cc | 8 | * Headerfile for ethercatsoe.c |
EasyCAT | 0:543d6784d4cc | 9 | */ |
EasyCAT | 0:543d6784d4cc | 10 | |
EasyCAT | 0:543d6784d4cc | 11 | #ifndef _ethercatsoe_ |
EasyCAT | 0:543d6784d4cc | 12 | #define _ethercatsoe_ |
EasyCAT | 0:543d6784d4cc | 13 | |
EasyCAT | 0:543d6784d4cc | 14 | #ifdef __cplusplus |
EasyCAT | 0:543d6784d4cc | 15 | extern "C" |
EasyCAT | 0:543d6784d4cc | 16 | { |
EasyCAT | 0:543d6784d4cc | 17 | #endif |
EasyCAT | 0:543d6784d4cc | 18 | |
EasyCAT | 0:543d6784d4cc | 19 | #define EC_SOE_DATASTATE_B 0x01 |
EasyCAT | 0:543d6784d4cc | 20 | #define EC_SOE_NAME_B 0x02 |
EasyCAT | 0:543d6784d4cc | 21 | #define EC_SOE_ATTRIBUTE_B 0x04 |
EasyCAT | 0:543d6784d4cc | 22 | #define EC_SOE_UNIT_B 0x08 |
EasyCAT | 0:543d6784d4cc | 23 | #define EC_SOE_MIN_B 0x10 |
EasyCAT | 0:543d6784d4cc | 24 | #define EC_SOE_MAX_B 0x20 |
EasyCAT | 0:543d6784d4cc | 25 | #define EC_SOE_VALUE_B 0x40 |
EasyCAT | 0:543d6784d4cc | 26 | #define EC_SOE_DEFAULT_B 0x80 |
EasyCAT | 0:543d6784d4cc | 27 | |
EasyCAT | 0:543d6784d4cc | 28 | #define EC_SOE_MAXNAME 60 |
EasyCAT | 0:543d6784d4cc | 29 | #define EC_SOE_MAXMAPPING 64 |
EasyCAT | 0:543d6784d4cc | 30 | |
EasyCAT | 0:543d6784d4cc | 31 | #define EC_IDN_MDTCONFIG 24 |
EasyCAT | 0:543d6784d4cc | 32 | #define EC_IDN_ATCONFIG 16 |
EasyCAT | 0:543d6784d4cc | 33 | |
EasyCAT | 0:543d6784d4cc | 34 | /** SoE name structure */ |
EasyCAT | 0:543d6784d4cc | 35 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 36 | typedef struct PACKED |
EasyCAT | 0:543d6784d4cc | 37 | { |
EasyCAT | 0:543d6784d4cc | 38 | /** current length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 39 | uint16 currentlength; |
EasyCAT | 0:543d6784d4cc | 40 | /** maximum length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 41 | uint16 maxlength; |
EasyCAT | 0:543d6784d4cc | 42 | char name[EC_SOE_MAXNAME]; |
EasyCAT | 0:543d6784d4cc | 43 | } ec_SoEnamet; |
EasyCAT | 0:543d6784d4cc | 44 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 45 | |
EasyCAT | 0:543d6784d4cc | 46 | /** SoE list structure */ |
EasyCAT | 0:543d6784d4cc | 47 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 48 | typedef struct PACKED |
EasyCAT | 0:543d6784d4cc | 49 | { |
EasyCAT | 0:543d6784d4cc | 50 | /** current length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 51 | uint16 currentlength; |
EasyCAT | 0:543d6784d4cc | 52 | /** maximum length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 53 | uint16 maxlength; |
EasyCAT | 0:543d6784d4cc | 54 | union |
EasyCAT | 0:543d6784d4cc | 55 | { |
EasyCAT | 0:543d6784d4cc | 56 | uint8 byte[8]; |
EasyCAT | 0:543d6784d4cc | 57 | uint16 word[4]; |
EasyCAT | 0:543d6784d4cc | 58 | uint32 dword[2]; |
EasyCAT | 0:543d6784d4cc | 59 | uint64 lword[1]; |
EasyCAT | 0:543d6784d4cc | 60 | }; |
EasyCAT | 0:543d6784d4cc | 61 | } ec_SoElistt; |
EasyCAT | 0:543d6784d4cc | 62 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 63 | |
EasyCAT | 0:543d6784d4cc | 64 | /** SoE IDN mapping structure */ |
EasyCAT | 0:543d6784d4cc | 65 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 66 | typedef struct PACKED |
EasyCAT | 0:543d6784d4cc | 67 | { |
EasyCAT | 0:543d6784d4cc | 68 | /** current length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 69 | uint16 currentlength; |
EasyCAT | 0:543d6784d4cc | 70 | /** maximum length in bytes of list */ |
EasyCAT | 0:543d6784d4cc | 71 | uint16 maxlength; |
EasyCAT | 0:543d6784d4cc | 72 | uint16 idn[EC_SOE_MAXMAPPING]; |
EasyCAT | 0:543d6784d4cc | 73 | } ec_SoEmappingt; |
EasyCAT | 0:543d6784d4cc | 74 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 75 | |
EasyCAT | 0:543d6784d4cc | 76 | #define EC_SOE_LENGTH_1 0x00 |
EasyCAT | 0:543d6784d4cc | 77 | #define EC_SOE_LENGTH_2 0x01 |
EasyCAT | 0:543d6784d4cc | 78 | #define EC_SOE_LENGTH_4 0x02 |
EasyCAT | 0:543d6784d4cc | 79 | #define EC_SOE_LENGTH_8 0x03 |
EasyCAT | 0:543d6784d4cc | 80 | #define EC_SOE_TYPE_BINARY 0x00 |
EasyCAT | 0:543d6784d4cc | 81 | #define EC_SOE_TYPE_UINT 0x01 |
EasyCAT | 0:543d6784d4cc | 82 | #define EC_SOE_TYPE_INT 0x02 |
EasyCAT | 0:543d6784d4cc | 83 | #define EC_SOE_TYPE_HEX 0x03 |
EasyCAT | 0:543d6784d4cc | 84 | #define EC_SOE_TYPE_STRING 0x04 |
EasyCAT | 0:543d6784d4cc | 85 | #define EC_SOE_TYPE_IDN 0x05 |
EasyCAT | 0:543d6784d4cc | 86 | #define EC_SOE_TYPE_FLOAT 0x06 |
EasyCAT | 0:543d6784d4cc | 87 | #define EC_SOE_TYPE_PARAMETER 0x07 |
EasyCAT | 0:543d6784d4cc | 88 | |
EasyCAT | 0:543d6784d4cc | 89 | /** SoE attribute structure */ |
EasyCAT | 0:543d6784d4cc | 90 | PACKED_BEGIN |
EasyCAT | 0:543d6784d4cc | 91 | typedef struct PACKED |
EasyCAT | 0:543d6784d4cc | 92 | { |
EasyCAT | 0:543d6784d4cc | 93 | /** evaluation factor for display purposes */ |
EasyCAT | 0:543d6784d4cc | 94 | uint32 evafactor :16; |
EasyCAT | 0:543d6784d4cc | 95 | /** length of IDN element(s) */ |
EasyCAT | 0:543d6784d4cc | 96 | uint32 length :2; |
EasyCAT | 0:543d6784d4cc | 97 | /** IDN is list */ |
EasyCAT | 0:543d6784d4cc | 98 | uint32 list :1; |
EasyCAT | 0:543d6784d4cc | 99 | /** IDN is command */ |
EasyCAT | 0:543d6784d4cc | 100 | uint32 command :1; |
EasyCAT | 0:543d6784d4cc | 101 | /** datatype */ |
EasyCAT | 0:543d6784d4cc | 102 | uint32 datatype :3; |
EasyCAT | 0:543d6784d4cc | 103 | uint32 reserved1 :1; |
EasyCAT | 0:543d6784d4cc | 104 | /** decimals to display if float datatype */ |
EasyCAT | 0:543d6784d4cc | 105 | uint32 decimals :4; |
EasyCAT | 0:543d6784d4cc | 106 | /** write protected in pre-op */ |
EasyCAT | 0:543d6784d4cc | 107 | uint32 wppreop :1; |
EasyCAT | 0:543d6784d4cc | 108 | /** write protected in safe-op */ |
EasyCAT | 0:543d6784d4cc | 109 | uint32 wpsafeop :1; |
EasyCAT | 0:543d6784d4cc | 110 | /** write protected in op */ |
EasyCAT | 0:543d6784d4cc | 111 | uint32 wpop :1; |
EasyCAT | 0:543d6784d4cc | 112 | uint32 reserved2 :1; |
EasyCAT | 0:543d6784d4cc | 113 | } ec_SoEattributet; |
EasyCAT | 0:543d6784d4cc | 114 | PACKED_END |
EasyCAT | 0:543d6784d4cc | 115 | |
EasyCAT | 0:543d6784d4cc | 116 | #ifdef EC_VER1 |
EasyCAT | 0:543d6784d4cc | 117 | int ec_SoEread(uint16 slave, uint8 driveNo, uint8 elementflags, uint16 idn, int *psize, void *p, int timeout); |
EasyCAT | 0:543d6784d4cc | 118 | int ec_SoEwrite(uint16 slave, uint8 driveNo, uint8 elementflags, uint16 idn, int psize, void *p, int timeout); |
EasyCAT | 0:543d6784d4cc | 119 | int ec_readIDNmap(uint16 slave, int *Osize, int *Isize); |
EasyCAT | 0:543d6784d4cc | 120 | #endif |
EasyCAT | 0:543d6784d4cc | 121 | |
EasyCAT | 0:543d6784d4cc | 122 | int ecx_SoEread(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 elementflags, uint16 idn, int *psize, void *p, int timeout); |
EasyCAT | 0:543d6784d4cc | 123 | int ecx_SoEwrite(ecx_contextt *context, uint16 slave, uint8 driveNo, uint8 elementflags, uint16 idn, int psize, void *p, int timeout); |
EasyCAT | 0:543d6784d4cc | 124 | int ecx_readIDNmap(ecx_contextt *context, uint16 slave, int *Osize, int *Isize); |
EasyCAT | 0:543d6784d4cc | 125 | |
EasyCAT | 0:543d6784d4cc | 126 | #ifdef __cplusplus |
EasyCAT | 0:543d6784d4cc | 127 | } |
EasyCAT | 0:543d6784d4cc | 128 | #endif |
EasyCAT | 0:543d6784d4cc | 129 | |
EasyCAT | 0:543d6784d4cc | 130 | #endif |