From 38edc6214b353841a3414a66553446d4008ad54a Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Wed, 15 Oct 2025 21:17:08 -0500 Subject: [PATCH] refactor(plc connection zechetti): added in more logging due to a weird issue with line 7 not sendin --- .../zechettis/plcController.ts | 280 +++++++++--------- 1 file changed, 148 insertions(+), 132 deletions(-) diff --git a/lstV2/server/services/ocp/controller/specialProcesses/zechettis/plcController.ts b/lstV2/server/services/ocp/controller/specialProcesses/zechettis/plcController.ts index cf4e85e..7708185 100644 --- a/lstV2/server/services/ocp/controller/specialProcesses/zechettis/plcController.ts +++ b/lstV2/server/services/ocp/controller/specialProcesses/zechettis/plcController.ts @@ -1,155 +1,171 @@ import { ControllerManager } from "st-ethernet-ip"; +import { createLog } from "../../../../logger/logger.js"; import { getMac } from "../../../utils/getMachineId.js"; import { labelingProcess } from "../../labeling/labelProcess.js"; export const createPlcMonitor = (config: any) => { - let cm: any; - let controllers: any = {}; - let stats: any = {}; - let isRunning = false; + let cm: any; + let controllers: any = {}; + let stats: any = {}; + let isRunning = false; - const nowISO = () => { - return new Date().toISOString(); - }; + const nowISO = () => { + return new Date().toISOString(); + }; - const start = () => { - if (isRunning) return; + const start = () => { + if (isRunning) return; - cm = new ControllerManager(); + cm = new ControllerManager(); - config.controllers.forEach((cfg: any) => { - const plc: any = cm.addController( - cfg.ip, - cfg.slot, - cfg.rpi, - true, - cfg.retrySP || 3000 - ); + config.controllers.forEach((cfg: any) => { + const plc: any = cm.addController( + cfg.ip, + cfg.slot, + cfg.rpi, + true, + cfg.retrySP || 3000, + ); - plc.connect(); - controllers[cfg.id] = plc; + plc.connect(); + controllers[cfg.id] = plc; - // initialize stats - stats[cfg.id] = { - id: cfg.id, - ip: cfg.ip, - slot: cfg.slot, - scanRate: cfg.rpi, - connected: false, - lastConnectedAt: null, - lastDisconnectedAt: null, - reconnectCount: 0, - }; - // Add tags - cfg.tags.forEach((tag: any) => plc.addTag(tag)); + // initialize stats + stats[cfg.id] = { + id: cfg.id, + ip: cfg.ip, + slot: cfg.slot, + scanRate: cfg.rpi, + connected: false, + lastConnectedAt: null, + lastDisconnectedAt: null, + reconnectCount: 0, + }; + // Add tags + cfg.tags.forEach((tag: any) => plc.addTag(tag)); - // Events - plc.on("Connected", () => { - const s = stats[cfg.id]; - s.connected = true; - s.lastConnectedAt = nowISO(); - if (s.lastDisconnectedAt) { - s.reconnectCount++; - } - console.log(`[${cfg.id}] Connected @ ${cfg.ip}:${cfg.slot}`); - }); + // Events + plc.on("Connected", () => { + const s = stats[cfg.id]; + s.connected = true; + s.lastConnectedAt = nowISO(); + if (s.lastDisconnectedAt) { + s.reconnectCount++; + } + createLog( + "info", + "zechette", + "ocp", + `[${cfg.id}] Connected @ ${cfg.ip}:${cfg.slot}`, + ); + }); - plc.on("Disconnected", () => { - const s = stats[cfg.id]; - s.connected = false; - s.lastDisconnectedAt = nowISO(); - console.log(`[${cfg.id}] Disconnected`); - }); + plc.on("Disconnected", () => { + const s = stats[cfg.id]; + s.connected = false; + s.lastDisconnectedAt = nowISO(); + createLog("info", "zechette", "ocp", `[${cfg.id}] Disconnected`); + }); - plc.on("error", (err: any) => { - console.error(`[${cfg.id}] Error:`, err.message); - }); + plc.on("error", (err: any) => { + createLog( + "error", + "zechette", + "ocp", + `[${cfg.id}] Error: ${JSON.stringify(err.message)}`, + ); + }); - plc.on("TagChanged", async (tag: any, prevVal: any) => { - if (tag.value !== 0) { - const time = nowISO(); - if (tag.value === 0) return; - setTimeout(async () => { - if (tag.value === 0) return; - const macId = await getMac(tag.value); - // const { data, error } = (await tryCatch( - // query( - // getCurrentLabel - // .replace( - // "[macId]", - // macId[0]?.HumanReadableId - // ) - // .replace( - // "[time]", - // format(time, "yyyy-MM-dd HH:mm") - // ), - // "Current label data" - // ) - // )) as any; + plc.on("TagChanged", async (tag: any, prevVal: any) => { + if (tag.value !== 0) { + const time = nowISO(); + if (tag.value === 0) return; + setTimeout(async () => { + if (tag.value === 0) return; + const macId = await getMac(tag.value); + // const { data, error } = (await tryCatch( + // query( + // getCurrentLabel + // .replace( + // "[macId]", + // macId[0]?.HumanReadableId + // ) + // .replace( + // "[time]", + // format(time, "yyyy-MM-dd HH:mm") + // ), + // "Current label data" + // ) + // )) as any; - // createLog( - // "info", - // "zechettii", - // "zechettii", - // `${format(time, "yyyy-MM-dd HH:mm")} [${cfg.id}] ${ - // tag.name - // }: ${prevVal} -> ${ - // tag.value - // }, the running number is ${ - // error ? null : data.data[0]?.LfdNr - // }}` - // ); - const zechette = { - line: tag.value.toString(), - printer: cfg.printerId, // this is the id of the zechetti 2 to print we should move this to the db - printerName: cfg.id, - }; - labelingProcess({ zechette: zechette }); - }, 1000); - } - }); - }); + // createLog( + // "info", + // "zechettii", + // "zechettii", + // `${format(time, "yyyy-MM-dd HH:mm")} [${cfg.id}] ${ + // tag.name + // }: ${prevVal} -> ${ + // tag.value + // }, the running number is ${ + // error ? null : data.data[0]?.LfdNr + // }}` + // ); + const zechette = { + line: tag.value.toString(), + printer: cfg.printerId, // this is the id of the zechetti 2 to print we should move this to the db + printerName: cfg.id, + }; + createLog( + "info", + "zechette", + "ocp", + `Date being sent to labeler: ${JSON.stringify(zechette)}`, + ); + labelingProcess({ zechette: zechette }); + }, 1000); + } + }); + }); - isRunning = true; - }; + isRunning = true; + }; - const stop = () => { - if (!isRunning) return; - Object.values(controllers).forEach((plc: any) => { - try { - plc.disconnect(); - } catch {} - }); - controllers = {}; - cm = null; - isRunning = false; - console.log("Monitor stopped"); - }; + const stop = () => { + if (!isRunning) return; + Object.values(controllers).forEach((plc: any) => { + try { + plc.disconnect(); + } catch {} + }); + controllers = {}; + cm = null; + isRunning = false; + console.log("Monitor stopped"); + }; - const restart = () => { - console.log("Restarting the plc(s)"); - stop(); - new Promise((resolve) => setTimeout(resolve, 1500)); - start(); - }; + const restart = () => { + console.log("Restarting the plc(s)"); + stop(); + new Promise((resolve) => setTimeout(resolve, 1500)); + start(); + }; - const status = () => { - const result: any = {}; + const status = () => { + const result: any = {}; - for (const [id, s] of Object.entries(stats)) { - let s: any; - let uptimeMs = null, - downtimeMs = null; - if (s.connected && s.lastConnectedAt) { - uptimeMs = Date.now() - new Date(s.lastConnectedAt).getTime(); - } else if (!s.connected && s.lastDisconnectedAt) { - downtimeMs = - Date.now() - new Date(s.lastDisconnectedAt).getTime(); - } - result[id] = { ...s, uptimeMs, downtimeMs }; - } - return result; - }; + for (const [id, s] of Object.entries(stats)) { + let s: any; + let uptimeMs = null, + downtimeMs = null; + if (s.connected && s.lastConnectedAt) { + uptimeMs = Date.now() - new Date(s.lastConnectedAt).getTime(); + } else if (!s.connected && s.lastDisconnectedAt) { + downtimeMs = Date.now() - new Date(s.lastDisconnectedAt).getTime(); + } + result[id] = { ...s, uptimeMs, downtimeMs }; + } + return result; + }; - return { start, stop, restart, status }; + return { start, stop, restart, status }; };