import { app, shell, BrowserWindow, ipcMain } from 'electron' import { join } from 'path' import { electronApp, optimizer, is } from '@electron-toolkit/utils' import icon from '../../resources/icon.png?asset' var ModbusRTU = require('modbus-serial') var client = new ModbusRTU() var time // IPC test ipcMain.on('read', (event, message) => { read(event, message) console.log('pong') }) // 通过功能码03读取寄存器 function read(event, message) { client.connectTCP(message.ip, { port: 502 }) // client.connectTCP('192.168.151.59', { port: 502 }) console.log(message.ip) // 循环读取寄存器 time = setInterval(() => { client.readHoldingRegisters(message.startAddress, message.quantity, function (err, data) { if (err) { event.reply('readReply', err) clearInterval(time) return } // 返回数据给渲染进程 event.reply('readReply', data.data) }) }, 1000) } // 停止modbus读取 ipcMain.on('stop', (event) => { console.log('stop') clearInterval(time) // 返回数据给渲染进程 event.reply('readReply', []) }) // 创建主窗口 function createWindow() { // Create the browser window. const mainWindow = new BrowserWindow({ width: 900, height: 670, show: false, autoHideMenuBar: true, ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false } }) mainWindow.on('ready-to-show', () => { mainWindow.show() }) mainWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) return { action: 'deny' } }) // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. if (is.dev && process.env['ELECTRON_RENDERER_URL']) { mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) } else { mainWindow.loadFile(join(__dirname, '../renderer/index.html')) } } // 创建子窗口 function createChildWindow() { let childWindow = new BrowserWindow({ width: 900, height: 670, show: false, autoHideMenuBar: true, ...(process.platform === 'linux' ? { icon } : {}), webPreferences: { preload: join(__dirname, '../preload/index.js'), sandbox: false } }) childWindow.on('ready-to-show', () => { childWindow.show() }) childWindow.webContents.setWindowOpenHandler((details) => { shell.openExternal(details.url) return { action: 'deny' } }) // HMR for renderer base on electron-vite cli. // Load the remote URL for development or the local html file for production. if (is.dev && process.env['ELECTRON_RENDERER_URL']) { childWindow.loadURL(process.env['ELECTRON_RENDERER_URL']) } else { childWindow.loadFile(join(__dirname, '../renderer/login.html')) } } // This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.whenReady().then(() => { // Set app user model id for windows electronApp.setAppUserModelId('com.electron') // Default open or close DevTools by F12 in development // and ignore CommandOrControl + R in production. // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils app.on('browser-window-created', (_, window) => { optimizer.watchWindowShortcuts(window) }) createWindow() app.on('activate', function () { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() }) }) // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits // explicitly with Cmd + Q. app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } }) // In this file you can include the rest of your app"s specific main process // code. You can also put them in separate files and require them here.