Merged fix for too many PDOs\? and a new example

This commit is contained in:
Hakan Bastedt
2025-08-17 20:41:59 +02:00
11 changed files with 1130 additions and 1231 deletions

View File

@@ -33,8 +33,8 @@
#define SM3_smc 0x20
#define SM3_act 1
#define MAX_MAPPINGS_SM2 19
#define MAX_MAPPINGS_SM3 9
#define MAX_MAPPINGS_SM2 14
#define MAX_MAPPINGS_SM3 7
#define MAX_RXPDO_SIZE 512
#define MAX_TXPDO_SIZE 512

View File

@@ -4,7 +4,7 @@
:20006000000000000000000000000000000000000000000000000000000000000F00010070
:200080000A001F00040B434E4320636F6E74726F6C0E4D616368696E65436F6E74726F6C8F
:2000A00006494D474342591A4D6574616C4D7573696E677320456173657243415420333021
:2000C00030301E001000020301040013000000000000000000001100000000000000000064
:2000C00030301E00100002030104003F000000000000000000001100000000000000000038
:2000E000000000000000280002000102030029001000001000022600010100120002220027
:2001000001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFFFFFFFFF6D
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF

View File

@@ -39,10 +39,82 @@
"name": "BasePeriod",
"access": "RW",
"dtype": "UNSIGNED32",
"value": "20000",
"value": "10000",
"isSDOitem": true,
"data": "&Obj.BasePeriod"
},
"2001": {
"otype": "VAR",
"name": "StepsPerMM1",
"access": "RW",
"dtype": "REAL32",
"value": "200",
"isSDOitem": true,
"data": "&Obj.StepsPerMM1"
},
"2002": {
"otype": "VAR",
"name": "StepsPerMM2",
"access": "RW",
"dtype": "REAL32",
"value": "200",
"isSDOitem": true,
"data": "&Obj.StepsPerMM2"
},
"2003": {
"otype": "VAR",
"name": "StepsPerMM3",
"access": "RW",
"dtype": "REAL32",
"value": "200",
"isSDOitem": true,
"data": "&Obj.StepsPerMM3"
},
"2004": {
"otype": "VAR",
"name": "StepsPerMM4",
"access": "RW",
"dtype": "REAL32",
"value": "200",
"isSDOitem": true,
"data": "&Obj.StepsPerMM4"
},
"2005": {
"otype": "VAR",
"name": "MaxAcceleration1",
"access": "RW",
"dtype": "REAL32",
"value": "1000000",
"isSDOitem": true,
"data": "&Obj.MaxAcceleration1"
},
"2006": {
"otype": "VAR",
"name": "MaxAcceleration2",
"access": "RW",
"dtype": "REAL32",
"value": "1000000",
"isSDOitem": true,
"data": "&Obj.MaxAcceleration2"
},
"2007": {
"otype": "VAR",
"name": "MaxAcceleration3",
"access": "RW",
"dtype": "REAL32",
"value": "1000000",
"isSDOitem": true,
"data": "&Obj.MaxAcceleration3"
},
"2008": {
"otype": "VAR",
"name": "MaxAcceleration4",
"access": "RW",
"dtype": "REAL32",
"value": "1000000",
"isSDOitem": true,
"data": "&Obj.MaxAcceleration4"
},
"A": {
"otype": "RECORD",
"name": "Error Settings",
@@ -195,93 +267,27 @@
},
"7002": {
"otype": "VAR",
"name": "CommandedPosition1",
"name": "Enable1",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"dtype": "UNSIGNED8",
"value": "0",
"data": "&Obj.CommandedPosition1"
"data": "&Obj.Enable1"
},
"7003": {
"otype": "VAR",
"name": "CommandedPosition2",
"name": "Enable2",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"dtype": "UNSIGNED8",
"value": "0",
"data": "&Obj.CommandedPosition2"
"data": "&Obj.Enable2"
},
"7004": {
"otype": "VAR",
"name": "CommandedPosition3",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.CommandedPosition3"
},
"7005": {
"otype": "VAR",
"name": "CommandedPosition4",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.CommandedPosition4"
},
"7006": {
"otype": "VAR",
"name": "StepsPerMM1",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.StepsPerMM1"
},
"7007": {
"otype": "VAR",
"name": "StepsPerMM2",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.StepsPerMM2"
},
"7008": {
"otype": "VAR",
"name": "StepsPerMM3",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.StepsPerMM3"
},
"7009": {
"otype": "VAR",
"name": "StepsPerMM4",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.StepsPerMM4"
},
"7010": {
"otype": "VAR",
"name": "Enable3",
"access": "RO",
@@ -292,7 +298,7 @@
"value": "0",
"data": "&Obj.Enable3"
},
"7011": {
"7005": {
"otype": "VAR",
"name": "Enable4",
"access": "RO",
@@ -303,16 +309,49 @@
"value": "0",
"data": "&Obj.Enable4"
},
"7012": {
"7006": {
"otype": "VAR",
"name": "EncIndexLatchEnable",
"name": "CommandedPosition1",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "UNSIGNED8",
"dtype": "REAL32",
"value": "0",
"data": "&Obj.EncIndexLatchEnable"
"data": "&Obj.CommandedPosition1"
},
"7007": {
"otype": "VAR",
"name": "CommandedPosition2",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.CommandedPosition2"
},
"7008": {
"otype": "VAR",
"name": "CommandedPosition3",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.CommandedPosition3"
},
"7009": {
"otype": "VAR",
"name": "CommandedPosition4",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.CommandedPosition4"
},
"60664": {
"otype": "VAR",
@@ -325,70 +364,45 @@
"value": "0"
},
"700A": {
"otype": "VAR",
"name": "MaxAcceleration1",
"otype": "RECORD",
"name": "EncoderIn",
"access": "RO",
"items": [
{
"name": "Max SubIndex"
},
{
"name": "IndexStatus",
"dtype": "UNSIGNED8",
"data": "&Obj.EncoderIn.IndexStatus",
"value": "0",
"access": "RO"
},
{
"name": "IndexByte",
"dtype": "UNSIGNED8",
"value": "0",
"access": "RO",
"data": "&Obj.EncoderIn.IndexByte"
},
{
"name": "Position",
"dtype": "REAL32",
"value": "0",
"access": "RO",
"data": "&Obj.EncoderIn.Position"
},
{
"name": "Frequency",
"dtype": "REAL32",
"value": "0",
"access": "RO",
"data": "&Obj.EncoderIn.Frequency"
}
],
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.MaxAcceleration1"
},
"700B": {
"otype": "VAR",
"name": "MaxAcceleration2",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.MaxAcceleration2"
},
"700C": {
"otype": "VAR",
"name": "MaxAcceleration3",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.MaxAcceleration3"
},
"700D": {
"otype": "VAR",
"name": "MaxAcceleration4",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "REAL32",
"value": "0",
"data": "&Obj.MaxAcceleration4"
},
"700E": {
"otype": "VAR",
"name": "Enable1",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "UNSIGNED8",
"value": "0",
"data": "&Obj.Enable1"
},
"700F": {
"otype": "VAR",
"name": "Enable2",
"access": "RO",
"pdo_mappings": [
"rxpdo"
],
"dtype": "UNSIGNED8",
"value": "0",
"data": "&Obj.Enable2"
]
}
}
},
@@ -412,4 +426,4 @@
"Sync1shiftTime": "0"
}
]
}
}

