master/command.h
changeset 68 a452700db994
parent 54 7506e67dd122
equal deleted inserted replaced
67:56964b20c15d 68:a452700db994
    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 {
    51     }
    50     }
    52     dev;
    51     dev;
    53 
    52 
    54     unsigned short mem; /**< Physikalische Speicheradresse im Slave */
    53     unsigned short mem; /**< Physikalische Speicheradresse im Slave */
    55   }
    54   }
    56   phy;
    55   phy; /**< Physikalische Adresse */
    57 
    56 
    58   unsigned long logical; /**< Logische Adresse */
    57   unsigned long logical; /**< Logische Adresse */
    59   unsigned char raw[4]; /**< Rohdaten für die Generierung des Frames */
    58   unsigned char raw[4]; /**< Rohdaten für die Generierung des Frames */
    60 }
    59 }
    61 ec_address_t;
    60 ec_address_t;
    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 */