include/EtherCAT_rt.h
changeset 73 9f4ea66d89a3
parent 68 a452700db994
child 77 677967864795
equal deleted inserted replaced
72:7c986b717411 73:9f4ea66d89a3
    12 /*****************************************************************************/
    12 /*****************************************************************************/
    13 
    13 
    14 struct ec_master;
    14 struct ec_master;
    15 typedef struct ec_master ec_master_t;
    15 typedef struct ec_master ec_master_t;
    16 
    16 
    17 struct ec_slave_type;
    17 struct ec_domain;
    18 typedef struct ec_slave_type ec_slave_type_t;
    18 typedef struct ec_domain ec_domain_t;
    19 
    19 
    20 struct ec_slave;
    20 struct ec_slave;
    21 typedef struct ec_slave ec_slave_t;
    21 typedef struct ec_slave ec_slave_t;
    22 
    22 
    23 struct ec_slave_init;
    23 typedef enum
    24 typedef struct ec_slave_init ec_slave_init_t;
    24 {
       
    25     ec_sync,
       
    26     ec_async
       
    27 }
       
    28 ec_domain_mode_t;
       
    29 
       
    30 typedef enum
       
    31 {
       
    32     ec_status,
       
    33     ec_control,
       
    34     ec_ipvalue,
       
    35     ec_opvalue
       
    36 }
       
    37 ec_field_type_t;
       
    38 
       
    39 typedef struct
       
    40 {
       
    41     void **data;
       
    42     const char *address;
       
    43     const char *vendor;
       
    44     const char *product;
       
    45     ec_field_type_t field_type;
       
    46     unsigned int field_index;
       
    47     unsigned int field_count;
       
    48 }
       
    49 ec_field_init_t;
    25 
    50 
    26 /*****************************************************************************/
    51 /*****************************************************************************/
       
    52 // Master request functions
    27 
    53 
    28 ec_master_t *EtherCAT_rt_request_master(unsigned int master_index);
    54 ec_master_t *EtherCAT_rt_request_master(unsigned int master_index);
    29 
    55 
    30 void EtherCAT_rt_release_master(ec_master_t *master);
    56 void EtherCAT_rt_release_master(ec_master_t *master);
    31 
    57 
    32 ec_slave_t *EtherCAT_rt_register_slave(ec_master_t *master,
    58 /*****************************************************************************/
    33                                        const char *address,
    59 // Master methods
    34                                        const char *vendor_name,
       
    35                                        const char *product_name,
       
    36                                        int domain);
       
    37 
    60 
    38 int EtherCAT_rt_register_slave_list(ec_master_t *master,
    61 ec_domain_t *EtherCAT_rt_master_register_domain(ec_master_t *master,
    39                                     const ec_slave_init_t *slaves,
    62                                                 ec_domain_mode_t mode,
    40                                     unsigned int count);
    63                                                 unsigned int timeout_us);
    41 
    64 
    42 int EtherCAT_rt_activate_slaves(ec_master_t *master);
    65 int EtherCAT_rt_master_activate(ec_master_t *master);
    43 
    66 
    44 int EtherCAT_rt_deactivate_slaves(ec_master_t *master);
    67 int EtherCAT_rt_master_deactivate(ec_master_t *master);
    45 
    68 
    46 int EtherCAT_rt_domain_xio(ec_master_t *master, unsigned int domain,
    69 void EtherCAT_rt_master_debug(ec_master_t *master, int level);
    47                            unsigned int timeout_us);
    70 void EtherCAT_rt_master_print(const ec_master_t *master);
    48 
    71 
    49 void EtherCAT_rt_debug_level(ec_master_t *master, int level);
    72 /*****************************************************************************/
       
    73 // Domain Methods
    50 
    74 
    51 int EtherCAT_rt_canopen_sdo_write(ec_master_t *master, ec_slave_t *slave,
    75 ec_slave_t *EtherCAT_rt_register_slave_field(ec_domain_t *domain,
       
    76                                              const char *address,
       
    77                                              const char *vendor_name,
       
    78                                              const char *product_name,
       
    79                                              void **data_ptr,
       
    80                                              ec_field_type_t field_type,
       
    81                                              unsigned int field_index,
       
    82                                              unsigned int field_count);
       
    83 
       
    84 int EtherCAT_rt_domain_xio(ec_domain_t *domain);
       
    85 
       
    86 /*****************************************************************************/
       
    87 // Slave Methods
       
    88 
       
    89 int EtherCAT_rt_canopen_sdo_write(ec_slave_t *slave,
    52                                   unsigned int sdo_index,
    90                                   unsigned int sdo_index,
    53                                   unsigned char sdo_subindex,
    91                                   unsigned char sdo_subindex,
    54                                   unsigned int value, unsigned int size);
    92                                   unsigned int value,
    55 
    93                                   unsigned int size);
    56 /*****************************************************************************/
       
    57 
       
    58 /**
       
    59    EtherCAT-Slave
       
    60 */
       
    61 
       
    62 struct ec_slave
       
    63 {
       
    64     // Base data
       
    65     unsigned char base_type; /**< Slave-Typ */
       
    66     unsigned char base_revision; /**< Revision */
       
    67     unsigned short base_build; /**< Build-Nummer */
       
    68 
       
    69     // Addresses
       
    70     short ring_position; /**< (Negative) Position des Slaves im Bus */
       
    71     unsigned short station_address; /**< Konfigurierte Slave-Adresse */
       
    72 
       
    73     // Slave information interface
       
    74     unsigned int sii_vendor_id; /**< Identifikationsnummer des Herstellers */
       
    75     unsigned int sii_product_code; /**< Herstellerspezifischer Produktcode */
       
    76     unsigned int sii_revision_number; /**< Revisionsnummer */
       
    77     unsigned int sii_serial_number; /**< Seriennummer der Klemme */
       
    78 
       
    79     const ec_slave_type_t *type; /**< Zeiger auf die Beschreibung
       
    80                                     des Slave-Typs */
       
    81 
       
    82     unsigned int logical_address; /**< Konfigurierte, logische Adresse */
       
    83 
       
    84     void *process_data; /**< Zeiger auf den Speicherbereich
       
    85                            innerhalb eines Prozessdatenobjekts */
       
    86     void *private_data; /**< Zeiger auf privaten Datenbereich */
       
    87     int (*configure)(ec_slave_t *); /**< Zeiger auf die Funktion zur
       
    88                                      Konfiguration */
       
    89 
       
    90     unsigned char registered; /**< Der Slave wurde registriert */
       
    91 
       
    92     unsigned int domain; /**< Prozessdatendomäne */
       
    93 
       
    94     int error_reported; /**< Ein Zugriffsfehler wurde bereits gemeldet */
       
    95 };
       
    96 
       
    97 /*****************************************************************************/
       
    98 
       
    99 /**
       
   100    Beschreibung eines EtherCAT-Slave-Typs.
       
   101 
       
   102    Diese Beschreibung dient zur Konfiguration einer bestimmten
       
   103    Slave-Art. Sie enthält die Konfigurationsdaten für die
       
   104    Slave-internen Sync-Manager und FMMU's.
       
   105 */
       
   106 
       
   107 struct ec_slave_init
       
   108 {
       
   109     ec_slave_t **slave_ptr; /**< Zeiger auf den Slave-Zeiger, der später auf
       
   110                                die Slave-Struktur zeigen soll. */
       
   111     const char *address; /**< ASCII-kodierte Bus-Adresse des zu
       
   112                             registrierenden Slaves \sa ec_address */
       
   113     const char *vendor_name; /**< Name des Herstellers */
       
   114     const char *product_name; /**< Name des Slaves-Typs */
       
   115     unsigned int domain; /**< Domäne, in der registriert werden soll. */
       
   116 };
       
   117 
    94 
   118 /*****************************************************************************/
    95 /*****************************************************************************/
   119 
    96 
   120 #endif
    97 #endif