View File

@@ -19,58 +19,37 @@ static const char acName1600_01[] = "EncScale";
static const char acName1601[] = "Output4";
static const char acName1601_00[] = "Max SubIndex";
static const char acName1601_01[] = "Output4";
static const char acName1602[] = "CommandedPosition1";
static const char acName1602[] = "Enable1";
static const char acName1602_00[] = "Max SubIndex";
static const char acName1602_01[] = "CommandedPosition1";
static const char acName1603[] = "CommandedPosition2";
static const char acName1602_01[] = "Enable1";
static const char acName1603[] = "Enable2";
static const char acName1603_00[] = "Max SubIndex";
static const char acName1603_01[] = "CommandedPosition2";
static const char acName1604[] = "CommandedPosition3";
static const char acName1603_01[] = "Enable2";
static const char acName1604[] = "Enable3";
static const char acName1604_00[] = "Max SubIndex";
static const char acName1604_01[] = "CommandedPosition3";
static const char acName1605[] = "CommandedPosition4";
static const char acName1604_01[] = "Enable3";
static const char acName1605[] = "Enable4";
static const char acName1605_00[] = "Max SubIndex";
static const char acName1605_01[] = "CommandedPosition4";
static const char acName1606[] = "StepsPerMM1";
static const char acName1605_01[] = "Enable4";
static const char acName1606[] = "CommandedPosition1";
static const char acName1606_00[] = "Max SubIndex";
static const char acName1606_01[] = "StepsPerMM1";
static const char acName1607[] = "StepsPerMM2";
static const char acName1606_01[] = "CommandedPosition1";
static const char acName1607[] = "CommandedPosition2";
static const char acName1607_00[] = "Max SubIndex";
static const char acName1607_01[] = "StepsPerMM2";
static const char acName1608[] = "StepsPerMM3";
static const char acName1607_01[] = "CommandedPosition2";
static const char acName1608[] = "CommandedPosition3";
static const char acName1608_00[] = "Max SubIndex";
static const char acName1608_01[] = "StepsPerMM3";
static const char acName1609[] = "StepsPerMM4";
static const char acName1608_01[] = "CommandedPosition3";
static const char acName1609[] = "CommandedPosition4";
static const char acName1609_00[] = "Max SubIndex";
static const char acName1609_01[] = "StepsPerMM4";
static const char acName160A[] = "MaxAcceleration1";
static const char acName1609_01[] = "CommandedPosition4";
static const char acName160A[] = "EncoderIn";
static const char acName160A_00[] = "Max SubIndex";
static const char acName160A_01[] = "MaxAcceleration1";
static const char acName160B[] = "MaxAcceleration2";
static const char acName160B_00[] = "Max SubIndex";
static const char acName160B_01[] = "MaxAcceleration2";
static const char acName160C[] = "MaxAcceleration3";
static const char acName160C_00[] = "Max SubIndex";
static const char acName160C_01[] = "MaxAcceleration3";
static const char acName160D[] = "MaxAcceleration4";
static const char acName160D_00[] = "Max SubIndex";
static const char acName160D_01[] = "MaxAcceleration4";
static const char acName160E[] = "Enable1";
static const char acName160E_00[] = "Max SubIndex";
static const char acName160E_01[] = "Enable1";
static const char acName160F[] = "Enable2";
static const char acName160F_00[] = "Max SubIndex";
static const char acName160F_01[] = "Enable2";
static const char acName1610[] = "Enable3";
static const char acName1610_00[] = "Max SubIndex";
static const char acName1610_01[] = "Enable3";
static const char acName1611[] = "Enable4";
static const char acName1611_00[] = "Max SubIndex";
static const char acName1611_01[] = "Enable4";
static const char acName1612[] = "EncIndexLatchEnable";
static const char acName1612_00[] = "Max SubIndex";
static const char acName1612_01[] = "EncIndexLatchEnable";
static const char acName1A00[] = "EncPosition";
static const char acName160A_01[] = "IndexStatus";
static const char acName160A_02[] = "IndexByte";
static const char acName160A_03[] = "Position";
static const char acName160A_04[] = "Frequency";
static const char acName1A00[] = "Velocity";
static const char acName1A00_00[] = "Max SubIndex";
static const char acName1A00_01[] = "EncPosition";
static const char acName1A01[] = "EncVelocity";
@@ -116,14 +95,6 @@ static const char acName1C12_08[] = "PDO Mapping";
static const char acName1C12_09[] = "PDO Mapping";
static const char acName1C12_0a[] = "PDO Mapping";
static const char acName1C12_0b[] = "PDO Mapping";
static const char acName1C12_0c[] = "PDO Mapping";
static const char acName1C12_0d[] = "PDO Mapping";
static const char acName1C12_0e[] = "PDO Mapping";
static const char acName1C12_0f[] = "PDO Mapping";
static const char acName1C12_010[] = "PDO Mapping";
static const char acName1C12_11[] = "PDO Mapping";
static const char acName1C12_12[] = "PDO Mapping";
static const char acName1C12_13[] = "PDO Mapping";
static const char acName1C13[] = "Sync Manager 3 PDO Assignment";
static const char acName1C13_00[] = "Max SubIndex";
static const char acName1C13_01[] = "PDO Mapping";
@@ -136,8 +107,16 @@ static const char acName1C13_07[] = "PDO Mapping";
static const char acName1C13_08[] = "PDO Mapping";
static const char acName1C13_09[] = "PDO Mapping";
static const char acName2000[] = "BasePeriod";
static const char acName6000[] = "EncPosition";
static const char acName6001[] = "EncVelocity";
static const char acName2001[] = "StepsPerMM1";
static const char acName2002[] = "StepsPerMM2";
static const char acName2003[] = "StepsPerMM3";
static const char acName2004[] = "StepsPerMM4";
static const char acName2005[] = "MaxAcceleration1";
static const char acName2006[] = "MaxAcceleration2";
static const char acName2007[] = "MaxAcceleration3";
static const char acName2008[] = "MaxAcceleration4";
static const char acName6000[] = "Velocity";
static const char acName6001[] = "Frequency";
static const char acName6002[] = "Input8";
static const char acName6003[] = "ActualPosition1";
static const char acName6004[] = "ActualPosition2";
@@ -147,23 +126,20 @@ static const char acName6007[] = "IndexByte";
static const char acName6008[] = "IndexStatus";
static const char acName7000[] = "EncScale";
static const char acName7001[] = "Output4";
static const char acName7002[] = "CommandedPosition1";
static const char acName7003[] = "CommandedPosition2";
static const char acName7004[] = "CommandedPosition3";
static const char acName7005[] = "CommandedPosition4";
static const char acName7006[] = "StepsPerMM1";
static const char acName7007[] = "StepsPerMM2";
static const char acName7008[] = "StepsPerMM3";
static const char acName7009[] = "StepsPerMM4";
static const char acName700A[] = "MaxAcceleration1";
static const char acName700B[] = "MaxAcceleration2";
static const char acName700C[] = "MaxAcceleration3";
static const char acName700D[] = "MaxAcceleration4";
static const char acName700E[] = "Enable1";
static const char acName700F[] = "Enable2";
static const char acName7010[] = "Enable3";
static const char acName7011[] = "Enable4";
static const char acName7012[] = "EncIndexLatchEnable";
static const char acName7002[] = "Enable1";
static const char acName7003[] = "Enable2";
static const char acName7004[] = "Enable3";
static const char acName7005[] = "Enable4";
static const char acName7006[] = "CommandedPosition1";
static const char acName7007[] = "CommandedPosition2";
static const char acName7008[] = "CommandedPosition3";
static const char acName7009[] = "CommandedPosition4";
static const char acName700A[] = "EncoderIn";
static const char acName700A_00[] = "Max SubIndex";
static const char acName700A_01[] = "IndexStatus";
static const char acName700A_02[] = "IndexByte";
static const char acName700A_03[] = "Position";
static const char acName700A_04[] = "Frequency";
const _objd SDO1000[] =
{
@@ -202,22 +178,22 @@ const _objd SDO1601[] =
const _objd SDO1602[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1602_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1602_01, 0x70020020, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1602_01, 0x70020008, NULL},
};
const _objd SDO1603[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1603_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1603_01, 0x70030020, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1603_01, 0x70030008, NULL},
};
const _objd SDO1604[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1604_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1604_01, 0x70040020, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1604_01, 0x70040008, NULL},
};
const _objd SDO1605[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1605_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1605_01, 0x70050020, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1605_01, 0x70050008, NULL},
};
const _objd SDO1606[] =
{
@@ -241,43 +217,11 @@ const _objd SDO1609[] =
};
const _objd SDO160A[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160A_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160A_01, 0x700A0020, NULL},
};
const _objd SDO160B[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160B_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160B_01, 0x700B0020, NULL},
};
const _objd SDO160C[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160C_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160C_01, 0x700C0020, NULL},
};
const _objd SDO160D[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160D_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160D_01, 0x700D0020, NULL},
};
const _objd SDO160E[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160E_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160E_01, 0x700E0008, NULL},
};
const _objd SDO160F[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160F_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160F_01, 0x700F0008, NULL},
};
const _objd SDO1610[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1610_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1610_01, 0x70100008, NULL},
};
const _objd SDO1611[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1611_00, 1, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1611_01, 0x70110008, NULL},
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName160A_00, 4, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160A_01, 0x700A0108, NULL},
{0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160A_02, 0x700A0208, NULL},
{0x03, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160A_03, 0x700A0320, NULL},
{0x04, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName160A_04, 0x700A0420, NULL},
};
const _objd SDO1612[] =
{
@@ -339,7 +283,7 @@ const _objd SDO1C00[] =
};
const _objd SDO1C12[] =
{
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C12_00, 19, NULL},
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C12_00, 11, NULL},
{0x01, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_01, 0x1600, NULL},
{0x02, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_02, 0x1601, NULL},
{0x03, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_03, 0x1602, NULL},
@@ -351,14 +295,6 @@ const _objd SDO1C12[] =
{0x09, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_09, 0x1608, NULL},
{0x0a, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0a, 0x1609, NULL},
{0x0b, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0b, 0x160A, NULL},
{0x0c, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0c, 0x160B, NULL},
{0x0d, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0d, 0x160C, NULL},
{0x0e, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0e, 0x160D, NULL},
{0x0f, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_0f, 0x160E, NULL},
{0x010, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_010, 0x160F, NULL},
{0x11, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_11, 0x1610, NULL},
{0x12, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_12, 0x1611, NULL},
{0x13, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_13, 0x1612, NULL},
};
const _objd SDO1C13[] =
{
@@ -375,7 +311,39 @@ const _objd SDO1C13[] =
};
const _objd SDO2000[] =
{
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RW, acName2000, 20000, &Obj.BasePeriod},
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RW, acName2000, 10000, &Obj.BasePeriod},
};
const _objd SDO2001[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2001, 0x43480000, &Obj.StepsPerMM1},
};
const _objd SDO2002[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2002, 0x43480000, &Obj.StepsPerMM2},
};
const _objd SDO2003[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2003, 0x43480000, &Obj.StepsPerMM3},
};
const _objd SDO2004[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2004, 0x43480000, &Obj.StepsPerMM4},
};
const _objd SDO2005[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2005, 0x49742400, &Obj.MaxAcceleration1},
};
const _objd SDO2006[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2006, 0x49742400, &Obj.MaxAcceleration2},
};
const _objd SDO2007[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2007, 0x49742400, &Obj.MaxAcceleration3},
};
const _objd SDO2008[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RW, acName2008, 0x49742400, &Obj.MaxAcceleration4},
};
const _objd SDO6000[] =
{
@@ -423,67 +391,43 @@ const _objd SDO7001[] =
};
const _objd SDO7002[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7002, 0x00000000, &Obj.CommandedPosition1},
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7002, 0, &Obj.Enable1},
};
const _objd SDO7003[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7003, 0x00000000, &Obj.CommandedPosition2},
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7003, 0, &Obj.Enable2},
};
const _objd SDO7004[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7004, 0x00000000, &Obj.CommandedPosition3},
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7004, 0, &Obj.Enable3},
};
const _objd SDO7005[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7005, 0x00000000, &Obj.CommandedPosition4},
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7005, 0, &Obj.Enable4},
};
const _objd SDO7006[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7006, 0x00000000, &Obj.StepsPerMM1},
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7006, 0x00000000, &Obj.CommandedPosition1},
};
const _objd SDO7007[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7007, 0x00000000, &Obj.StepsPerMM2},
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7007, 0x00000000, &Obj.CommandedPosition2},
};
const _objd SDO7008[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7008, 0x00000000, &Obj.StepsPerMM3},
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7008, 0x00000000, &Obj.CommandedPosition3},
};
const _objd SDO7009[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7009, 0x00000000, &Obj.StepsPerMM4},
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName7009, 0x00000000, &Obj.CommandedPosition4},
};
const _objd SDO700A[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName700A, 0x00000000, &Obj.MaxAcceleration1},
};
const _objd SDO700B[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName700B, 0x00000000, &Obj.MaxAcceleration2},
};
const _objd SDO700C[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName700C, 0x00000000, &Obj.MaxAcceleration3},
};
const _objd SDO700D[] =
{
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_RXPDO, acName700D, 0x00000000, &Obj.MaxAcceleration4},
};
const _objd SDO700E[] =
{
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName700E, 0, &Obj.Enable1},
};
const _objd SDO700F[] =
{
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName700F, 0, &Obj.Enable2},
};
const _objd SDO7010[] =
{
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7010, 0, &Obj.Enable3},
};
const _objd SDO7011[] =
{
{0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName7011, 0, &Obj.Enable4},
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName700A_00, 4, NULL},
{0x01, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName700A_01, 0, &Obj.EncoderIn.IndexStatus},
{0x02, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName700A_02, 0, &Obj.EncoderIn.IndexByte},
{0x03, DTYPE_REAL32, 32, ATYPE_RO, acName700A_03, 0x00000000, &Obj.EncoderIn.Position},
{0x04, DTYPE_REAL32, 32, ATYPE_RO, acName700A_04, 0x00000000, &Obj.EncoderIn.Frequency},
};
const _objd SDO7012[] =
{
@@ -507,15 +451,7 @@ const _objectlist SDOobjects[] =
{0x1607, OTYPE_RECORD, 1, 0, acName1607, SDO1607},
{0x1608, OTYPE_RECORD, 1, 0, acName1608, SDO1608},
{0x1609, OTYPE_RECORD, 1, 0, acName1609, SDO1609},
{0x160A, OTYPE_RECORD, 1, 0, acName160A, SDO160A},
{0x160B, OTYPE_RECORD, 1, 0, acName160B, SDO160B},
{0x160C, OTYPE_RECORD, 1, 0, acName160C, SDO160C},
{0x160D, OTYPE_RECORD, 1, 0, acName160D, SDO160D},
{0x160E, OTYPE_RECORD, 1, 0, acName160E, SDO160E},
{0x160F, OTYPE_RECORD, 1, 0, acName160F, SDO160F},
{0x1610, OTYPE_RECORD, 1, 0, acName1610, SDO1610},
{0x1611, OTYPE_RECORD, 1, 0, acName1611, SDO1611},
{0x1612, OTYPE_RECORD, 1, 0, acName1612, SDO1612},
{0x160A, OTYPE_RECORD, 4, 0, acName160A, SDO160A},
{0x1A00, OTYPE_RECORD, 1, 0, acName1A00, SDO1A00},
{0x1A01, OTYPE_RECORD, 1, 0, acName1A01, SDO1A01},
{0x1A02, OTYPE_RECORD, 1, 0, acName1A02, SDO1A02},
@@ -526,9 +462,17 @@ const _objectlist SDOobjects[] =
{0x1A07, OTYPE_RECORD, 1, 0, acName1A07, SDO1A07},
{0x1A08, OTYPE_RECORD, 1, 0, acName1A08, SDO1A08},
{0x1C00, OTYPE_ARRAY, 4, 0, acName1C00, SDO1C00},
{0x1C12, OTYPE_ARRAY, 19, 0, acName1C12, SDO1C12},
{0x1C13, OTYPE_ARRAY, 9, 0, acName1C13, SDO1C13},
{0x1C12, OTYPE_ARRAY, 11, 0, acName1C12, SDO1C12},
{0x1C13, OTYPE_ARRAY, 7, 0, acName1C13, SDO1C13},
{0x2000, OTYPE_VAR, 0, 0, acName2000, SDO2000},
{0x2001, OTYPE_VAR, 0, 0, acName2001, SDO2001},
{0x2002, OTYPE_VAR, 0, 0, acName2002, SDO2002},
{0x2003, OTYPE_VAR, 0, 0, acName2003, SDO2003},
{0x2004, OTYPE_VAR, 0, 0, acName2004, SDO2004},
{0x2005, OTYPE_VAR, 0, 0, acName2005, SDO2005},
{0x2006, OTYPE_VAR, 0, 0, acName2006, SDO2006},
{0x2007, OTYPE_VAR, 0, 0, acName2007, SDO2007},
{0x2008, OTYPE_VAR, 0, 0, acName2008, SDO2008},
{0x6000, OTYPE_VAR, 0, 0, acName6000, SDO6000},
{0x6001, OTYPE_VAR, 0, 0, acName6001, SDO6001},
{0x6002, OTYPE_VAR, 0, 0, acName6002, SDO6002},
@@ -548,14 +492,6 @@ const _objectlist SDOobjects[] =
{0x7007, OTYPE_VAR, 0, 0, acName7007, SDO7007},
{0x7008, OTYPE_VAR, 0, 0, acName7008, SDO7008},
{0x7009, OTYPE_VAR, 0, 0, acName7009, SDO7009},
{0x700A, OTYPE_VAR, 0, 0, acName700A, SDO700A},
{0x700B, OTYPE_VAR, 0, 0, acName700B, SDO700B},
{0x700C, OTYPE_VAR, 0, 0, acName700C, SDO700C},
{0x700D, OTYPE_VAR, 0, 0, acName700D, SDO700D},
{0x700E, OTYPE_VAR, 0, 0, acName700E, SDO700E},
{0x700F, OTYPE_VAR, 0, 0, acName700F, SDO700F},
{0x7010, OTYPE_VAR, 0, 0, acName7010, SDO7010},
{0x7011, OTYPE_VAR, 0, 0, acName7011, SDO7011},
{0x7012, OTYPE_VAR, 0, 0, acName7012, SDO7012},
{0x700A, OTYPE_RECORD, 4, 0, acName700A, SDO700A},
{0xffff, 0xff, 0xff, 0xff, NULL, NULL}
};

