Files
MyOwnEtherCATDevice/EEPROM_generator/src/constants.js
2024-03-03 17:02:04 +01:00

167 lines
5.2 KiB
JavaScript

/**
* SOES EEPROM generator
* Shared constants, data types
* This tool serves as:
- EtherCAT Slave Information XML + EEPROM binary generator
- SOES code generator
* Victor Sluiter 2013-2018
* Kuba Buda 2020-2021
*/
'use strict'
const automaticCodegen = true; // code is regenerated on every form change.
// no need to remember to generate before copying or downloading
// app is noticeably slower
// ####################### Constants, lookup tables ####################### //
/** CoE Object Types */
const OTYPE = {
VAR : 'VAR',
ARRAY : 'ARRAY',
RECORD: 'RECORD',
};
/** CoE Data Types */
const DTYPE = {
BOOLEAN : 'BOOLEAN',
INTEGER8 : 'INTEGER8',
INTEGER16 : 'INTEGER16',
INTEGER32 : 'INTEGER32',
INTEGER64 : 'INTEGER64',
UNSIGNED8 : 'UNSIGNED8',
UNSIGNED16 : 'UNSIGNED16',
UNSIGNED32 : 'UNSIGNED32',
UNSIGNED64 : 'UNSIGNED64',
REAL32 : 'REAL32',
REAL64 : 'REAL64',
VISIBLE_STRING : 'VISIBLE_STRING',
/* TODO implement missing less common types */
// OCTET_STRING : 'OCTET_STRING',
// UNICODE_STRING : 'UNICODE_STRING',
// INTEGER24 : 'INTEGER24',
// UNSIGNED24 : 'UNSIGNED24',
// INTEGER64 : 'INTEGER64',
// UNSIGNED64 : 'UNSIGNED64',
// REAL64 : 'REAL64',
// PDO_MAPPING : 'PDO_MAPPING',
};
/** Data types bitsize as used in objectlist.c */
const dtype_bitsize = {
'BOOLEAN' : 1,
'INTEGER8' : 8,
'INTEGER16' : 16,
'INTEGER32' : 32,
'INTEGER64' : 64,
'UNSIGNED8' : 8,
'UNSIGNED16' : 16,
'UNSIGNED32' : 32,
'UNSIGNED64' : 64,
'REAL32' : 32,
'REAL64' : 64,
'VISIBLE_STRING' : 8,
};
const booleanPaddingBitsize = 7;
/** ESI XML data type */
const ESI_DT = {
'BOOLEAN': { name: 'BOOL', bitsize: 1, ctype: 'uint8_t' },
'INTEGER8': { name: 'SINT', bitsize: 8, ctype: 'int8_t' },
'INTEGER16': { name: 'INT', bitsize: 16, ctype: 'int16_t' },
'INTEGER32': { name: 'DINT', bitsize: 32, ctype: 'int32_t' },
'INTEGER64': { name: 'LINT', bitsize: 64, ctype: 'int64_t' },
'UNSIGNED8': { name: 'USINT', bitsize: 8, ctype: 'uint8_t' },
'UNSIGNED16': { name: 'UINT', bitsize: 16, ctype: 'uint16_t' },
'UNSIGNED32': { name: 'UDINT', bitsize: 32, ctype: 'uint32_t' },
'UNSIGNED64': { name: 'ULINT', bitsize: 64, ctype: 'uint64_t' },
'REAL32': { name: 'REAL', bitsize: 32, ctype: 'float' },
'REAL64': { name: 'LREAL', bitsize: 64, ctype: 'double' },
'VISIBLE_STRING': { name: 'STRING', bitsize: 8, ctype: 'char *' }, // TODO check C type name
};
/** These are required by minimal CiA 301 device */
const SDO_category = {
'1000': 'm',
'1009': 'o',
};
// ####################### Object Dictionary building ####################### //
/**
* Returns Object Dictionaty stub with mandatory objects.
* OD index is hexadecimal value without '0x' prefix
*/
function getMandatoryObjects() {
const OD = {
'1000': { otype: OTYPE.VAR, dtype: DTYPE.UNSIGNED32, name: 'Device Type', value: 0x1389 },
'1008': { otype: OTYPE.VAR, dtype: DTYPE.VISIBLE_STRING, name: 'Device Name', data: '' },
'1009': { otype: OTYPE.VAR, dtype: DTYPE.VISIBLE_STRING, name: 'Hardware Version', data: '' },
'100A': { otype: OTYPE.VAR, dtype: DTYPE.VISIBLE_STRING, name: 'Software Version', data: '' },
'1018': { otype: OTYPE.RECORD, name: 'Identity Object', items: [
{ name: 'Max SubIndex' },
{ name: 'Vendor ID', dtype: DTYPE.UNSIGNED32, value: 600 },
{ name: 'Product Code', dtype: DTYPE.UNSIGNED32 },
{ name: 'Revision Number', dtype: DTYPE.UNSIGNED32 },
{ name: 'Serial Number', dtype: DTYPE.UNSIGNED32, data: '&Obj.serial' },
]},
'1C00': { otype: OTYPE.ARRAY, dtype: DTYPE.UNSIGNED8, name: 'Sync Manager Communication Type', items: [
{ name: 'Max SubIndex' },
{ name: 'Communications Type SM0', value: 1 },
{ name: 'Communications Type SM1', value: 2 },
{ name: 'Communications Type SM2', value: 3 },
{ name: 'Communications Type SM3', value: 4 },
]},
};
return OD;
};
const sdo = 'sdo';
const txpdo = 'txpdo';
const rxpdo = 'rxpdo';
/** EtherCAT Slave Chips that are supported by this web tool */
const SupportedESC = {
AX58100: 'AX58100',
ET1100: 'ET1100',
LAN9252: 'LAN9252',
LAN9253_Beckhoff: 'LAN9253 Beckhoff',
};
/** ESCs that are using reserved bytes for configuration, for example AX58100 configdata reaches 0x0A byte */
const configOnReservedBytes = [SupportedESC.AX58100, SupportedESC.LAN9253_Beckhoff];
//** Form default values */
function getFormDefaultValues() {
return {form: {
VendorName: "ACME EtherCAT Devices",
VendorID: "0x000",
ProductCode: "0x00ab123",
ProfileNo: "5001",
RevisionNumber: "0x002",
SerialNumber: "0x001",
HWversion: "0.0.1",
SWversion: "0.0.1",
EEPROMsize: "2048",
RxMailboxOffset: "0x1000",
TxMailboxOffset: "0x1200",
MailboxSize: "512",
SM2Offset: "0x1600",
SM3Offset: "0x1A00",
TextGroupType: "DigIn",
TextGroupName5: "Digital input",
ImageName: "IMGCBY",
TextDeviceType: "DigIn2000",
TextDeviceName: "2-channel Hypergalactic input superimpermanator",
Port0Physical: "Y",
Port1Physical: "Y",
Port2Physical: " ",
Port3Physical: " ",
ESC: SupportedESC.ET1100,
SPImode: "3",
CoeDetailsEnableSDO: true,
CoeDetailsEnableSDOInfo: true,
CoeDetailsEnablePDOAssign: false,
CoeDetailsEnablePDOConfiguration: false,
CoeDetailsEnableUploadAtStartup: true,
CoeDetailsEnableSDOCompleteAccess: false,
}};
};