Community
HSM Post Processor Forum
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

POST PROCESSOR FOR SIEMENS 840D sl-840DSL-71

15 REPLIES 15
Reply
Message 1 of 16
Anonymous
3251 Views, 15 Replies

POST PROCESSOR FOR SIEMENS 840D sl-840DSL-71

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:

  1. the indicator of the axial rotation it's alwes turned on, from the beginning of the machining till the end, eaven if we are not using the axial rotation. this happens only if in the program there are some axial rotations.
  2.  at the end of an operation with the axial rotation turned on and before the next axial rotation, spindle and the rotary table go in the resting position. we would like that only the spindle goes in the resting position. this in order to save time.
  3. the post pocessor of the thread operation it is not complete. Attached you can see the picture of the machine interface. the Thread1 named,  it's how the machine understand the postprocessor of the cam. the thread2 named one it's how it should be. as you can see there are missing and wrong parameters.

 

Thank you for your help 

Bojan 

15 REPLIES 15
Message 2 of 16
andrea.amilo
in reply to: Anonymous

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.



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make
Message 3 of 16
Anonymous
in reply to: andrea.amilo

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

Message 4 of 16
andrea.amilo
in reply to: Anonymous

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 :

first modification.jpg

 

Second modification :

 

second modification.jpg

 

Please let me know if everything is working fine. Thank you.



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make
Message 5 of 16
Anonymous
in reply to: andrea.amilo

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

Message 6 of 16
andrea.amilo
in reply to: Anonymous

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.

 

 



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make
Message 7 of 16
Anonymous
in reply to: andrea.amilo

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. 🙂

 

Message 8 of 16
andrea.amilo
in reply to: Anonymous

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.

 



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make
Message 9 of 16
Anonymous
in reply to: andrea.amilo

I have miss understood that, I apologise.

 

Maybe this example will help you better understand how code should look:

cycle84.PNG

 

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.

Message 10 of 16
Anonymous
in reply to: andrea.amilo

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:

Annotazione 2019-10-23 101526.png

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

 

 

 

 

Message 11 of 16
andrea.amilo
in reply to: Anonymous

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.

 



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make
Message 12 of 16
Anonymous
in reply to: andrea.amilo

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.

Message 13 of 16
Anonymous
in reply to: andrea.amilo

Hi @andrea.amilo 

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

 

 

Message 14 of 16
Anonymous
in reply to: Anonymous

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;

 

 

Message 15 of 16
Anonymous
in reply to: Anonymous

it is still not working,

thank you 

Message 16 of 16
andrea.amilo
in reply to: Anonymous

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.



Andrea Amilo

Senior Technical Consultant

Autodesk Knowledge Network | Fusion 360 Webinars | Autodesk Make

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report