SOEM EtherCAT Master library for STM Nucleo F767ZI

Dependents:   EasyCAT_LAB_simple EasyCAT_LAB_very_simple EasyCAT_LAB

  • It has been developed for the EasyCAT LAB , a complete educational and experimental EtherCAT® system, composed of one master and two slaves .

Warning

/media/uploads/EasyCAT/easycat_lab.jpg

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?

UserRevisionLine numberNew 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