Works, sends Voltage during free-run to Twincat.

This commit is contained in:
Hakan Bastedt
2025-02-08 21:48:26 +01:00
parent dda9d3bf20
commit ada1b8aa05
7 changed files with 42 additions and 41 deletions

View File

@@ -1,10 +1,10 @@
:2000000080060344640000000000000000001400AA0A000000600000020000000100000084 :2000000080060344640000000000000000001400D0D1BED0007000000200000001000000F9
:20002000000000000000000000000000000000000010000200120002040000000000000096 :20002000000000000000000000000000000000000010000200120002040000000000000096
:200040000000000000000000000000000000000000000000000000000000000000000000A0 :200040000000000000000000000000000000000000000000000000000000000000000000A0
:20006000000000000000000000000000000000000000000000000000000000000F00010070 :20006000000000000000000000000000000000000000000000000000000000000F00010070
:200080000A002000040D456173657243415420363030300E4D616368696E65436F6E7472AE :200080000A002000040D456173657243415420373030300E4D616368696E65436F6E7472AD
:2000A0006F6C06494D474342591A4D6574616C4D7573696E677320456173657243415420A9 :2000A0006F6C06494D474342591A4D6574616C4D7573696E677320456173657243415420A9
:2000C000363030301E001000020301040013000000000000000000001100000000000000FE :2000C000373030301E001000020301040013000000000000000000001100000000000000FD
:2000E000000000000000000028000200010203002900100000100002260001010012000249 :2000E000000000000000000028000200010203002900100000100002260001010012000249
:20010000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFFFFF49 :20010000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFFFFF49
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF :20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF

View File