View File

@@ -27,10 +27,25 @@ typedef struct
float EncScale;
uint8_t Output4;
uint8_t Enable1;
uint8_t Enable2;
uint8_t Enable3;
uint8_t Enable4;
float CommandedPosition1;
float CommandedPosition2;
float CommandedPosition3;
float CommandedPosition4;
struct
{
uint8_t IndexStatus;
uint8_t IndexByte;
float Position;
float Frequency;
} EncoderIn;
/* Parameters */
uint32_t BasePeriod;
float StepsPerMM1;
float StepsPerMM2;
float StepsPerMM3;
@@ -39,15 +54,6 @@ typedef struct
float MaxAcceleration2;
float MaxAcceleration3;
float MaxAcceleration4;
uint8_t Enable1;
uint8_t Enable2;
uint8_t Enable3;
uint8_t Enable4;
uint8_t EncIndexLatchEnable;
/* Parameters */
uint32_t BasePeriod;
} _Objects;
extern _Objects Obj;

View File

@@ -0,0 +1,230 @@
# EMC controller parameters for a simulated machine.
# General note: Comments can either be preceded with a # or ; - either is
# acceptable, although # is in keeping with most linux config files.
# General section -------------------------------------------------------------
[EMC]
# Version of this INI file
VERSION = 1.1
# Name of machine, for use with display, etc.
MACHINE = LinuxCNC-HAL-SIM-AXIS
# Debug level, 0 means no messages. See src/emc/nml_int/emcglb.h for others
#DEBUG = 0x7FFFFFFF
DEBUG = 0
# Sections for display options ------------------------------------------------
[DISPLAY]
# Name of display program, e.g., axis
DISPLAY = axis
# Cycle time, in seconds, that display will sleep between polls
CYCLE_TIME = 0.100
# Path to help file
HELP_FILE = doc/help.txt
# Initial display setting for position, RELATIVE or MACHINE
POSITION_OFFSET = RELATIVE
# Initial display setting for position, COMMANDED or ACTUAL
POSITION_FEEDBACK = ACTUAL
# Highest value that will be allowed for feed override, 1.0 = 100%
MAX_FEED_OVERRIDE = 1.2
MAX_SPINDLE_OVERRIDE = 1.0
MAX_LINEAR_VELOCITY = 5
DEFAULT_LINEAR_VELOCITY = .25
DEFAULT_SPINDLE_SPEED = 200
# Prefix to be used
PROGRAM_PREFIX = /home/debian/linuxcnc/nc_files
# Introductory graphic
INTRO_GRAPHIC = linuxcnc.gif
INTRO_TIME = 5
#EDITOR = geany
TOOL_EDITOR = tooledit
INCREMENTS = 1 in, 0.1 in, 10 mil, 1 mil, 1mm, .1mm, 1/8000 in
[FILTER]
PROGRAM_EXTENSION = .png,.gif,.jpg Grayscale Depth Image
PROGRAM_EXTENSION = .py Python Script
png = image-to-gcode
gif = image-to-gcode
jpg = image-to-gcode
py = python3
# Task controller section -----------------------------------------------------
[TASK]
# Name of task controller program, e.g., milltask
TASK = milltask
# Cycle time, in seconds, that task controller will sleep between polls
CYCLE_TIME = 0.001
# Part program interpreter section --------------------------------------------
[RS274NGC]
# File containing interpreter variables
PARAMETER_FILE = sim.var
# Motion control section ------------------------------------------------------
[EMCMOT]
EMCMOT = motmod
# Timeout for comm to emcmot, in seconds
COMM_TIMEOUT = 1.0
# BASE_PERIOD is unused in this configuration but specified in core_sim.hal
BASE_PERIOD = 0
# Servo task period, in nano-seconds
SERVO_PERIOD = 1000000
# section for main IO controller parameters -----------------------------------
[EMCIO]
# Name of IO controller program, e.g., io
EMCIO = io
# cycle time, in seconds
CYCLE_TIME = 0.100
# tool table file
TOOL_TABLE = sim.tbl
TOOL_CHANGE_POSITION = 0 0 0
TOOL_CHANGE_QUILL_UP = 1
# Hardware Abstraction Layer section --------------------------------------------------
[HAL]
# The run script first uses halcmd to execute any HALFILE
# files, and then to execute any individual HALCMD commands.
#
# list of hal config files to run through halcmd
# files are executed in the order in which they appear
HALFILE = e3000.hal
#HALFILE = core_sim.hal
#HALFILE = sim_spindle_encoder.hal
#HALFILE = axis_manualtoolchange.hal
#HALFILE = simulated_home.hal
#HALFILE = check_xyz_constraints.hal
#HALFILE = cooling.hal
# list of halcmd commands to execute
# commands are executed in the order in which they appear
#HALCMD = save neta
# Single file that is executed after the GUI has started. Only supported by
# AXIS at this time (only AXIS creates a HAL component of its own)
#POSTGUI_HALFILE = test_postgui.hal
HALUI = halui
# Trajectory planner section --------------------------------------------------
[TRAJ]
COORDINATES = X Y Z
LINEAR_UNITS = inch
ANGULAR_UNITS = degree
MAX_LINEAR_VELOCITY = 4
DEFAULT_LINEAR_ACCELERATION = 100
MAX_LINEAR_ACCELERATION = 100
POSITION_FILE = position.txt
[KINS]
KINEMATICS = trivkins
JOINTS = 3
# Axes sections ---------------
[AXIS_X]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Y]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
[AXIS_Z]
MAX_VELOCITY = 4
MAX_ACCELERATION = 100.0
MIN_LIMIT = -8.0
MAX_LIMIT = 0.12
# Joints sections -------------
[JOINT_0]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
HOME_IS_SHARED = 1
[JOINT_1]
TYPE = LINEAR
HOME = 0.000
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
FERROR = 0.050
MIN_FERROR = 0.010
MIN_LIMIT = -10.0
MAX_LIMIT = 10.0
HOME_OFFSET = 0.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 1
[JOINT_2]
TYPE = LINEAR
HOME = 0.0
MAX_VELOCITY = 5
MAX_ACCELERATION = 50.0
BACKLASH = 0.000
INPUT_SCALE = 4000
OUTPUT_SCALE = 1.000
MIN_LIMIT = -8.0
# Normally the Z max should be 0.000!
# The only reason it's greater than 0 here is so that the splash screen
# gcode will run.
MAX_LIMIT = 0.12
FERROR = 0.50
MIN_FERROR = 0.10
HOME_OFFSET = 1.0
HOME_SEARCH_VEL = 0
HOME_LATCH_VEL = 0.0
HOME_USE_INDEX = YES
HOME_IGNORE_LIMITS = NO
HOME_SEQUENCE = 0
HOME_IS_SHARED = 1

