28 /*****************************************************************************/ |
28 /*****************************************************************************/ |
29 |
29 |
30 /** |
30 /** |
31 EtherCAT-Adresse. |
31 EtherCAT-Adresse. |
32 |
32 |
33 Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die |
33 Im EtherCAT-Rahmen sind 4 Bytes für die Adresse reserviert, die je nach |
34 ja nach Kommandoty eine andere bedeutung haben: Bei Autoinkrement- |
34 Kommandotyp, eine andere Bedeutung haben können: Bei Autoinkrementbefehlen |
35 befehlen sind die ersten zwei Bytes die (negative) |
35 sind die ersten zwei Bytes die (negative) Autoinkrement-Adresse, bei Knoten- |
36 Autoinkrement-Adresse, bei Knoten-adressierten Befehlen entsprechen |
36 adressierten Befehlen entsprechen sie der Knotenadresse. Das dritte und |
37 sie der Knotenadresse. Das dritte und vierte Byte entspricht in |
37 vierte Byte entspricht in diesen Fällen der physikalischen Speicheradresse |
38 diesen Fällen der physikalischen Speicheradresse auf dem Slave. |
38 auf dem Slave. Bei einer logischen Adressierung entsprechen alle vier Bytes |
39 Bei einer logischen Adressierung entsprechen alle vier Bytes |
|
40 der logischen Adresse. |
39 der logischen Adresse. |
41 */ |
40 */ |
42 |
41 |
43 typedef union |
42 typedef union |
44 { |
43 { |
66 EtherCAT-Kommando. |
65 EtherCAT-Kommando. |
67 */ |
66 */ |
68 |
67 |
69 typedef struct ec_command |
68 typedef struct ec_command |
70 { |
69 { |
71 ec_command_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc...) */ |
70 ec_command_type_t type; /**< Typ des Kommandos (APRD, NPWR, etc) */ |
72 ec_address_t address; /**< Adresse des/der Empfänger */ |
71 ec_address_t address; /**< Adresse des/der Empfänger */ |
73 unsigned int data_length; /**< Länge der zu sendenden und/oder |
72 unsigned int data_length; /**< Länge der zu sendenden und/oder |
74 empfangenen Daten */ |
73 empfangenen Daten */ |
75 ec_command_state_t state; /**< Zustand des Kommandos |
74 ec_command_state_t state; /**< Zustand des Kommandos |
76 (bereit, gesendet, etc...) */ |
75 (bereit, gesendet, etc) */ |
77 unsigned char index; /**< Kommando-Index, mit der das Kommando gesendet |
76 unsigned char index; /**< Kommando-Index, mit der das Kommando gesendet |
78 wurde (wird vom Master beim Senden gesetzt. */ |
77 wurde (wird vom Master beim Senden gesetzt. */ |
79 unsigned int working_counter; /**< Working-Counter bei Empfang (wird |
78 unsigned int working_counter; /**< Working-Counter bei Empfang (wird |
80 vom Master gesetzt) */ |
79 vom Master gesetzt) */ |
81 unsigned char data[EC_FRAME_SIZE]; /**< Kommandodaten */ |
80 unsigned char data[EC_FRAME_SIZE]; /**< Kommandodaten */ |