Files
MaxWaterSystem-Electron/main_process.js
2018-04-12 18:33:35 -05:00

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);
});