View File

@@ -0,0 +1,36 @@
loadrt [KINS]KINEMATICS
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
loadusr -W lcec_conf ethercat-conf.xml
loadrt lcec
###########################################################
# Functions servo-thread
###########################################################
addf lcec.read-all servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf lcec.write-all servo-thread
#########################################
#nets
#########################################
net emc-enable => iocontrol.0.emc-enable-in
sets emc-enable 1
net x-enable joint.0.amp-enable-out lcec.0.E3000.enable1-0
net x-pos-cmd joint.0.motor-pos-cmd lcec.0.E3000.commandedPosition1
net x-pos-fb joint.0.motor-pos-fb lcec.0.E3000.actualPosition1
net y-enable joint.1.amp-enable-out lcec.0.E3000.enable2-0
net y-pos-cmd joint.1.motor-pos-cmd lcec.0.E3000.commandedPosition2
net y-pos-fb joint.1.motor-pos-fb lcec.0.E3000.actualPosition2
net z-enable joint.2.amp-enable-out lcec.0.E3000.enable3-0
net z-pos-cmd joint.2.motor-pos-cmd lcec.0.E3000.commandedPosition3
net z-pos-fb joint.2.motor-pos-fb lcec.0.E3000.actualPosition3

View File

@@ -0,0 +1,95 @@
<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1000">
<slave idx="0" type="generic" vid="0xd0bed1d0" pid="0x00003000" name="E3000" configPdos="true">
<!--dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/-->
<!--MetalMusings EaserCAT 3000-->
<sdoConfig idx="2000" subIdx="0"><sdoDataRaw data ="10 27 00 00"/></sdoConfig> <!-- Base period (ns) 10000 (100 kHz) -->
<sdoConfig idx="2001" subIdx="0"><sdoDataRaw data ="00 00 48 43"/></sdoConfig> <!-- Steps per mm stepper 1. 200.0 = 43 48 00 00, use ieee float to hex converter -->
<sdoConfig idx="2002" subIdx="0"><sdoDataRaw data ="00 00 96 43"/></sdoConfig> <!-- Steps per mm stepper 2. 300.0 = 43 96 00 00, use ieee float to hex converter -->
<sdoConfig idx="2003" subIdx="0"><sdoDataRaw data ="00 00 96 c3"/></sdoConfig> <!-- Steps per mm stepper 3. -300.0 = c3 96 00 00, use ieee float to hex converter -->
<sdoConfig idx="2004" subIdx="0"><sdoDataRaw data ="00 00 fa c3"/></sdoConfig> <!-- Steps per mm stepper 4. -500.0 = c3 fa 00 00, use ieee float to hex converter -->
<!--MetalMusings EaserCAT 3000-->
<syncManager idx="0" dir="in"/>
<syncManager idx="1" dir="out"/>
<syncManager idx="2" dir="out">
<pdo idx="1600">
<!--Scale-->
<pdoEntry idx="7000" subIdx="00" bitLen="32" halPin="scale" halType="float-ieee"/>
</pdo>
<pdo idx="1601">
<!--Output4-->
<pdoEntry idx="7001" subIdx="00" bitLen="8" halPin="output4" halType="bit"/>
</pdo>
<pdo idx="1602">
<!--CommandedPosition1-->
<pdoEntry idx="7002" subIdx="00" bitLen="8" halPin="enable1" halType="bit"/>
</pdo>
<pdo idx="1603">
<!--CommandedPosition2-->
<pdoEntry idx="7003" subIdx="00" bitLen="8" halPin="enable2" halType="bit"/>
</pdo>
<pdo idx="1604">
<!--CommandedPosition3-->
<pdoEntry idx="7004" subIdx="00" bitLen="8" halPin="enable3" halType="bit"/>
</pdo>
<pdo idx="1605">
<!--CommandedPosition4-->
<pdoEntry idx="7005" subIdx="00" bitLen="8" halPin="enable4" halType="bit"/>
</pdo>
<pdo idx="1606">
<!--Enable1-->
<pdoEntry idx="7006" subIdx="00" bitLen="32" halPin="commandedPosition1" halType="float-ieee"/>
</pdo>
<pdo idx="1607">
<!--Enable2-->
<pdoEntry idx="7007" subIdx="00" bitLen="32" halPin="commandedPosition2" halType="float-ieee"/>
</pdo>
<pdo idx="1608">
<!--Enable3-->
<pdoEntry idx="7008" subIdx="00" bitLen="32" halPin="commandedPosition3" halType="float-ieee"/>
</pdo>
<pdo idx="1609">
<!--Enable4-->
<pdoEntry idx="7009" subIdx="00" bitLen="32" halPin="commandedPosition4" halType="float-ieee"/>
</pdo>
<pdo idx="160a">
<!--EncoderIn-->
<pdoEntry idx="700a" subIdx="01" bitLen="8" halPin="indexstatus" halType="u32"/>
<pdoEntry idx="700a" subIdx="02" bitLen="8" halPin="indexbyte" halType="u32"/>
<pdoEntry idx="700a" subIdx="03" bitLen="32" halPin="position" halType="float-ieee"/>
<pdoEntry idx="700a" subIdx="04" bitLen="32" halPin="out-frequency" halType="float-ieee"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1a00">
<!--Velocity-->
<pdoEntry idx="6000" subIdx="00" bitLen="32" halPin="velocity" halType="float-ieee"/>
</pdo>
<pdo idx="1a01">
<!--Frequency-->
<pdoEntry idx="6001" subIdx="00" bitLen="32" halPin="in-frequency" halType="float-ieee"/>
</pdo>
<pdo idx="1a02">
<!--Input8-->
<pdoEntry idx="6002" subIdx="00" bitLen="8" halPin="input8" halType="bit"/>
</pdo>
<pdo idx="1a03">
<!--ActualPosition1-->
<pdoEntry idx="6003" subIdx="00" bitLen="32" halPin="actualPosition1" halType="float-ieee"/>
</pdo>
<pdo idx="1a04">
<!--ActualPosition2-->
<pdoEntry idx="6004" subIdx="00" bitLen="32" halPin="actualPosition2" halType="float-ieee"/>
</pdo>
<pdo idx="1a05">
<!--ActualPosition3-->
<pdoEntry idx="6005" subIdx="00" bitLen="32" halPin="actualPosition3" halType="float-ieee"/>
</pdo>
<pdo idx="1a06">
<!--ActualPosition4-->
<pdoEntry idx="6006" subIdx="00" bitLen="32" halPin="actualPosition4" halType="float-ieee"/>
</pdo>
</syncManager>
</slave>
</master>
</masters>

