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 |