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.", + }; + } };