HSMWorks Post Processor for TRAK TRL 1440EX
I wrote a post processor to post out of HSMWorks to a Trak TRL 1440EX. This was actually the first time that I had used Javascript.
/**
Author: Michael Sobrepera
Usage: Post processor for TRAK TRL 1440 EX -> should work with any ELX controller
Version: .01
Date: 3-Nov-2014
*/
description = "ELX Post";
vendor = "M. Sobrepera";
vendorUrl = "";
legal = "use it as you like, share original and modifications with everyone free of charge or burden; You assume complete responsibility for any damages caused by use of this file";
certificationLevel = 2;
extension = ".cam";
setCodePage("ansi");
programNameIsInteger = true;
capabilites = CAPABILITY_TURNING;
allowedCircularPlanes = undefined; // allow any circular motion
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceSign:true, forceDecimal:true,trimLeadZero:true,trim:true});
var xFormat = createFormat({ decimals:(unit == MM ? 3 : 4), forceSign:true, forceDecimal:true,trimLeadZero:true,trim:true,scale:2}); //TRAK Runs on diameter, not radius, HSM outputs radius.
var xModal = createModal({prefix: " X"}, xFormat);
var zModal = createModal({prefix: " Z"}, xyzFormat);
var iOutput = createVariable({prefix: " I",force:true},xyzFormat);
var kOutput = createVariable({prefix: " K",force:true},xyzFormat);
var feedFormat = createFormat({decimals:2});
var mFormat = createFormat({decimals:0});
var gFormat = createFormat({decimals:0});
var feedModal = createVariable({prefix:" F"}, feedFormat);
var mOutput = createFormat({prefix:"M", decimals:0}, mFormat);
var gOutput = createFormat({prefix: "G", decimals:0}, gFormat);
//might need to make tool number modal
var toolFormat = createFormat({width:2, zeropad: true});
var toolModal = createModal({prefix: " T"},toolFormat);
var speedFormat = createFormat({});
var speedModal = createModal({prefix: "(RPM: ",suffix:")"},speedFormat);
var blockNumber = 0;
/** Writes the specified block.*/
function writeBlock(block) {
writeln(blockNumber + SP + block);
++blockNumber;
}
function writeBlockComment(block) {
writeln("( "+block+" )");
}
function resetModals(){
xModal.reset();
zModal.reset();
speedModal.reset();
toolModal.reset();
}
function resetXZ(){
xModal.reset();
zModal.reset();
}
function onOpen(){
resetModals();
writeBlock(gOutput.format(40)) //Sets the cutter to center (keeps trak control from calculating radius compensation)
//set working units
if(unit==MM){
writeBlock(gOutput.format(21));
}
else{
writeBlock(gOutput.format(20));
}
}
function onComment(comment){
writeBlockComment(comment);
}
function onSection(){
if (currentSection.feedMode == FEED_PER_REVOLUTION) {
feedFormat.setScale(tool.spindleRPM);
feedModal = createModal({prefix:" F"}, feedFormat)
} else {
feedFormat.setScale(1);
feedModal = createModal({prefix:" F"}, feedFormat)
}
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
if (comment) {
writeBlockComment(comment);
}
}
var newTool = toolModal.format(tool.number);
var newSpeed = speedModal.format(tool.spindleRPM);
if(newTool||newSpeed){
writeBlock(newTool+SP+mOutput.format(6)+newSpeed); //goes home, kills spindle, change tool request
}
resetXZ();
}
function onRapid(x,y,z){
var out = xModal.format(x) + zModal.format(z);
if(out){
writeBlock(gOutput.format(0)+out);
}
}
function onLinear(x,y,z,feed){
var out = xModal.format(x) + zModal.format(z);
if(out){
writeBlock(gOutput.format(1)+out+feedModal.format(feed));
}
}
function onCircular(clockwise, cx, cy, cz, x, y, z, feedrate){
//I and K are incremental from center
// clockwise is opposite of normal
var ends = xModal.format(x)+zModal.format(z);
var current = getCurrentPosition();
var centers = iOutput.format(cx-current.getX())+kOutput.format(cz-current.getZ());
if(ends&&clockwise){
writeBlock(gOutput.format(3)+ends+centers);
}
else if(ends&&!clockwise){
writeBlock(gOutput.format(2)+ends+centers);
}
}
function onSpindleSpeed(spindleSpeed){
onSection();
}
function onClose(){
writeBlock(mOutput.format(6)); //kill spindle, go home
writeBlock("%"); //end of file marker
}