EtherCAT slave that reads 3 Xsens IMU's connected to a Xbus Master
Dependencies: MODSERIAL mbed KL25Z_ClockControl
Fork of EtherCAT by
Diff: EtherCAT/objectlist.h
- Revision:
- 15:b8d72679e644
- Parent:
- 12:cac4e7c2bd0f
- Child:
- 16:bfc7ea6bd1af
--- a/EtherCAT/objectlist.h Tue Mar 03 12:17:15 2015 +0000 +++ b/EtherCAT/objectlist.h Tue Mar 03 14:51:37 2015 +0000 @@ -119,8 +119,9 @@ /*End of subindexes for Identity Object*/ _ac acNameMO[]="Mapped object"; _ac acName1600[]="Receive PDO mapping"; -_ac acName1A00[]="Transmit PDO mapping - CoP"; -_ac acName1A10[]="Transmit PDO mapping - Raw"; +_ac acName1A00[]="Transmit PDO mapping - First IMU"; +_ac acName1A01[]="Transmit PDO mapping - Second IMU"; +_ac acName1A02[]="Transmit PDO mapping - Third IMU"; _ac acName1C00[]="Sync Manager Communication type"; /*Subindexes for Sync Manager Communication type*/ _ac acName1C00_01[]="Communications type SM0"; @@ -133,19 +134,21 @@ _ac acName1C12[]="Sync Manager 2 PDO Assignment"; _ac acName1C13[]="Sync Manager 3 PDO Assignment"; _ac acNameNOE[]="Number of entries"; -_ac acName6000[]="Centre of Pressure"; +_ac acName6000[]="First IMU"; /*Subindexes for Digital Inputs*/ -_ac acName6000_01[]="Centre of Pressure X"; -_ac acName6000_02[]="Centre of Pressure Y"; -_ac acName6000_03[]="Ground Reaction Force"; +_ac acName6000_01[]="Accelerometer X"; +_ac acName6000_02[]="Accelerometer Y"; +_ac acName6000_03[]="Accelerometer Z"; +_ac acName6000_01[]="Gyroscope X"; +_ac acName6000_02[]="Gyroscope Y"; +_ac acName6000_03[]="Gyroscope Z"; +_ac acName6000_01[]="Magnetometer X"; +_ac acName6000_02[]="Magnetometer Y"; +_ac acName6000_03[]="Magnetometer Z"; +_ac acName6000_01[]="Temperature"; /*End of subindexes for Digital Inputs*/ -_ac acName6001[]="Raw Sensor Inputs"; -/*Subindexes for Analog inputs*/ -_ac acName6001_01[]="Raw FrontLeft"; -_ac acName6001_02[]="Raw FrontRight"; -_ac acName6001_03[]="Raw BackLeft"; -_ac acName6001_04[]="Raw BackRight"; -_ac acName6001_05[]="Timestamp"; +_ac acName6001[]="Second IMU"; +_ac acName6002[]="Third IMU"; /*End of subindexes for Analog inputs*/ _ac acName7000[]="Outputs"; /*Subindexes of Outputs*/ @@ -191,19 +194,47 @@ {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x70000108} //First Object, pointing to object 7001:01 }; const _objd SDO1A00[]= //TxPDO mapping (objects from slave to master) -{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x03}, //Number of TxPDOs - {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000120}, //First Object, pointing to object 6000:01 - {0x02,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000220}, //Second Object, pointing to object 6000:02 //.. - {0x03,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000320}, +{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of TxPDOs + {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000110}, //First Object, pointing to object 6000:01 + {0x02,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000210}, //Second Object, pointing to object 6000:02 //.. + {0x03,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000310}, + {0x04,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000410}, + {0x05,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000510}, + {0x06,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000610}, + {0x07,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000710}, + {0x08,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000810}, + {0x09,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000910}, + {0x0A,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60000A10} }; -const _objd SDO1A10[]= //Second TxPDO module -{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x05}, - {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010120}, - {0x02,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010220}, - {0x03,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010320}, - {0x04,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010420}, - {0x05,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010520} + +const _objd SDO1A01[]= //TxPDO mapping (objects from slave to master) +{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of TxPDOs + {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010110}, //First Object, pointing to object 6001:01 + {0x02,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010210}, //Second Object, pointing to object 6001:02 //.. + {0x03,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010310}, + {0x04,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010410}, + {0x05,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010510}, + {0x06,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010610}, + {0x07,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010710}, + {0x08,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010810}, + {0x09,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010910}, + {0x0A,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60010A10} }; + +const _objd SDO1A02[]= //TxPDO mapping (objects from slave to master) +{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of TxPDOs + {0x01,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020110}, //First Object, pointing to object 6002:01 + {0x02,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020210}, //Second Object, pointing to object 6002:02 //.. + {0x03,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020310}, + {0x04,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020410}, + {0x05,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020510}, + {0x06,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020610}, + {0x07,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020710}, + {0x08,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020810}, + {0x09,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020910}, + {0x0A,DTYPE_UNSIGNED32,32,ATYPE_R,&acNameMO[0],0x60020A10} +}; + const _objd SDO1C00[]= //Sync Manager {{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x04}, //Number of used Sync Manager channels {0x01,DTYPE_UNSIGNED8,8,ATYPE_R,&acName1C00_01[0],0x01}, //Sync Manager 0: Mailbox Receive (master->slave) @@ -220,16 +251,54 @@ {0x01,DTYPE_UNSIGNED16,16,ATYPE_R,&acNameMO[0],0x1600} //Send objects in index 0x1600 }; const _objd SDO1C13[]= //TxPDO Assign objects ; CHANGEABLE, thus 'RWpre' mode -{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x02}, //Number of Entries +{{0x00,DTYPE_UNSIGNED8,8,ATYPE_R,&acNameNOE[0],0x03}, //Number of Entries {0x01,DTYPE_UNSIGNED16,16,ATYPE_R,&acNameMO[0],0x1A00}, //Send objects in index 0x1A00 - {0x02,DTYPE_UNSIGNED16,16,ATYPE_R,&acNameMO[0],0x1A10} //Send objects in index 0x1A10 + {0x02,DTYPE_UNSIGNED16,16,ATYPE_R,&acNameMO[0],0x1A01}, //Send objects in index 0x1A10 + {0x03,DTYPE_UNSIGNED16,16,ATYPE_R,&acNameMO[0],0x1A02}, }; + const _objd SDO6000[]= //TxPDO module -{{0x00,DTYPE_UNSIGNED8 ,8,ATYPE_R,&acNameNOE[0],0x03}, //Number of elements - {0x01,DTYPE_REAL32 ,32,ATYPE_R,&acName6000_01[0],0,&(Rb.CoPx)}, //6000:01 is status - {0x02,DTYPE_REAL32 ,32,ATYPE_R,&acName6000_02[0],0,&(Rb.CoPy)}, //6000:02 is counter - {0x03,DTYPE_REAL32 ,32,ATYPE_R,&acName6000_03[0],0,&(Rb.grf)} +{{0x00,DTYPE_UNSIGNED8 ,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of elements + {0x01,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_01[0],0,&(Rb.first.acc[0])},//6000:01 is acc X + {0x02,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_02[0],0,&(Rb.first.acc[1])},//6000:02 is acc Y + {0x03,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_03[0],0,&(Rb.first.acc[2])},//6000:03 is acc Z + {0x04,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_04[0],0,&(Rb.first.gyr[0])},//6000:04 is gyr X + {0x05,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_05[0],0,&(Rb.first.gyr[1])},//6000:05 is gyr Y + {0x06,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_06[0],0,&(Rb.first.gyr[2])},//6000:06 is gyr Z + {0x07,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_07[0],0,&(Rb.first.mag[0])},//6000:07 is mag X + {0x08,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_08[0],0,&(Rb.first.mag[1])},//6000:08 is mag Y + {0x09,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_09[0],0,&(Rb.first.mag[2])},//6000:09 is mag Z + {0x0A,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_0A[0],0,&(Rb.first.temp)} //6000:0A is imu temperature }; + +const _objd SDO6001[]= //TxPDO module +{{0x00,DTYPE_UNSIGNED8 ,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of elements + {0x01,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_01[0],0,&(Rb.second.acc[0])},//6001:01 is acc X + {0x02,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_02[0],0,&(Rb.second.acc[1])},//6001:02 is acc Y + {0x03,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_03[0],0,&(Rb.second.acc[2])},//6001:03 is acc Z + {0x04,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_04[0],0,&(Rb.second.gyr[0])},//6001:04 is gyr X + {0x05,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_05[0],0,&(Rb.second.gyr[1])},//6001:05 is gyr Y + {0x06,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_06[0],0,&(Rb.second.gyr[2])},//6001:06 is gyr Z + {0x07,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_07[0],0,&(Rb.second.mag[0])},//6001:07 is mag X + {0x08,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_08[0],0,&(Rb.second.mag[1])},//6001:08 is mag Y + {0x09,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_09[0],0,&(Rb.second.mag[2])},//6001:09 is mag Z + {0x0A,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_0A[0],0,&(Rb.second.temp)} //6001:0A is imu temperature +}; + +const _objd SDO6002[]= //TxPDO module +{{0x00,DTYPE_UNSIGNED8 ,8,ATYPE_R,&acNameNOE[0],0x0A}, //Number of elements + {0x01,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_01[0],0,&(Rb.third.acc[0])},//6002:01 is acc X + {0x02,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_02[0],0,&(Rb.third.acc[1])},//6002:02 is acc Y + {0x03,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_03[0],0,&(Rb.third.acc[2])},//6002:03 is acc Z + {0x04,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_04[0],0,&(Rb.third.gyr[0])},//6002:04 is gyr X + {0x05,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_05[0],0,&(Rb.third.gyr[1])},//6002:05 is gyr Y + {0x06,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_06[0],0,&(Rb.third.gyr[2])},//6002:06 is gyr Z + {0x07,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_07[0],0,&(Rb.third.mag[0])},//6002:07 is mag X + {0x08,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_08[0],0,&(Rb.third.mag[1])},//6002:08 is mag Y + {0x09,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_09[0],0,&(Rb.third.mag[2])},//6002:09 is mag Z + {0x0A,DTYPE_SIGNED16 ,16,ATYPE_R,&acName6000_0A[0],0,&(Rb.third.temp)} //6002:0A is imu temperature +}; + //TODO: Comments const _objd SDO6001[]= //TxPDO module {{0x00,DTYPE_UNSIGNED8 ,8,ATYPE_R,&acNameNOE[0],0x05}, //Number of elements @@ -256,15 +325,17 @@ {0x100A,OTYPE_VAR , 0,0,&acName100A[0],&SDO100A[0]}, //Software Version {0x1018,OTYPE_RECORD , 4,0,&acName1018[0],&SDO1018[0]}, //Identity {0x1600,OTYPE_RECORD , 0x01,0,&acName1600[0],&SDO1600[0]}, //RxPDO mapping - {0x1A00,OTYPE_RECORD , 0x03,0,&acName1A00[0],&SDO1A00[0]}, //TxPDO mapping - {0x1A10,OTYPE_RECORD , 0x05,0,&acName1A10[0],&SDO1A10[0]}, //TxPDO mapping + {0x1A00,OTYPE_RECORD , 10,0,&acName1A00[0],&SDO1A00[0]}, //TxPDO mapping + {0x1A01,OTYPE_RECORD , 10,0,&acName1A01[0],&SDO1A01[0]}, //TxPDO mapping + {0x1A02,OTYPE_RECORD , 10,0,&acName1A02[0],&SDO1A02[0]}, //TxPDO mapping {0x1C00,OTYPE_ARRAY , 4,0,&acName1C00[0],&SDO1C00[0]}, //Sync Manager configuration {0x1C10,OTYPE_ARRAY , 0,0,&acName1C10[0],&SDO1C10[0]}, //Sync Manager 0 PDO assignment {0x1C11,OTYPE_ARRAY , 0,0,&acName1C11[0],&SDO1C11[0]}, //Sync Manager 1 PDO assignment {0x1C12,OTYPE_ARRAY , 1,0,&acName1C12[0],&SDO1C12[0]}, //RxPDO objects - {0x1C13,OTYPE_ARRAY , 2,0,&acName1C13[0],&SDO1C13[0]}, //TxPDO objects - {0x6000,OTYPE_ARRAY , 0x03,0,&acName6000[0],&SDO6000[0]}, //TxPDO module - {0x6001,OTYPE_ARRAY , 0x05,0,&acName6001[0],&SDO6001[0]}, //TxPDO module + {0x1C13,OTYPE_ARRAY , 3,0,&acName1C13[0],&SDO1C13[0]}, //TxPDO objects + {0x6000,OTYPE_ARRAY , 10,0,&acName6000[0],&SDO6000[0]}, //TxPDO module + {0x6001,OTYPE_ARRAY , 10,0,&acName6001[0],&SDO6001[0]}, //TxPDO module + {0x6002,OTYPE_ARRAY , 10,0,&acName6002[0],&SDO6002[0]}, //TxPDO module {0x7000,OTYPE_ARRAY , 0x01,0,&acName7000[0],&SDO7000[0]}, //RxPDO module {0x8000,OTYPE_ARRAY , 0x01,0,&acName8000[0],&SDO8000[0]}, //RxPDO module {0xffff,0xff,0xff,0xff,nil,nil}