From e8a2ef8b859574f5bebe2ee3694c0e8e00b6d38f Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Tue, 30 Dec 2025 10:55:28 -0600 Subject: [PATCH] refactor(ocp): plc reading changes to disconnect and reconnect it was found that there were some errors that spammed the log and caused the server to actually stop responding and crash weirdly so added a disconnect and reconnect back. so we can figure out whats going on. --- .../specialProcesses/dyco/plcConnection.ts | 146 +++++++++--------- 1 file changed, 76 insertions(+), 70 deletions(-) diff --git a/lstV2/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts b/lstV2/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts index b0bf5f5..aa4e9be 100644 --- a/lstV2/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts +++ b/lstV2/server/services/ocp/controller/specialProcesses/dyco/plcConnection.ts @@ -20,84 +20,90 @@ const palletSend = new Tag("Zone_6.Ready_to_Send"); const strapperError = new Tag("Zone_3.Strapper_Faulted"); export const dycoConnect = async () => { - // if we crash or start over reset the timers so we dont get duplicates - clearInterval(plcCycle); - if (isDycoRunning) - return { success: false, message: "Dyco is already connected." }; + // if we crash or start over reset the timers so we dont get duplicates + clearInterval(plcCycle); + if (isDycoRunning) + return { success: false, message: "Dyco is already connected." }; - // Remove all listeners before adding a new one to prevent memory leaks - PLC.removeAllListeners("error"); + // Remove all listeners before adding a new one to prevent memory leaks + PLC.removeAllListeners("error"); - try { - await PLC.connect(plcAddress, 0).then(async () => { - createLog("info", "dyco", "ocp", `We are connected to the dyco.`); - isDycoRunning = true; + try { + await PLC.connect(plcAddress, 0).then(async () => { + createLog("info", "dyco", "ocp", `We are connected to the dyco.`); + isDycoRunning = true; - plcCycle = setInterval(async () => { - if (isReading) { - createLog( - "debug", - "dyco", - "ocp", - "Skipping cycle: previous read still in progress." - ); - return; - } - isReading = true; // Set flag - try { - await PLC.readTag(labelerTag); - await PLC.readTag(palletSend); - await PLC.readTag(strapperError); + plcCycle = setInterval(async () => { + if (isReading) { + createLog( + "debug", + "dyco", + "ocp", + "Skipping cycle: previous read still in progress.", + ); + return; + } + isReading = true; // Set flag + try { + await PLC.readTag(labelerTag); + await PLC.readTag(palletSend); + await PLC.readTag(strapperError); - // strapper check - strapperFaults(strapperError); + // strapper check + strapperFaults(strapperError); - // send the labeler tag data over - labelerTagRead(labelerTag); + // send the labeler tag data over + labelerTagRead(labelerTag); - // send the end of line check over. - palletSendTag(palletSend); - } catch (error: any) { - createLog( - "error", - "dyco", - "ocp", - `Error reading PLC tag: ${error.message}` - ); - } finally { - isReading = false; // Reset flag - } - }, plcInterval); - }); - } catch (error) { - createLog( - "error", - "dyco", - "ocp", - `There was an error in the dyco: ${error}` - ); - await PLC.disconnect(); - isDycoRunning = false; - } + // send the end of line check over. + palletSendTag(palletSend); + } catch (error: any) { + createLog( + "error", + "dyco", + "ocp", + `Error reading PLC tag: ${error.message}`, + ); + // if we error out we want to disconnect and reconnect + closeDyco(); + setTimeout(() => { + createLog("info", "dyco", "ocp", `Reconnecting to the dyco`); + dycoConnect(); + }, 2 * 1000); + } finally { + isReading = false; // Reset flag + } + }, plcInterval); + }); + } catch (error) { + createLog( + "error", + "dyco", + "ocp", + `There was an error in the dyco: ${error}`, + ); + await PLC.disconnect(); + isDycoRunning = false; + } }; export const closeDyco = async () => { - if (!isDycoRunning) - return { success: false, message: "Dyco is not connected." }; + if (!isDycoRunning) + return { success: false, message: "Dyco is not connected." }; - console.log(`Closing the connection`); - try { - await PLC.disconnect(); - isDycoRunning = false; - return { - success: true, - message: "Dyco Connection is now closed.", - }; - } catch (error) { - console.log(error); - return { - success: false, - message: "There was an error closing the dyco connection.", - }; - } + console.log(`Closing the connection`); + try { + await PLC.disconnect(); + isDycoRunning = false; + return { + success: true, + message: "Dyco Connection is now closed.", + }; + } catch (error) { + console.log(error); + return { + success: false, + message: "There was an error closing the dyco connection.", + }; + } };