@@ -1,8 +1,8 @@
{ {
"form": { "form": {
"VendorName": "MetalMusings", "VendorName": "MetalMusings",
"VendorID": "0xaaa", "VendorID": "0xd0bed1d0",
"ProductCode": "0x6000", "ProductCode": "0x7000",
"ProfileNo": "5001", "ProfileNo": "5001",
"RevisionNumber": "0x002", "RevisionNumber": "0x002",
"SerialNumber": "0x001", "SerialNumber": "0x001",
@@ -17,8 +17,8 @@
"TextGroupType": "MachineControl", "TextGroupType": "MachineControl",
"TextGroupName5": "Plasma cutter", "TextGroupName5": "Plasma cutter",
"ImageName": "IMGCBY", "ImageName": "IMGCBY",
"TextDeviceType": "EaserCAT 6000", "TextDeviceType": "EaserCAT 7000",
"TextDeviceName": "MetalMusings EaserCAT 6000", "TextDeviceName": "MetalMusings EaserCAT 7000",
"Port0Physical": "Y", "Port0Physical": "Y",
"Port1Physical": "Y", "Port1Physical": "Y",
"Port2Physical": " ", "Port2Physical": " ",
@@ -36,12 +36,12 @@
"sdo": { "sdo": {
"2000": { "2000": {
"otype": "VAR", "otype": "VAR",
"name": "VelocityScale", "name": "VoltageScale",
"access": "RO", "access": "RO",
"dtype": "REAL32", "dtype": "REAL32",
"value": "0", "value": "1",
"isSDOitem": true, "isSDOitem": true,
"data": "&Obj.VelocityScale" "data": "&Obj.VoltageScale"
}, },
"A": { "A": {
"otype": "RECORD", "otype": "RECORD",
@@ -83,25 +83,25 @@
}, },
"6001": { "6001": {
"otype": "VAR", "otype": "VAR",
"name": "Velocity", "name": "ArcVoltage",
"access": "RO", "access": "RO",
"pdo_mappings": [ "pdo_mappings": [
"txpdo" "txpdo"
], ],
"dtype": "REAL32", "dtype": "REAL32",
"value": "0", "value": "0",
"data": "&Obj.Velocity" "data": "&Obj.ArcVoltage"
}, },
"6002": { "6002": {
"otype": "VAR", "otype": "VAR",
"name": "Frequency", "name": "Voltage",
"access": "RO", "access": "RO",
"pdo_mappings": [ "pdo_mappings": [
"txpdo" "txpdo"
], ],
"dtype": "UNSIGNED32", "dtype": "REAL32",
"value": "0", "value": "0",
"data": "&Obj.Frequency" "data": "&Obj.Voltage"
} }
}, },
"rxpdo": { "rxpdo": {

View File

@@ -19,12 +19,12 @@ static const char acName1600_01[] = "Output4";
static const char acName1A00[] = "Input12"; static const char acName1A00[] = "Input12";
static const char acName1A00_00[] = "Max SubIndex"; static const char acName1A00_00[] = "Max SubIndex";
static const char acName1A00_01[] = "Input12"; static const char acName1A00_01[] = "Input12";
static const char acName1A01[] = "Velocity"; static const char acName1A01[] = "ArcVoltage";
static const char acName1A01_00[] = "Max SubIndex"; static const char acName1A01_00[] = "Max SubIndex";
static const char acName1A01_01[] = "Velocity"; static const char acName1A01_01[] = "ArcVoltage";
static const char acName1A02[] = "Frequency"; static const char acName1A02[] = "Voltage";
static const char acName1A02_00[] = "Max SubIndex"; static const char acName1A02_00[] = "Max SubIndex";
static const char acName1A02_01[] = "Frequency"; static const char acName1A02_01[] = "Voltage";
static const char acName1C00[] = "Sync Manager Communication Type"; static const char acName1C00[] = "Sync Manager Communication Type";
static const char acName1C00_00[] = "Max SubIndex"; static const char acName1C00_00[] = "Max SubIndex";
static const char acName1C00_01[] = "Communications Type SM0"; static const char acName1C00_01[] = "Communications Type SM0";
@@ -39,10 +39,10 @@ static const char acName1C13_00[] = "Max SubIndex";
static const char acName1C13_01[] = "PDO Mapping"; static const char acName1C13_01[] = "PDO Mapping";
static const char acName1C13_02[] = "PDO Mapping"; static const char acName1C13_02[] = "PDO Mapping";
static const char acName1C13_03[] = "PDO Mapping"; static const char acName1C13_03[] = "PDO Mapping";
static const char acName2000[] = "VelocityScale"; static const char acName2000[] = "VoltageScale";
static const char acName6000[] = "Input12"; static const char acName6000[] = "Input12";
static const char acName6001[] = "Velocity"; static const char acName6001[] = "ArcVoltage";
static const char acName6002[] = "Frequency"; static const char acName6002[] = "Voltage";
static const char acName7000[] = "Output4"; static const char acName7000[] = "Output4";
const _objd SDO1000[] = const _objd SDO1000[] =
@@ -51,7 +51,7 @@ const _objd SDO1000[] =
}; };
const _objd SDO1008[] = const _objd SDO1008[] =
{ {
{0x0, DTYPE_VISIBLE_STRING, 208, ATYPE_RO, acName1008, 0, "MetalMusings EaserCAT 6000"}, {0x0, DTYPE_VISIBLE_STRING, 208, ATYPE_RO, acName1008, 0, "MetalMusings EaserCAT 7000"},
}; };
const _objd SDO1009[] = const _objd SDO1009[] =
{ {
@@ -64,8 +64,8 @@ const _objd SDO100A[] =
const _objd SDO1018[] = const _objd SDO1018[] =
{ {
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1018_00, 4, NULL}, {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1018_00, 4, NULL},
{0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_01, 2730, NULL}, {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_01, 3502166480, NULL},
{0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_02, 24576, NULL}, {0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_02, 28672, NULL},
{0x03, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_03, 2, NULL}, {0x03, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_03, 2, NULL},
{0x04, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_04, 1, &Obj.serial}, {0x04, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_04, 1, &Obj.serial},
}; };
@@ -111,7 +111,7 @@ const _objd SDO1C13[] =
}; };
const _objd SDO2000[] = const _objd SDO2000[] =
{ {
{0x0, DTYPE_REAL32, 32, ATYPE_RO, acName2000, 0x00000000, &Obj.VelocityScale}, {0x0, DTYPE_REAL32, 32, ATYPE_RO, acName2000, 0x3f800000, &Obj.VoltageScale},
}; };
const _objd SDO6000[] = const _objd SDO6000[] =
{ {
@@ -119,11 +119,11 @@ const _objd SDO6000[] =
}; };
const _objd SDO6001[] = const _objd SDO6001[] =
{ {
{0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_TXPDO, acName6001, 0x00000000, &Obj.Velocity}, {0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_TXPDO, acName6001, 0x00000000, &Obj.ArcVoltage},
}; };
const _objd SDO6002[] = const _objd SDO6002[] =
{ {
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RO | ATYPE_TXPDO, acName6002, 0, &Obj.Frequency}, {0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_TXPDO, acName6002, 0x00000000, &Obj.Voltage},
}; };
const _objd SDO7000[] = const _objd SDO7000[] =
{ {

View File

@@ -14,8 +14,8 @@ typedef struct
/* Inputs */ /* Inputs */
int32_t Input12; int32_t Input12;
float Velocity; float ArcVoltage;
uint32_t Frequency; float Voltage;
/* Outputs */ /* Outputs */
@@ -23,7 +23,7 @@ typedef struct
/* Parameters */ /* Parameters */
float VelocityScale; float VoltageScale;
} _Objects; } _Objects;
extern _Objects Obj; extern _Objects Obj;

View File

@@ -18,7 +18,7 @@ debug_build_flags = -O0 -g -ggdb
monitor_port = COM15 monitor_port = COM15
monitor_filters = send_on_enter, time, colorize, log2file monitor_filters = send_on_enter, time, colorize, log2file
monitor_speed = 115200 monitor_speed = 115200
build_flags = -Wl,--no-warn-rwx-segment build_flags = -Wl,--no-warn-rwx-segment -DECAT
lib_deps = lib_deps =
SPI SPI
robtillaart/ADS1X15@^0.5.1 robtillaart/ADS1X15@^0.5.1

View File

@@ -40,12 +40,13 @@ void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation
{ {
for (int i = 0; i < sizeof(inputPin); i++) for (int i = 0; i < sizeof(inputPin); i++)
Obj.Input12 = digitalRead(inputPin[i]) == HIGH ? bitset(Obj.Input12, i) : bitclear(Obj.Input12, i); Obj.Input12 = digitalRead(inputPin[i]) == HIGH ? bitset(Obj.Input12, i) : bitclear(Obj.Input12, i);
float scale = Obj.VelocityScale;
float scale = Obj.VoltageScale;
if (scale == 0.0) if (scale == 0.0)
scale = 1.0; scale = 1.0;
float ADCvoltage = ADS.getValue(ADS.toVoltage(value)); float ADCvoltage = ADS.toVoltage(ADS.getValue());
Obj.ArcVoltage = scale * ADCvoltage; // Scaled voltage, supposedly to give Plasma voltage Obj.ArcVoltage = scale*ADCvoltage; // * ADCvoltage; // Scaled voltage, to give Plasma arc voltage
Obj.Voltage = ADCvoltage; // Raw voltage, read by ADC Obj.Voltage = ADCvoltage; // Raw voltage, read by ADC
} }
void ESC_interrupt_enable(uint32_t mask); void ESC_interrupt_enable(uint32_t mask);
@@ -67,10 +68,10 @@ static esc_cfg_t config =
.post_object_download_hook = NULL, .post_object_download_hook = NULL,
.rxpdo_override = NULL, .rxpdo_override = NULL,
.txpdo_override = NULL, .txpdo_override = NULL,
.esc_hw_interrupt_enable = ESC_interrupt_enable, .esc_hw_interrupt_enable = NULL, // ESC_interrupt_enable,
.esc_hw_interrupt_disable = ESC_interrupt_disable, .esc_hw_interrupt_disable = NULL, // ESC_interrupt_disable,
.esc_hw_eep_handler = NULL, .esc_hw_eep_handler = NULL,
.esc_check_dc_handler = dc_checker, .esc_check_dc_handler = NULL, // dc_checker,
}; };
volatile byte serveIRQ = 0; volatile byte serveIRQ = 0;
@@ -107,14 +108,14 @@ void setup(void)
ADS.setWireClock(400000UL); // 400 kHz ADS.setWireClock(400000UL); // 400 kHz
ADS.readADC(0); // first read to trigger settings ADS.readADC(0); // first read to trigger settings
#if 0 #ifdef ECAT
ecat_slv_init(&config); ecat_slv_init(&config);
#endif #endif
} }
void loop(void) void loop(void)
{ {
#if 0 #ifdef ECAT
uint64_t dTime; uint64_t dTime;
if (serveIRQ) if (serveIRQ)
{ {