// Basic init const electron = require("electron"); const { Controller, Tag } = require("ethernet-ip"); const _ = require("lodash"); const { app, BrowserWindow, ipcMain } = electron; // To avoid being garbage collected let mainWindow; let PLC; const tagList = require("./tagList.json"); app.on("ready", () => { mainWindow = new BrowserWindow({}); mainWindow.loadURL(`file://${__dirname}/app/index.html`); initPLC("10.20.4.36", tagList.scan_list); }); function writeTag(tagName, tagValue){ const thisTag = new Tag(tagName); PLC.readTag(thisTag).then(() => { thisTag.value = tagValue; PLC.writeTag(thisTag); }); } function initPLC(ipAddress, tagList){ PLC = new Controller(); const setupTags = new Promise ((resolve) =>{ resolve(_.map(tagList, (tag) => { PLC.subscribe(new Tag( tag )); })); }); setupTags.then(()=>{ PLC.connect(ipAddress, 0).then( () => { const properties = { ...PLC.properties, ipAddress}; mainWindow.webContents.send("plc:connected", properties); PLC.scan().catch((err) => { console.log(err); }); }).catch((err) => { console.log(err); }); PLC.forEach( (tag) => { tag.on("Initialized", (tag) => { // console.log("main_process: Initialized", tag.name, tag.value); mainWindow.webContents.send("tag:valueupdate", tag); }); tag.on("Changed", (tag) => { // console.log("main_process: Changed", tag.name, tag.value); mainWindow.webContents.send("tag:valueupdate", tag); }); }); }); } ipcMain.on("plc:initialize", (event, ipAddress, tagList) =>{ // console.log("plc:initialize", ipAddress, tagList); initPLC(ipAddress, tagList); }); ipcMain.on("tag:write", (event, tagName, value) => { // console.log("tag:write", tagName, value); writeTag(tagName, value); });