Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
ddfaec0
feat: add EtherCAT device discovery and interface scan
marconetsf Feb 4, 2026
078f40f
feat: add EtherCAT ESI repository and device configuration UI
marconetsf Feb 5, 2026
a9e3d66
fix: improve repository table scroll and show channel counts instead …
marconetsf Feb 5, 2026
d73e20d
feat: add ESI XML file persistence to project directory
marconetsf Feb 5, 2026
69810ae
feat: optimize ESI XML parsing with lazy loading and sequential upload
marconetsf Feb 6, 2026
f459633
fix: replace individual error banners with collapsible summary
marconetsf Feb 6, 2026
335e76b
fix: add loading feedback to Clear All button in ESI repository
marconetsf Feb 6, 2026
b0cf48e
fix: address code review issues in ESI subsystem
marconetsf Feb 9, 2026
017982f
feat: add EtherCAT ESI repository and device configuration UI (#588)
marconetsf Feb 9, 2026
83eb1d5
feat: add channel mapping with IEC 61131-3 located variables for Ethe…
marconetsf Feb 9, 2026
681d106
feat: persist EtherCAT devices in Zustand store and generate ethercat…
marconetsf Feb 9, 2026
40e4bc9
feat: add default EtherCAT slave configuration factory
marconetsf Feb 10, 2026
cc0d813
feat: enrich EtherCAT device persistence with full PDO/channel data f…
marconetsf Feb 10, 2026
603f181
feat: add EtherCAT master network interface and cycle time configuration
marconetsf Feb 11, 2026
448c8b0
feat: add watchdog timeout cycles to EtherCAT master configuration
marconetsf Feb 11, 2026
baf61d9
fix: allow clearing numeric inputs in EtherCAT master settings
marconetsf Feb 11, 2026
01c3c39
feat: refactor EtherCAT channel mapping table with alias support and …
marconetsf Feb 12, 2026
dadfbe1
refactor: simplify EtherCAT channel mapping table columns
marconetsf Feb 12, 2026
b8483ab
refactor: use generic plugin-command API for EtherCAT scan
marconetsf Feb 18, 2026
fcc521f
feat: add SDO/CoE Object Dictionary support to EtherCAT editor
marconetsf Feb 26, 2026
a660468
refactor: group SDO parameters by parent object with collapsible sect…
marconetsf Mar 3, 2026
68703ee
feat: add EtherCAT runtime status monitoring panel
marconetsf Mar 4, 2026
0ce2bb9
feat: add float/double data type support for SDO parameter values
marconetsf Mar 11, 2026
edd059f
refactor: restructure EtherCAT editor UI with tabbed layout
marconetsf Mar 11, 2026
3a6acc1
refactor: remove unused config fields and add full slave config to ru…
marconetsf Mar 25, 2026
23dcfc0
merge: integrate epic/ethercat-configuration into feat/ethercat-sdo-c…
marconetsf Mar 25, 2026
f87367b
fix: address code review issues in EtherCAT subsystem
marconetsf Mar 25, 2026
f6645fc
fix: address CodeRabbit critical/major review issues
marconetsf Mar 26, 2026
52b8231
fix: address remaining CodeRabbit review issues
marconetsf Mar 26, 2026
fc91224
refactor: consolidate EtherCAT POST handlers with token refresh support
marconetsf Mar 26, 2026
4bde73c
fix: improve keyboard accessibility in EtherCAT editor components
marconetsf Mar 26, 2026
5a83fa7
merge: integrate latest development (simulator, file watcher, binary …
marconetsf Mar 26, 2026
2caea65
refactor: address PR #704 review — deduplicate EtherCAT device config…
marconetsf Mar 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions configs/webpack/webpack.config.renderer.dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ const configuration: ICustomConfiguration = {
configType: 'flat',
extensions: ['ts', 'tsx'],
eslintPath: 'eslint/use-at-your-own-risk',
cache: false,
}),
],

Expand Down
63 changes: 63 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"setup:binaries": "ts-node scripts/download-binaries.ts",
"package": "ts-node scripts/clean.js dist && npm run build && electron-builder build --publish never && npm run build:dll",
"rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app",
"prestart": "ts-node scripts/download-binaries.ts && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./configs/webpack/webpack.config.main.dev.ts",
"prestart": "rimraf configs/dll/tsconfig.tsbuildinfo && ts-node scripts/download-binaries.ts && cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./configs/webpack/webpack.config.main.dev.ts",
"start:dev": "ts-node scripts/check-port-in-use.js && npm run prestart && npm run start:renderer",
"start:main": "concurrently -k \"cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --watch --config ./configs/webpack/webpack.config.main.dev.ts\" \"electronmon .\"",
"start:preload": "cross-env NODE_ENV=development TS_NODE_TRANSPILE_ONLY=true webpack --config ./configs/webpack/webpack.config.preload.dev.ts",
Expand Down Expand Up @@ -64,6 +64,7 @@
"electron-store": "^8.1.0",
"electron-updater": "^6.1.4",
"embla-carousel-react": "^8.0.0-rc17",
"fast-xml-parser": "^5.3.4",
"i18next": "^23.5.1",
"immer": "^10.1.1",
"lodash": "^4.17.21",
Expand Down
24 changes: 24 additions & 0 deletions src/main/modules/compiler/compiler-module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import type { DeviceConfiguration, DevicePin } from '@root/types/PLC/devices'
import { XmlGenerator } from '@root/utils'
import { type CppPouData as CppPouDataCode, generateCBlocksCode } from '@root/utils/cpp/generateCBlocksCode'
import { type CppPouData as CppPouDataHeader, generateCBlocksHeader } from '@root/utils/cpp/generateCBlocksHeader'
import { generateEthercatConfig } from '@root/utils/ethercat/generate-ethercat-config'
import { generateModbusMasterConfig } from '@root/utils/modbus/generate-modbus-master-config'
import { generateModbusSlaveConfig } from '@root/utils/modbus/generate-modbus-slave-config'
import { generateOpcUaConfig, OpcUaConfigError } from '@root/utils/opcua'
Expand Down Expand Up @@ -1311,6 +1312,24 @@ class CompilerModule {
}
}

async handleGenerateEthercatConfig(
sourceTargetFolderPath: string,
projectData: ProjectState['data'],
handleOutputData: HandleOutputDataCallback,
): Promise<void> {
const ethercatConfig = generateEthercatConfig(projectData.remoteDevices)

if (ethercatConfig) {
const confFolderPath = join(sourceTargetFolderPath, 'conf')
await mkdir(confFolderPath, { recursive: true })
const configFilePath = join(confFolderPath, 'ethercat.json')
await writeFile(configFilePath, ethercatConfig, 'utf-8')
handleOutputData('Generated conf/ethercat.json', 'info')
} else {
handleOutputData('No EtherCAT devices configured, skipping ethercat.json generation', 'info')
}
}

async embedCBlocksInProgramSt(
sourceTargetFolderPath: string,
handleOutputData: HandleOutputDataCallback,
Expand Down Expand Up @@ -1745,6 +1764,11 @@ class CompilerModule {
_mainProcessPort.postMessage({ logLevel, message: data })
})

// Generate EtherCAT config for Runtime v4
await this.handleGenerateEthercatConfig(sourceTargetFolderPath, projectData, (data, logLevel) => {
_mainProcessPort.postMessage({ logLevel, message: data })
})

_mainProcessPort.postMessage({
logLevel: 'info',
message: 'Compressing source files for OpenPLC Runtime v4...',
Expand Down
Loading
Loading