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.
110 lines
2.8 KiB
TypeScript
110 lines
2.8 KiB
TypeScript
import { Controller, Tag } from "st-ethernet-ip";
|
|
import { createLog } from "../../../../logger/logger.js";
|
|
import { labelerTagRead } from "./plcTags/labelerTag.js";
|
|
import { palletSendTag } from "./plcTags/palletSendTag.js";
|
|
import { strapperFaults } from "./plcTags/strapperFault.js";
|
|
|
|
let PLC = new Controller();
|
|
let isDycoRunning = false;
|
|
|
|
// PLC address
|
|
let plcAddress = "10.44.5.4";
|
|
let isReading = false;
|
|
// Initialize the interval variable outside the function
|
|
let plcCycle: any;
|
|
let plcInterval = 500;
|
|
|
|
// Create Tag Instances
|
|
const labelerTag: any = new Tag("labeler.line_info");
|
|
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." };
|
|
|
|
// 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;
|
|
|
|
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);
|
|
|
|
// 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}`,
|
|
);
|
|
// 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." };
|
|
|
|
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.",
|
|
};
|
|
}
|
|
};
|