View File

@@ -1,106 +0,0 @@
<slave idx="0" name="E3000" type="generic" vid="0xd0bed1d0" pid="0x00003000">
<!--MetalMusings EaserCAT 3000-->
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="0"/>
<sdoConfig idx="2000" subIdx="0"><sdoDataRaw data ="10 27 00 00"/></sdoConfig> <!-- Base period (ns) 10000 (100 kHz) -->
<syncManager idx="0" dir="in"/>
<syncManager idx="1" dir="out"/>
<syncManager idx="2" dir="out">
<pdo idx="1600">
<pdoEntry idx="7000" subIdx="00" bitLen="32" halPin="Scale" halType="float-ieee"/>
</pdo>
<pdo idx="1601">
<pdoEntry idx="7001" subIdx="00" bitLen="8" halType="complex">
<complexEntry bitLen="1" halPin="out-1" halType="bit"/>
<complexEntry bitLen="1" halPin="out-2" halType="bit"/>
<complexEntry bitLen="1" halPin="out-3" halType="bit"/>
<complexEntry bitLen="1" halPin="out-4" halType="bit"/>
</pdoEntry>
</pdo>
<pdo idx="1602">
<pdoEntry idx="7002" subIdx="00" bitLen="32" halPin="CommandedPosition1" halType="float-ieee"/>
</pdo>
<pdo idx="1603">
<pdoEntry idx="7003" subIdx="00" bitLen="32" halPin="CommandedPosition2" halType="float-ieee"/>
</pdo>
<pdo idx="1604">
<pdoEntry idx="7004" subIdx="00" bitLen="32" halPin="CommandedPosition3" halType="float-ieee"/>
</pdo>
<pdo idx="1605">
<pdoEntry idx="7005" subIdx="00" bitLen="32" halPin="CommandedPosition4" halType="float-ieee"/>
</pdo>
<pdo idx="1606">
<pdoEntry idx="7006" subIdx="00" bitLen="32" halPin="StepsPerMM1" halType="float-ieee"/>
</pdo>
<pdo idx="1607">
<pdoEntry idx="7007" subIdx="00" bitLen="32" halPin="StepsPerMM2" halType="float-ieee"/>
</pdo>
<pdo idx="1608">
<pdoEntry idx="7008" subIdx="00" bitLen="32" halPin="StepsPerMM3" halType="float-ieee"/>
</pdo>
<pdo idx="1609">
<pdoEntry idx="7009" subIdx="00" bitLen="32" halPin="StepsPerMM4" halType="float-ieee"/>
</pdo>
<pdo idx="160a">
<pdoEntry idx="700a" subIdx="00" bitLen="32" halPin="MaxAcceleration1" halType="float-ieee"/>
</pdo>
<pdo idx="160b">
<pdoEntry idx="700b" subIdx="00" bitLen="32" halPin="MaxAcceleration2" halType="float-ieee"/>
</pdo>
<pdo idx="160c">
<pdoEntry idx="700c" subIdx="00" bitLen="32" halPin="MaxAcceleration3" halType="float-ieee"/>
</pdo>
<pdo idx="160d">
<pdoEntry idx="700d" subIdx="00" bitLen="32" halPin="MaxAcceleration4" halType="float-ieee"/>
</pdo>
<pdo idx="160e">
<pdoEntry idx="700e" subIdx="00" bitLen="8" halPin="Enable1" halType="bit"/>
</pdo>
<pdo idx="160f">
<pdoEntry idx="700f" subIdx="00" bitLen="8" halPin="Enable2" halType="bit"/>
</pdo>
<pdo idx="1610">
<pdoEntry idx="7010" subIdx="00" bitLen="8" halPin="Enable3" halType="bit"/>
</pdo>
<pdo idx="1611">
<pdoEntry idx="7011" subIdx="00" bitLen="8" halPin="Enable4" halType="bit"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1a00">
<pdoEntry idx="6000" subIdx="01" bitLen="32" halPin="Velocity" halType="float-ieee"/>
</pdo>
<pdo idx="1a01">
<pdoEntry idx="6001" subIdx="01" bitLen="32" halPin="Frequency" halType="float-ieee"/>
</pdo>
<pdo idx="1a01">
<pdoEntry idx="6001" subIdx="01" bitLen="8" halPin="DI1" halType="u32"/>
<pdoEntry idx="6001" subIdx="02" bitLen="8" halPin="DI2" halType="u32"/>
<pdoEntry idx="6001" subIdx="03" bitLen="8" halPin="DI3" halType="u32"/>
<pdoEntry idx="6001" subIdx="04" bitLen="8" halPin="DI4" halType="u32"/>
</pdo>
<pdo idx="1a02">
<pdoEntry idx="6002" subIdx="00" bitLen="8" halType="complex">
<complexEntry bitLen="1" halPin="in-1" halType="bit"/>
<complexEntry bitLen="1" halPin="in-2" halType="bit"/>
<complexEntry bitLen="1" halPin="in-3" halType="bit"/>
<complexEntry bitLen="1" halPin="in-4" halType="bit"/>
<complexEntry bitLen="1" halPin="in-5" halType="bit"/>
<complexEntry bitLen="1" halPin="in-6" halType="bit"/>
<complexEntry bitLen="1" halPin="in-7" halType="bit"/>
<complexEntry bitLen="1" halPin="in-8" halType="bit"/>
</pdoEntry>
</pdo>
<pdo idx="1a03">
<pdoEntry idx="6003" subIdx="01" bitLen="32" halPin="ActualPosition1" halType="float-ieee"/>
</pdo>
<pdo idx="1a04">
<pdoEntry idx="6004" subIdx="01" bitLen="32" halPin="ActualPosition2" halType="float-ieee"/>
</pdo>
<pdo idx="1a05">
<pdoEntry idx="6005" subIdx="01" bitLen="32" halPin="ActualPosition3" halType="float-ieee"/>
</pdo>
<pdo idx="1a06">
<pdoEntry idx="6006" subIdx="01" bitLen="32" halPin="ActualPosition4" halType="float-ieee"/>
</pdo>
</syncManager>
</slave>