86 lines
2.0 KiB
JavaScript
86 lines
2.0 KiB
JavaScript
// Basic init
|
|
const electron = require("electron");
|
|
const { Controller, Tag } = require("ethernet-ip");
|
|
const _ = require("lodash");
|
|
const { app, BrowserWindow, ipcMain } = electron;
|
|
|
|
const tagList = require("./tagList.json");
|
|
|
|
// To avoid being garbage collected
|
|
let mainWindow;
|
|
let PLC;
|
|
|
|
app.on("ready", () => {
|
|
|
|
mainWindow = new BrowserWindow({
|
|
width: 1000,
|
|
height: 1000
|
|
});
|
|
mainWindow.loadURL(`file://${__dirname}/app/index.html`);
|
|
|
|
// Wait for allowing react app to fully load
|
|
// before starting to send initalized data.
|
|
setTimeout(() => {
|
|
initPLC("10.20.4.36", tagList.scan_list);
|
|
}, 2000);
|
|
|
|
|
|
});
|
|
|
|
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) => {
|
|
mainWindow.webContents.send("plc:error", err.message);
|
|
console.log(err);
|
|
});
|
|
}).catch((err) => {
|
|
mainWindow.webContents.send("plc:error", err.message);
|
|
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);
|
|
});
|
|
|