Machining Time, Document Name, Stock Information in NC program
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hi
Since I have seen some common requests on how to add machning time, document name, stock information, user name and nc generated time in the NC programs, So I have came up with this thread and a common places which answers this question.
var infoSettings = {
toolChangeTime : 15, // Default tool change time in seconds.
rapidFeedRate : 10000, // Default Machine rapid feedrate in mm/min.
durationFormat : "HH:MM:SS", // Supported Formats are "HH:MM:SS", "MM:SS" and "SS".
dateFormat : "LOCAL_DATE_TIME", // Supported Formats are "GMT", "LOCAL", "LOCAL_DATE_TIME"
formatSeperator: ": ", // Use this to seperate words.
stockMode : "MILLING", // Outputs the stock information supported formats are "MILLING", "TURNING" and "CUTTING"
headerInfo : { // writes the header information by calling writeHeaderInfos() function, following are the supported information. set false to not output the Information.
documentName : true,
programmerName : true,
programmerEmail: false,
ncGeneratedTime: true,
stockInfo : true,
machiningTime : true
}
};
function writeHeaderInfo() {
var headerInfo = infoSettings.headerInfo;
if (headerInfo.documentName) {
writeComment("Document Name " + sep + getDocumentName());
}
if (headerInfo.programmerName) {
writeComment("Programmer Name " + sep + getUserName());
}
if (headerInfo.programmerEmail) {
writeComment("Programmer Email " + sep + getUserEmail());
}
if (headerInfo.ncGeneratedTime) {
writeComment("Generated At " + sep + getNCGeneratedTime());
}
if (headerInfo.stockInfo) {
writeComment("Stock Information " + sep + getStockInformation());
}
if (headerInfo.machiningTime) {
writeComment("Machning Time " + sep + getMachiningTime());
}
}
function getMachiningTime() {
var rapidDistance = 0;
var cycleTime = infoSettings.toolChangeTime;
var numberOfSections = getNumberOfSections();
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
cycleTime += section.getCycleTime();
rapidDistance += (unit == MM ? section.getRapidDistance() : 25.4 * section.getRapidDistance());
if (i != 0 && isToolChangeNeeded(section, "number")) {
cycleTime += infoSettings.toolChangeTime;
}
}
if (infoSettings.rapidFeedRate > 0) {
cycleTime += rapidDistance / infoSettings.rapidFeedRate * 60;
}
return (convertToTimeFormat(cycleTime));
}
function convertToTimeFormat(cycleTime) {
var format = infoSettings.durationFormat.split(":")[0];
var hours, minutes, result, seconds;
if (format == "HH" || format == "MM") {
hours = Math.floor(cycleTime / 3600);
cycleTime -= (format == "HH") ? hours * 3600 : 0;
minutes = Math.floor(cycleTime / 60);
cycleTime -= minutes * 60;
}
seconds = cycleTime.toFixed(1);
if (format == "HH") {
result = hours + "Hrs " + minutes + "Min " + seconds + "Sec";
} else if (format == "MM") {
result = minutes + "Min " + seconds + "Sec";
} else {
result = seconds + "Sec";
}
return result;
}
function getDocumentName() {
return getGlobalParameter("document-path", "");
}
function getUserName() {
return getGlobalParameter("display-name", "");
}
function getUserEmail() {
return getGlobalParameter("user-email", "");
}
function getNCGeneratedTime() {
var date = new Date(getGlobalParameter("generated-at", ""));
if (infoSettings.dateFormat == "GMT") {
return date.toUTCString();
} else if (infoSettings.dateFormat == "LOCAL_DATE_TIME") {
return (date.toLocaleDateString() + "-" + date.toLocaleTimeString());
} else {
return date.toLocaleString();
}
}
function getStockInformation() {
var format = createFormat({decimals:(unit == MM ? 2 : 3)});
var workpiece = getWorkpiece();
var delta = Vector.diff(workpiece.upper, workpiece.lower);
var unit_ = unit == MM ? "MM" : "IN";
var len = format.format(delta.x) + unit_;
var wid = format.format(delta.y) + unit_;
var height = format.format(delta.z) + unit_;
if (infoSettings.stockMode == "TURNING") {
var dia = format.format(Math.max(delta.x, delta.y)) + unit_;
return ("Diameter=" + dia + " Length=" + height);
} else {
return ("Length=" + len + " Width=" + wid + (infoSettings.stockMode == "MILLING" ? " Height=" : " Thickness=") + height);
}
}
var sep = infoSettings.formatSeperator;
if (typeof settings != "undefined" && settings.comments.permittedCommentChars) {
settings.comments.permittedCommentChars += infoSettings.formatSeperator; // add addtional comment chars
}
if (typeof permittedCommentChars != "undefined") {
permittedCommentChars += infoSettings.formatSeperator;
}
All you can do is copy the above section of code and paste in at the end of your post processor file (.cps)
and call the writeHeaderInfos(); function wherever it is needed
Example on the fanuc post
I have added in the onOpen section
This should output the corresponding heder info in the top of the nc program!
also in the copied section of code the you can use infoSetting object variables to granually control how this needed to be outputed
var infoSettings = {
toolChangeTime : 15, // Default tool change time in seconds.
rapidFeedRate : 10000, // Default Machine rapid feedrate in mm/min.
durationFormat : "HH:MM:SS", // Supported Formats are "HH:MM:SS", "MM:SS" and "SS".
dateFormat : "LOCAL_DATE_TIME", // Supported Formats are "GMT", "LOCAL", "LOCAL_DATE_TIME"
formatSeperator: ": ", // Use this to seperate words.
stockMode : "MILLING", // Outputs the stock information supported formats are "MILLING", "TURNING" and "CUTTING"
headerInfo : { // writes the header information by calling writeHeaderInfos() function, following are the supported information. set false to not output the Information.
documentName : true,
programmerName : true,
programmerEmail: false,
ncGeneratedTime: true,
stockInfo : true,
machiningTime : true
}
};
For example you can control the duration of tool Change time so that you get more accurate machining time,
and maximum rapid feedrate of the machine. and in the duration format you can control how do you want to output the machining time for instance.
here is the short video of how you can make edits to the posts to get this done
Feel free to post in the thread if you feel any other options are missing

Boopathi Sivakumar
Principal Technology Consultant