Good Morning,
Our machine is the DMG DMU-50 ECO . The control is the SIEMENS 840D sl-840DSL-71. The software is the
NC/NCK V04.05.05.03-HMI 04.05.05.04-SOFTWARE VERSION NCU V04.05+SP05+HF03. And we have those three problems:
Thank you for your help
Bojan
Hi @Anonymous ,
this is the parameter to define only Z as safety plane in CYCLE800 ( = 1 ) at line 664 :
var FR = 1; // 0 = without moving to safety plane, 1 = move to safety plane only in Z, 2 = move to safety plane Z,X,Y
You could add these lines to define rotary axis in retraction only at tool change ( starting from line 1090 ) :
if (newWorkPlane && useMultiAxisFeatures) { if (insertToolCall) { writeBlock("CYCLE800(1,\"DMG\",200000,57,0,0,0,0,0,0,0,0,1,1)"); } else { writeBlock("CYCLE800()"); } }
This is a fixed string to be added in tapping cycle ( at line 1549 ) :
xyzFormat.format(PIT), xyzFormat.format(POSS), xyzFormat.format(SST), xyzFormat.format(SST1)].join(cycleSeparator) + "0,1,0,0,,1.4,,\"ISO_METRIC\",\"M6\",,1,1001002)" ); break;
Please test it carefully and let me know it works as you need.
Hi @andrea.amilo ,
I tried to insert your suggestions in the postp but it doesen't works. Can you take a look on it, to see if I'm doing it right?
thank you
Hi @Anonymous ,
I think you made a good job. You have just to make two small modification and your postprocessor should be ok.
Please have a look at pictures below comparing your postprocessor vs new one.
First modification :
Second modification :
Please let me know if everything is working fine. Thank you.
HI @andrea.amilo ,
the thread it's still not ok(machine interface it's same like before the mod.), and the rotary table goes always in the resting position after every single operation..
the only thing that chenged it's the resting posizion of the spindel. she spindle use only the Z, and that's not ok for us, we would like that the spindle goes in the left upper angle of the machine usig Z and than X and Y.
here you find attached the post, i thing that I execute your suggestions in the correct way
thank you
Hi @Anonymous ,
to avoid that rotary table goes always in ( unwanted ) resting position I think you could just comment 3 lines ( from 1099 to 1101 ) :
if (insertToolCall || newWorkOffset || newWorkPlane) { //*********************************************************** (bojan 10/10/19) // retract to safe plane writeRetract(Z); if (newWorkPlane && useMultiAxisFeatures) { if (insertToolCall) { writeBlock("CYCLE800(1,\"DMG\",200000,57,0,0,0,0,0,0,0,0,1,1)"); } else { writeBlock("CYCLE800()"); } } // if (newWorkPlane && useMultiAxisFeatures) { // setWorkPlane(new Vector(0, 0, 0), false); // reset working plane // } }
To configure the move to safety plane in Z and X/Y you can define proper parameter to 2 , at line 664 :
if (useMultiAxisFeatures) { var cycle800Config = getCycle800Config(); //***********************************************************BSTUDIO ( bojan ho messo z1: 0 09/10/19) (bojan messo var FR=1 10/10/19) var FR = 2; // 0 = without moving to safety plane, 1 = move to safety plane only in Z, 2 = move to safety plane Z,X,Y var TC = properties.cycle800SwivelDataRecord;
Regarding tapping drilling cycles, it seems your modification is good or ( at least ) it seems to write a cycle as I suppose to be done.
Could you please attach here a correct tapping cycles written on the machine ? Not the picture but the mpf file edited on the machine.
Thank you.
If I understand this code correctly you have hard coded thread type/size into post processor. This is madness! What if you want to produce different thread, lets says M10? You would still get M6 pass-though...
xyzFormat.format(SST1)].join(cycleSeparator) + "0,1,0,0,,1.4,,\"ISO_METRIC\",\"M6\",,1,1001002)"
I apologise if my understanding of this code is incorrect. 🙂
Hi @Anonymous,
it is a fixed text set to help me to understand the complete syntax of this cycle.
As I wrote, I would need a working mpf file edited on the machine to have the proper syntax.
In my opinion we could test something like this :
xyzFormat.format(SST1)].join(cycleSeparator) + "0,1,0,0,,1.4,,\"ISO_METRIC\",,,1,1001002)"
removing any thread type/size.
Please let me know what do you think about it.
I have miss understood that, I apologise.
Maybe this example will help you better understand how code should look:
Code posted by post processor is executable and it produces correct threads. But it is not editable on machine. Machine's programGuide (g-code editor) feeds more parameters to cycle84.
Hi @andrea.amilo,
I'm sorry if I took so long to give you an feedback.
*When we correct the wrong and insert the missing info from the post in the machine interface it looks like this:
N865 MCALL CYCLE84(5,0,2,-12,,0,3,,1,0,450,450,0,1,0,1,6,0.12,,"ISO_METRIC","M6",,1,1001002)
*for the rotary table:
as you can see the information it's already there. Am I right?
*for the safty paln of the spindle, we have an free machine tomorrow evening so I'll try if it is ok
thank you soo much
HI @Anonymous ,
regarding movement to safety plane, you are right the lines you have highlighted are already in your postprocessor.
But you have to comment them ( // ) to avoid the movement. So :
} else { writeBlock("CYCLE800()"); } } // if (newWorkPlane && useMultiAxisFeatures) { // setWorkPlane(new Vector(0, 0, 0), false); // reset working plane // } }
For tapping drilling cycles, you migth modify postprocessor in this way :
writeBlock( "MCALL CYCLE84(" + [xyzFormat.format(RTP), xyzFormat.format(RFP), xyzFormat.format(SDIS), xyzFormat.format(DP), ""/*xyzFormat.format(DPR)*/, conditional(DTB > 0, secFormat.format(DTB)), xyzFormat.format(SDAC), ""/*xyzFormat.format(MPIT)*/, xyzFormat.format(PIT), xyzFormat.format(POSS), xyzFormat.format(SST), xyzFormat.format(SST1)].join(cycleSeparator) + ",0,1,0,1,,,,\"ISO_METRIC\",,,1,1001002)" ); break;
It seems to make a cycle similar to your example.
Please test it carefully and let me know.
Maybe this Sinumerik manual which describes cycle84 could help you.
Parameters 19,20,21 can be defined as empty string and machine should still open cycle without any error.
the thread interface it's still not complete. now we got this
N860 MCALL CYCLE84(5, 0, 2, -12, , 0, 3, , 1, 0, 450, 450, 0, 0, 0, 1, 6, 0.12)
Thank You
for the rest I'll try it asap
To get requested thread cycle I would advice following changes:
case "tapping-with-chip-breaking": if (cycle.accumulatedDepth < cycle.depth) { error(localize("Accumulated pecking depth is not supported for canned tapping cycles with chip breaking.")); return; } if (RTP > getCurrentPosition().z) { writeBlock(gMotionModal.format(0), zOutput.format(RTP)); } var SDAC = SDIR; // direction of rotation after end of cycle var MPIT = 0; // thread pitch as thread size var PIT = ((tool.type == TOOL_TAP_LEFT_HAND) ? -1 : 1) * tool.threadPitch; // thread pitch var POSS = 0; // spindle position for oriented spindle stop in cycle (in degrees) var SST = spindleSpeed; // speed for tapping var SST1 = spindleSpeed; // speed for return var _AXN = 0; // tool axis var _PTAB = 0; // must be 0 var _TECHNO = 0; // technology settings var _VARI = 1; // machining type: 0 = tapping full depth, 1 = tapping partial retract, 2 = tapping full retract var _DAM = cycle.incrementalDepth; // incremental depth var _VRT = cycle.chipBreakDistance; // retract distance for chip breaking var _PITM = 0; // string for pitch input (not used) var _PITAB = 0; // string for thread table (not used) var _PITABA = 0; // string for selection from thread table (not used) var GMODE = 0; // reserved (geometrical mode) var DMODE = 1; // display mode var AMODE = 1001002; // alternate mode writeBlock( "MCALL CYCLE84(" + [xyzFormat.format(RTP), xyzFormat.format(RFP), xyzFormat.format(SDIS), xyzFormat.format(DP), "" /*+ xyzFormat.format(DPR)*/, secFormat.format(DTB), xyzFormat.format(SDAC), "" /*+ xyzFormat.format(MPIT)*/, xyzFormat.format(PIT), xyzFormat.format(POSS), xyzFormat.format(SST), xyzFormat.format(SST1), xyzFormat.format(_AXN), xyzFormat.format(_PTAB), xyzFormat.format(_TECHNO), xyzFormat.format(_VARI), xyzFormat.format(_DAM), xyzFormat.format(_VRT), "" /* xyzFormat.format(_PITM) */, "" /* xyzFormat.format(_PITAB) */, "" /* xyzFormat.format(_PITABA) */, "" /* xyzFormat.format(GMODE) */, xyzFormat.format(DMODE), xyzFormat.format(AMODE) ].join(cycleSeparator) + ")" ); break;
Hi @Anonymous ,
this is my cycle configuration and it seems to work properly :
case "tapping": case "left-tapping": case "right-tapping": if (RTP > getCurrentPosition().z) { writeBlock(gMotionModal.format(0), zOutput.format(RTP)); } var SDAC = SDIR; // direction of rotation after end of cycle var MPIT = 0; // thread pitch as thread size var PIT = ((tool.type == TOOL_TAP_LEFT_HAND) ? -1 : 1) * tool.threadPitch; // thread pitch var POSS = 0; // spindle position for oriented spindle stop in cycle (in degrees) var SST = spindleSpeed; // speed for tapping var SST1 = spindleSpeed; // speed for return writeBlock( "MCALL CYCLE84(" + [xyzFormat.format(RTP), xyzFormat.format(RFP), xyzFormat.format(SDIS), xyzFormat.format(DP), ""/*xyzFormat.format(DPR)*/, conditional(DTB > 0, secFormat.format(DTB)), xyzFormat.format(SDAC), ""/*xyzFormat.format(MPIT)*/, xyzFormat.format(PIT), xyzFormat.format(POSS), xyzFormat.format(SST), xyzFormat.format(SST1)].join(cycleSeparator) + ",0,1,0,1,,,,\"ISO_METRIC\",,,1,1001002)" ); break;
Please test it carefully and let me know.
Can't find what you're looking for? Ask the community or share your knowledge.