Deckel dialog 11 руководство

Deckel NC Milling Machine Web Site — Downloads — Deckel NC milling machine site

This is a list of manuals I have available. A lot of them are still available on the internet. If I remembered the location or person that send it to me I …

Deckel, Maho, Aciera, Abene Mills — Discuss Deckel (manual and CNC), Maho (manual only), and other Deckel format mills. Abene too.

FOXON s.r.o. Česká 615/25. 463 12 Liberec 25, Czech Republic +420 484 845 555. [email protected]

GROUND SUPPORT …when it’s your time. Give us a call! (805) 529-2827 The world’s first one page postprocessor: The sample below is a complete 4 …

Some claim you can re-magnetize a magnet by rubbing it with a powerful neodymium magnet. Worth a shot. If not, maybe you could machine a recess for a small …

misc Up. 0 125 bler heck industries TB400 tubing— 0.125″ bler, heck industries TB400 tubing ; 0 125 notcher comaca n 225 epas— 0.125″ notcher, comaca n …

lexikon englisch / deutsch von a-z: a: b: c: d: e: f: g: h: i: j: k: l: m: n: o: p: q: r: s: t: u: v: w: x: y: z: a…

RAZER STARGAZER SUPPORT Support Razer Mamba Tournament Edition Support Razer Diamonback Support Razer Manowar Support Nabu X Support Razer Seirēn …

Up to Word Lists. Common Six-Letter Words. The following list is based on TWL2006 and CSW2007 and lists words that are common to both lists. aahing aaliis …

  • #1

Hi everyone again

I just upgraded my workshop from an small Kao Fong with Mach system to a Deckel Fp3A with Dialog 11

But I did not get any books with it, I have no info how to use the Dialog 11 system! dont even know how to set the zero pints :-)

does anyone know where I can find a copy of the user manual, how to program this machine.

At first the machine dit not run but after putting in the parameters in it it works just fine, but so far only in manual mode… :-)

  • #2

Hi everyone again

I just upgraded my workshop from an small Kao Fong with Mach system to a Deckel Fp3A with Dialog 11

But I did not get any books with it, I have no info how to use the Dialog 11 system! dont even know how to set the zero pints :-)

does anyone know where I can find a copy of the user manual, how to program this machine.

At first the machine dit not run but after putting in the parameters in it it works just fine, but so far only in manual mode… :-)

Parlez-vous français? I have a French Deckel D11 set of manuals I would consider selling.

  • #3

Ha ha French? That will be tough for me!
but what are you asking for it?
send me a PM

Классифицированное объявление

Германия
Dreieich


2449 km


Инструментальный фрезерный станок — универсальный


DECKEL


FP 2 NC / DIALOG 11

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Gebhardshain


2504 km


Панель управления


DECKEL


FP5A DIALOG 11


Звонок

Классифицированное объявление

Германия
Krefeld


2585 km


Инструментальный фрезерный станок — универсальный


DECKEL


FP 2 A / DIALOG 11


Звонок

Классифицированное объявление

Германия
Staufenberg


2372 km


Инструментальный фрезерный станок с ЧПУ


DECKEL


FP4-60 mit CNC Dialog 11


1992


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Kißlegg


2402 km


Крышка FP2 Диалог 11


DECKEL


FP2


1990


хорошее состояние (б/у)


Звонок

Узнайте больше о подержанных машинах

Классифицированное объявление

Германия
Staufenberg


2372 km


Фрезерный станок с ЧПУ


DECKEL


FP 4 CCt mit Dialog 11 + WW


1988


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Gebhardshain


2504 km


Панель управления


DECKEL


FP4CNC DIALOG 3


Звонок

Классифицированное объявление

Германия
Mörsdorf


2224 km


Инструментальный фрезерный станок с ЧПУ


DECKEL


FP 3 NC (Dialog 4)


1982


нудается в ремонте (б/у)

Сертифицированный дилер


Звонок

Германия
Nordrhein-Westfalen, Германия


2434 km


Поворотный стол Фрезерный стол Ø 395 мм 11/60


Deckel


34360-000-0009-01-W01

buyer-protection

Классифицированное объявление

Германия
Staufenberg


2372 km


Универсальный инструментальный фрезерный станок с ЧПУ


Deckel


FP 4 NC mit Dialog 2


1984


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Staufenberg


2372 km


Универсальный инструментальный фрезерный станок с ЧПУ


Deckel


FP 4 NC mit Dialog 4


1985


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Kreis Bergstraße, Deutschland


2459 km


Универсальный стол/стол для агрегатов с диги


DECKEL


2038 — 1100 / passend zu FP 3 + FP 4

Сертифицированный дилер


Звонок

Классифицированное объявление

Италия
Gussago


(Местонахождение дилера)


2443 km


ШЛИФОВАЛЬНЫЕ СТАНКИ — ИНСТРУМЕНТАЛЬНЫЕ ШЛИФОВАЛЬНЫЕ СТАНКИ


Deckel Michael


S11


Звонок

Классифицированное объявление

Германия
Ubstadt-Weiher


2467 km


Инструментальный шлифовальный станок


Deckel


S11


1988


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Bünde


2441 km


Инструментальный фрезерный станок — универсальный


DECKEL


FP 1 Aktiv / TNC 113


Звонок

Классифицированное объявление

Швейцария
Root


2528 km


Универсальный стол


DECKEL


2114

Сертифицированный дилер


Звонок

Siemens  (z.B.: Deckel FP41A) 647 101 940 01 / 6RA4001-1AA01

Siemens  (z.B.: Deckel FP41A) 647 101 940 01 / 6RA4001-1AA01


2

Германия
Nordrhein-Westfalen, Германия


2460 km


Печатная плата Siemens Simoreg-T


Siemens (z.B.: Deckel FP41A)


647 101 940 01 / 6RA4001-1AA01


готовый к использованию (использованный)

buyer-protection

Классифицированное объявление

Германия
Bensheim


2459 km


Запасные части


DECKEL / SIEMENS / BOSCH


FP 3 CC 2811 /


1990


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Ubstadt-Weiher


2467 km


Инструментальный шлифовальный станок


Deckel


S11


1991


отличное состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Венгрия
Hungary


1703 km


Обрабатывающие центры (по вертикали)


DECKEL MAHO


DMC 635V PW


2013


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Румыния
Blaj


1392 km


Фрезерный станок для 4-х метровых рельсов


Friedrich Deckel AG


DZF 2271


Звонок

Классифицированное объявление

Чехия
Kobližná 3, 631 32 Brno-Brno-střed, Tschechien


1889 km


Обрабатывающий центр (вертикальный)


DECKEL MAHO


MAHOMAT 500


1998


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Tuřanka, 627 00 Brno-Slatina, Tschechien


1885 km


Вертикальный обрабатывающий центр


Deckel Maho


DMC 835 V


2006


отличное состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Unterschleißheim


(Местонахождение дилера)


2268 km


Круглый стол


DECKEL-MAHO


unbekannt

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Hessisch Lichtenau


2367 km


Унив. Наклонный поворотный стол


DECKEL


2314-0301

Сертифицированный дилер


Звонок

Классифицированное объявление

Польша
Poland


1719 km


Обрабатывающие центры (по вертикали)


DMG Deckel Maho


DMC 835 V


2007


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Mögglingen


2376 km


Универсальный обрабатывающий центр


DECKEL MAHO DMG


DMU 35 M


1995


отличное состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Kobližná 3, 631 32 Brno-Brno-střed, Tschechien


1889 km


Обрабатывающий центр (универсальный)


DECKEL MAHO


DMU 50 eVolution


2001


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия


2427 km


Универсальные фрезерные и расточный станок


DECKEL


FP 4- 60 T

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Leipzig


2182 km


Обрабатывающий центр — вертикальный


DECKEL MAHO


DMU 60T

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Hessisch Lichtenau


2367 km


Универсальный инструментальный фрезерный станок


DECKEL


FP 3

Сертифицированный дилер


Звонок

Классифицированное объявление

Венгрия
Hungary


1703 km


Обрабатывающие центры (по вертикали)


DECKEL MAHO


DMU 60T


2001


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Unterschleißheim


(Местонахождение дилера)


2268 km


Обрабатывающий центр — универсальный


DECKEL-MAHO


DMC100U duoBlock

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Kobližná 3, 631 32 Brno-Brno-střed, Tschechien


1889 km


Обрабатывающий центр (универсальный)


Deckel Maho


DMU 125 T


2003


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Oelde


2471 km


Обрабатывающий центр — универсальный


DECKEL MAHO


DMU 50 T

Сертифицированный дилер


Звонок

Классифицированное объявление

Латвия
Ulbroka


1599 km


Универсальный фрезерный станок с ЧПУ с 4 осями


DECKEL


FP50UC


1989


готовый к использованию (использованный)


Звонок

Классифицированное объявление

Германия
Hessisch Lichtenau


2367 km


унив. инструмент фрезерный станок


DECKEL


FP 1 — AktivDigital

Сертифицированный дилер


Звонок

Классифицированное объявление

Словения


2063 km


Обрабатывающие центры (по горизонтали)


DECKEL MAHO


DMC 60H


2001


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Aach


2476 km


Универсальный фрезерный и сверлильный станок с ЧПУ


DECKEL MAHO


DMU 80 monoBlock


2006


восстановленные в мастерской (бывшие в употреблении)

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Kobližná 3, 631 32 Brno-Brno-střed, Tschechien


1889 km


Обрабатывающий центр (вертикальный)


Deckel Maho


DMC104V Linear


2005


хорошее состояние (б/у)

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Oelde


(Местонахождение дилера)


2473 km


Обрабатывающий центр — универсальный


DECKEL MAHO


DMU 80 T

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Malsch


2494 km


Фрезерный станок — универсальный


DECKEL


FP 3 NC

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия
Hessisch Lichtenau


2367 km


Фрезерный станок в инструментальном цехе


DECKEL


FP 1

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия


2316 km


Обрабатывающие центры (Универсальный)


DECKEL MAHO


DMC 75 V linear


2006


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Beroun


2069 km


Обрабатывающие центры — вертикальные


DECKEL


DMG 63 LINEAR INV 16976


2002


хорошее состояние (б/у)


Звонок

Классифицированное объявление

Германия
Oelde


2471 km


Обрабатывающий центр — универсальный


DECKEL MAHO


DMU 80 monoBLOCK

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия


2316 km


Обрабатывающие центры (по вертикали)


DECKEL MAHO


DMU 60 E


1999


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Классифицированное объявление

Чехия
Beroun


2069 km


Обрабатывающие центры — вертикальные


Deckel Maho


DMU 60T INV 24790


2001


хорошее состояние (б/у)


Звонок

Классифицированное объявление

Германия
Oelde


2471 km


Обрабатывающий центр — универсальный


DECKEL MAHO


DMU 80 T

Сертифицированный дилер


Звонок

Классифицированное объявление

Германия


2316 km


Обрабатывающие центры (по вертикали)


DECKEL MAHO


DMU 60 MonoBlock


2009


готовый к использованию (использованный)

Сертифицированный дилер


Звонок

Вы будете немедленно и бесплатно получать новые предложения по электронной почте
Вы можете просто завершить запрос на поиск в любое время

  1. Hello!
    Does someone have the Manuals for the Dialog 11 controls on a FP4A?
    The Documentation on our (new) Mill is missing and i can’t find it online anywhere.
    Thanks a lot in advance!
    Chris


  2. Re: Manuals for Dialog 11 (Deckel FP4A)

    Does’nt anyone have those manuals? We still could not find anything…


  3. Re: Manuals for Dialog 11 (Deckel FP4A)

    Quote Originally Posted by ScrapRocketRacing
    View Post

    Does’nt anyone have those manuals? We still could not find anything…

    Hello,
    I do have most manuals for FP4M (9 manuals). I also have the Deckel electrical manual for FP2, 3 and 4A (87 pages just that one)

    My email address is jolula@yahoo.com

    www.doctornumerico.com
    cnc physicians


Similar Threads

  1. Replies: 1

    Last Post: 11-29-2018, 07:45 PM

  2. Replies: 0

    Last Post: 04-27-2016, 04:30 PM

  3. Replies: 2

    Last Post: 07-14-2013, 01:28 AM

  4. DECKEL FP4A

    By terminator in forum Want To Buy…Need help!

    Replies: 2

    Last Post: 08-16-2009, 06:51 PM

Tags for this Thread


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
  • BB code is On
  • Smilies are On
  • [IMG] code is On
  • [VIDEO] code is On
  • HTML code is Off

Forum Rules

/**
  Copyright (C) 2012-2023 by Autodesk, Inc.
  All rights reserved.

  Deckel Dialog 11 post processor configuration.

  $Revision: 44083 9bbc93e5db6952d3bd6ecce596d077ca2c467bf3 $
  $Date: 2023-08-09 09:33:13 $

  FORKID {3EA6DF37-22CE-487c-AEB8-CCC2AD82123E}
*/

description = "Deckel Dialog 11";
vendor = "Deckel";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2023 by Autodesk, Inc.";
certificationLevel = 2;
minimumRevision = 45917;

longDescription = "Post for Deckel Dialog 11. Note that there are quite some difference between the Dialog 11 controls so this post would most likely need further customization to work properly for the specific control.";

extension = "nc";
programNameIsInteger = true;
setCodePage("ascii");

capabilities = CAPABILITY_MILLING | CAPABILITY_MACHINE_SIMULATION;
tolerance = spatial(0.002, MM);

highFeedrate = (unit == IN) ? 100 : 1000;
minimumChordLength = spatial(0.25, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(360);
allowHelicalMoves = true;
allowedCircularPlanes = undefined; // allow any circular motion

// user-defined properties
properties = {
  showSequenceNumbers: {
    title      : "Use sequence numbers",
    description: "'Yes' outputs sequence numbers on each block, 'Only on tool change' outputs sequence numbers on tool change blocks only, and 'No' disables the output of sequence numbers.",
    group      : "formats",
    type       : "enum",
    values     : [
      {title:"Yes", id:"true"},
      {title:"No", id:"false"},
      {title:"Only on tool change", id:"toolChange"}
    ],
    value: "true",
    scope: "post"
  },
  sequenceNumberStart: {
    title      : "Start sequence number",
    description: "The number at which to start the sequence numbers.",
    group      : "formats",
    type       : "integer",
    value      : 1,
    scope      : "post"
  },
  sequenceNumberIncrement: {
    title      : "Sequence number increment",
    description: "The amount by which the sequence number is incremented by in each block.",
    group      : "formats",
    type       : "integer",
    value      : 1,
    scope      : "post"
  },
  separateWordsWithSpace: {
    title      : "Separate words with space",
    description: "Adds spaces between words if 'yes' is selected.",
    group      : "formats",
    type       : "boolean",
    value      : true,
    scope      : "post"
  },
  safeZHeight: {
    title      : "Retract Z value",
    description: "Specifies the amount to retract in Z.",
    group      : "homePositions",
    type       : "number",
    value      : 200,
    scope      : "post"
  },
  safePositionMethod: {
    title      : "Safe Retracts",
    description: "Select your desired retract option. 'Clearance Height' retracts to the operation clearance height.",
    group      : "homePositions",
    type       : "enum",
    values     : [
      {title:"Clearance Height", id:"clearanceHeight"},
      {title:"Specified Z value", id:"specifiedZvalue"}
    ],
    value: "specifiedZvalue",
    scope: "post"
  },
  useToolNumberForCompensation: {
    title      : "Use tool number for compensation",
    description: "Use tool numbers for compensation output.",
    group      : "preferences",
    type       : "boolean",
    value      : true,
    scope      : "post"
  },
  scale: {
    title      : "1000 Scaling for XYZ",
    description: "Enable to scale the XYZ axis by 1000.",
    group      : "preferences",
    type       : "boolean",
    value      : true,
    scope      : "post"
  },
  useG0Star2: {
    title      : "Use G0*2 for rapid moves",
    description: "Enable to use G0*2 for rapid moves in more than one axis.",
    group      : "preferences",
    type       : "boolean",
    value      : false,
    scope      : "post"
  }
};

// wcs definiton
wcsDefinitions = {
  useZeroOffset: false,
  wcs          : [
    {name:"Standard", format:"#", range:[1, 1]}
  ]
};

var oFormat = createFormat({decimals:0});
var gFormat = createFormat({prefix:"G", decimals:0});
var mFormat = createFormat({prefix:"M", decimals:0});
var uFormat = createFormat({prefix:"N*", decimals:0});
var nFormat = createFormat({prefix:"N", decimals:0});

var listXYZFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceSign:true});
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
var feedFormat = createFormat({decimals:0});
var toolFormat = createFormat({decimals:0});
var listOffsetFormat = createFormat({decimals:0, width:2, zeropad:true});
var offsetFormat = createFormat({decimals:0, width:2, zeropad:true, forceSign:true});
var rpmFormat = createFormat({decimals:0, forceSign:true});
var secFormat = createFormat({decimals:1}); // seconds - range 0.1-99.9
var taperFormat = createFormat({decimals:1, scale:DEG});

var xOutput = createOutputVariable({prefix:"X"}, xyzFormat);
var yOutput = createOutputVariable({prefix:"Y"}, xyzFormat);
var zOutput = createOutputVariable({onchange:function() {retracted = false;}, prefix:"Z"}, xyzFormat);
var feedOutput = createOutputVariable({prefix:"F"}, feedFormat);
var sOutput = createOutputVariable({prefix:"S", control:CONTROL_FORCE}, rpmFormat);

// circular output
var iOutput = createOutputVariable({prefix:"I", control:CONTROL_FORCE}, xyzFormat);
var jOutput = createOutputVariable({prefix:"J", control:CONTROL_FORCE}, xyzFormat);
var kOutput = createOutputVariable({prefix:"K", control:CONTROL_FORCE}, xyzFormat);

var gMotionModal = createOutputVariable({}, gFormat); // G0-G3, ...
var gPlaneModal = createOutputVariable({onchange:function () {gMotionModal.reset();}}, gFormat); // modal group 2 // G17-19
var gAbsIncModal = createOutputVariable({}, gFormat); // modal group 3 // G90-91
var gFeedModeModal = createOutputVariable({}, gFormat); // modal group 5 // G93-94
var gCycleModal = createOutputVariable({control:CONTROL_FORCE}, gFormat); // G81, ...

var settings = {
  coolant: {
    // samples:
    // {id: COOLANT_THROUGH_TOOL, on: 88, off: 89}
    // {id: COOLANT_THROUGH_TOOL, on: [8, 88], off: [9, 89]}
    // {id: COOLANT_THROUGH_TOOL, on: "M88 P3 (myComment)", off: "M89"}
    coolants: [
      {id:COOLANT_FLOOD, on:8},
      {id:COOLANT_MIST},
      {id:COOLANT_THROUGH_TOOL},
      {id:COOLANT_AIR},
      {id:COOLANT_AIR_THROUGH_TOOL},
      {id:COOLANT_SUCTION},
      {id:COOLANT_FLOOD_MIST},
      {id:COOLANT_FLOOD_THROUGH_TOOL},
      {id:COOLANT_OFF, off:9}
    ],
    singleLineCoolant: false, // specifies to output multiple coolant codes in one line rather than in separate lines
  },
  retract: {
    cancelRotationOnRetracting: false, // specifies that rotations (G68) need to be canceled prior to retracting
    methodXY                  : undefined, // special condition, overwrite retract behavior per axis
    methodZ                   : undefined, // special condition, overwrite retract behavior per axis
    useZeroValues             : ["G28", "G30"] // enter property value id(s) for using "0" value instead of machineConfiguration axes home position values (ie G30 Z0)
  },
  comments: {
    permittedCommentChars: " abcdefghijklmnopqrstuvwxyz0123456789.,=_-:", // letters are not case sensitive, use option 'outputFormat' below. Set to 'undefined' to allow any character. Set to 'undefined' to allow any character
    prefix               : "(", // specifies the prefix for the comment
    suffix               : ")", // specifies the suffix for the comment
    outputFormat         : "ignoreCase", // can be set to "upperCase", "lowerCase" and "ignoreCase". Set to "ignoreCase" to write comments without additional formatting
    maximumLineLength    : 0 // the maximum number of characters allowed in a line, set to 0 to disable comment output
  },
  maximumSequenceNumber       : 9999, // the maximum sequence number (Nxxx), use 'undefined' for unlimited
  supportsOptionalBlocks      : false, // specifies if optional block output is supported
  outputToolLengthCompensation: false, // specifies if tool length compensation code should be output (G43)
  outputToolLengthOffset      : false, // specifies if tool length offset code should be output (Hxx)
  maximumToolLengthOffset     : 50, // specifies the maximum allowed tool length offset number
  maximumToolDiameterOffset   : 50, // specifies the maximum allowed tool diameter offset number
  maximumToolNumber           : 50 // specifies the maximum allowed tool number
};

// collected state
var nextCycleCall = 1;
var cycleCalls = "";
var programId;

function writeProgramNumber() {
  if (programName) {
    try {
      programId = getAsInt(programName);
    } catch (e) {
      error(localize("Program name must be a number."));
      return;
    }
    if (!((programId >= 1) && (programId <= 99))) {
      error(localize("Program number is out of range. Use program numbers within range 1 to 99."));
      return;
    }
    writeln("&P" + oFormat.format(programId));
  } else {
    error(localize("Program name has not been specified."));
    return;
  }
}

function onOpen() {
  if (machineConfiguration.isMultiAxisConfiguration()) {
    error(localize("This postprocessor does not support multi axis machine configurations."));
  }
  if (getProperty("scale")) {
    listXYZFormat = createFormat({decimals:0, width:6, zeropad:true, forceSign:true, scale:1000});
    xyzFormat = createFormat({decimals:0, scale:1000});
    xOutput.setFormat(xyzFormat);
    yOutput.setFormat(xyzFormat);
    zOutput.setFormat(xyzFormat);
    iOutput.setFormat(xyzFormat);
    jOutput.setFormat(xyzFormat);
    kOutput.setFormat(xyzFormat);
  }

  if (!getProperty("separateWordsWithSpace")) {
    setWordSeparator("");
  }

  gFeedModeModal.disable();

  writeProgramNumber();
  writeln("");

  var tools = getToolTable();
  if (tools.getNumberOfTools() > 0) {
    for (var i = 0; i < tools.getNumberOfTools(); ++i) {
      var tool = tools.getTool(i);
      var l = getProperty("useToolNumberForCompensation") ? tool.number : tool.lengthOffset;
      writeWords("D" + listOffsetFormat.format(l), listXYZFormat.format(0) /*, "( " + getToolTypeName(tool.type) + " )"*/);
    }

    for (var i = 0; i < tools.getNumberOfTools(); ++i) {
      var tool = tools.getTool(i);
      var d = getProperty("useToolNumberForCompensation") ? tool.number : tool.diameterOffset;
      writeWords("D" + listOffsetFormat.format(d + settings.maximumToolDiameterOffset), listXYZFormat.format(tool.diameter / 2) /*, "( " + getToolTypeName(tool.type) + " )"*/);
    }
  }

  writeln("");
  writeln("%");
  writeln("(&P" + oFormat.format(programId) + "/0000)");
  writeComment(programComment);
  validateCommonParameters();
}

function writeToolCall(tool, insertToolCall) {
  if (insertToolCall) {
    forceModals();
  }
  writeStartBlocks(insertToolCall, function () {
    if (!isFirstSection() && insertToolCall) {
      onCommand(COMMAND_COOLANT_OFF); // turn off coolant on tool change
    }
    if (tool.manualToolChange) {
      onCommand(COMMAND_STOP);
      writeComment("MANUAL TOOL CHANGE TO T" + toolFormat.format(tool.number));
    } else {
      if (!isFirstSection() && getProperty("optionalStop") && insertToolCall) {
        onCommand(COMMAND_OPTIONAL_STOP);
      }
      onCommand(COMMAND_LOAD_TOOL);
    }
  });
}

function onSection() {
  var forceSectionRestart = optionalSection && !currentSection.isOptional();
  optionalSection = currentSection.isOptional();
  var insertToolCall = isToolChangeNeeded("number") || forceSectionRestart;
  var newWorkOffset = isNewWorkOffset() || forceSectionRestart;
  var newWorkPlane = isNewWorkPlane() || forceSectionRestart;
  if (insertToolCall /*|| newWorkOffset*/ || newWorkPlane) {
    // writeRetract(Z); // retract
  }

  writeComment(getParameter("operation-comment", ""));

  // tool change
  writeToolCall(tool, insertToolCall);
  startSpindle(tool, insertToolCall);

  // Output modal commands here
  writeBlock(gAbsIncModal.format(90), gPlaneModal.format(17));

  { // pure 3D
    var remaining = currentSection.workPlane;
    if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
      error(localize("Tool orientation is not supported."));
      return;
    }
    setRotation(remaining);
  }

  setCoolant(tool.coolant); // writes the required coolant codes

  forceXYZ();
  forceFeed();

  var code2 = insertToolCall ? ("D" + offsetFormat.format(getProperty("useToolNumberForCompensation") ? tool.number : tool.lengthOffset)) : "";
  // prepositioning
  var initialPosition = getFramePosition(currentSection.getInitialPosition());
  var isRequired = insertToolCall || retracted || (!isFirstSection() && getPreviousSection().isMultiAxis());
  writeInitialPositioning(initialPosition, isRequired, "", code2);
}

function onDwell(seconds) {
  if (seconds > 99.9) {
    warning(localize("Dwelling time is out of range."));
  }
  seconds = clamp(0.1, seconds, 99.9);
  writeBlock(gFormat.format(4), "V" + secFormat.format(seconds));
}

function onSpindleSpeed(spindleSpeed) {
  writeBlock(sOutput.format((tool.clockwise ? 1 : -1) * spindleSpeed));
}

function onCycle() {
  writeBlock(gPlaneModal.format(17));
}

function onCyclePoint(x, y, z) {
  if (!isSameDirection(machineConfiguration.getSpindleAxis(), getForwardDirection(currentSection))) {
    expandCyclePoint(x, y, z);
    return;
  }
  if (isFirstCyclePoint()) {
    repositionToCycleClearance(cycle, x, y, z);

    if (cycleCalls == "") {
      cycleCalls = EOL;
    }

    var F = cycle.feedrate;
    var S = (tool.clockwise ? 1 : -1) * spindleSpeed;
    var P = !cycle.dwell ? 0 : clamp(0.1, cycle.dwell, 99.9); // in seconds

    switch (cycleType) {
    case "drilling":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(81),
          feedOutput.format(F),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "counter-boring":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(81),
          feedOutput.format(F),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          conditional(P > 0, gFormat.format(4)),
          conditional(P > 0, "V" + secFormat.format(P)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "chip-breaking":
      if (cycle.accumulatedDepth < cycle.depth) {
        expandCyclePoint(x, y, z);
      } else {
        cycleCalls +=
          formatWords(
            uFormat.format(nextCycleCall),
            gCycleModal.format(82),
            feedOutput.format(F),
            sOutput.format(S),
            "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
            "Z" + xyzFormat.format(-cycle.incrementalDepth),
            "Z" + xyzFormat.format(machineParameters.chipBreakingDistance),
            conditional(P > 0, gFormat.format(4)),
            conditional(P > 0, "V" + secFormat.format(P)),
            "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
          ) + EOL;
      }
      break;
    case "deep-drilling":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(83),
          feedOutput.format(F),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          "Z" + xyzFormat.format(-cycle.incrementalDepth),
          "Z" + xyzFormat.format(-machineParameters.drillingSafeDistance),
          conditional(cycle.incrementalDepthReduction != 0, "Z" + xyzFormat.format(-cycle.incrementalDepthReduction)),
          conditional(P > 0, gFormat.format(4)),
          conditional(P > 0, "V" + secFormat.format(P)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "tapping":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(84),
          feedFormat.format(tool.getTappingFeedrate()),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "left-tapping":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(84),
          feedFormat.format(tool.getTappingFeedrate()),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "right-tapping":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(84),
          feedFormat.format(tool.getTappingFeedrate()),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "reaming":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(85),
          feedOutput.format(F),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          conditional(P > 0, gFormat.format(4)),
          conditional(P > 0, "V" + secFormat.format(P)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    case "boring":
      cycleCalls +=
        formatWords(
          uFormat.format(nextCycleCall),
          gCycleModal.format(86),
          feedOutput.format(F),
          sOutput.format(S),
          "Z" + xyzFormat.format(-(cycle.retract - cycle.bottom)),
          conditional(P > 0, gFormat.format(4)),
          conditional(P > 0, "V" + secFormat.format(P)),
          "Z" + xyzFormat.format(cycle.clearance - cycle.retract)
        ) + EOL;
      break;
    default:
      expandCyclePoint(x, y, z);
    }
  }

  if (cycleExpanded) {
    expandCyclePoint(x, y, z);
  } else {
    writeBlock(uFormat.format(nextCycleCall), gMotionModal.format(0), xOutput.format(x), yOutput.format(y));
    nextCycleCall += 1;
  }
}

function onCycleEnd() {
}

function onRapid(_x, _y, _z) {
  if (pendingRadiusCompensation >= 0) {
    error(localize("Radius compensation mode cannot be changed at rapid traversal."));
    return;
  }
  var x = xOutput.format(_x);
  var y = yOutput.format(_y);
  var z = zOutput.format(_z);
  if (x || y || z) {
    if (((x ? 1 : 0) + (y ? 1 : 0) + (z ? 1 : 0)) > 1) {
      if (getProperty("useG0Star2")) {
        gMotionModal.reset();
        writeBlock(gMotionModal.format(0) + "*2", x, y, z);
        feedOutput.reset();
      } else {
        writeBlock(gMotionModal.format(1), x, y, z, feedOutput.format(highFeedrate));
      }
    } else {
      writeBlock(gMotionModal.format(0), x, y, z); // axes are not synchronized
      feedOutput.reset();
    }
  }
}

function onLinear(_x, _y, _z, feed) {
  var x = xOutput.format(_x);
  var y = yOutput.format(_y);
  var z = zOutput.format(_z);
  var f = feedOutput.format(feed);
  if (x || y || z) {
    if (pendingRadiusCompensation >= 0) {
      pendingRadiusCompensation = -1;
      writeBlock(gPlaneModal.format(17));
      var d = getProperty("useToolNumberForCompensation") ? tool.number : tool.diameterOffset;
      var useDWord = false;
      switch (radiusCompensation) {
      case RADIUS_COMPENSATION_LEFT:
        writeBlock(gMotionModal.format(1), gFormat.format(41), x, y, conditional(useDWord, "D" + offsetFormat.format(d + settings.maximumToolDiameterOffset)), f, gFormat.format(64), mFormat.format(62));
        break;
      case RADIUS_COMPENSATION_RIGHT:
        writeBlock(gMotionModal.format(1), gFormat.format(42), x, y, conditional(useDWord, "D" + offsetFormat.format(d + settings.maximumToolDiameterOffset)), f, gFormat.format(64), mFormat.format(62));
        break;
      default:
        writeBlock(gMotionModal.format(1), gFormat.format(40), x, y, f);
      }
    } else {
      writeBlock(gMotionModal.format(1), x, y, z, f);
    }
  } else if (f) {
    if (getNextRecord().isMotion()) { // try not to output feed without motion
      feedOutput.reset(); // force feed on next line
    } else {
      writeBlock(gMotionModal.format(1), f);
    }
  }
}

function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
  if (pendingRadiusCompensation >= 0) {
    error(localize("Radius compensation cannot be activated/deactivated for a circular move."));
    return;
  }

  if (false && isHelical()) {
    var t = getParameter("operation:tolerance", tolerance);
    linearize(t);
    return;
  }

  var start = getCurrentPosition();
  switch (getCircularPlane()) {
  case PLANE_XY:
    xOutput.reset();
    yOutput.reset();
    writeBlock(gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x), jOutput.format(cy - start.y), feedOutput.format(feed));
    break;
  case PLANE_ZX:
    zOutput.reset();
    xOutput.reset();
    writeBlock(gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x), kOutput.format(cz - start.z), feedOutput.format(feed));
    break;
  case PLANE_YZ:
    yOutput.reset();
    zOutput.reset();
    writeBlock(gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y), kOutput.format(cz - start.z), feedOutput.format(feed));
    break;
  default:
    var t = getParameter("operation:tolerance", tolerance);
    linearize(t);
  }
}

var mapCommand = {
  COMMAND_END              : 2,
  COMMAND_STOP_SPINDLE     : 5,
  COMMAND_ORIENTATE_SPINDLE: 19
};

function onCommand(command) {
  switch (command) {
  case COMMAND_COOLANT_OFF:
    setCoolant(COOLANT_OFF);
    return;
  case COMMAND_COOLANT_ON:
    setCoolant(tool.coolant);
    return;
  case COMMAND_STOP:
    writeBlock(mFormat.format(0));
    forceSpindleSpeed = true;
    forceCoolant = true;
    return;
  case COMMAND_OPTIONAL_STOP:
    writeBlock(mFormat.format(1));
    forceSpindleSpeed = true;
    forceCoolant = true;
    return;
  case COMMAND_START_SPINDLE:
    forceSpindleSpeed = false;
    writeBlock(sOutput.format((tool.clockwise ? 1 : -1) * spindleSpeed));
    return;
  case COMMAND_LOAD_TOOL:
    writeToolBlock(gMotionModal.format(0), zOutput.format(getProperty("safeZHeight")), "T" + toolFormat.format(tool.number));
    writeComment(tool.comment);
    return;
  case COMMAND_LOCK_MULTI_AXIS:
    return;
  case COMMAND_UNLOCK_MULTI_AXIS:
    return;
  case COMMAND_BREAK_CONTROL:
    return;
  case COMMAND_TOOL_MEASURE:
    return;
  }

  var stringId = getCommandStringId(command);
  var mcode = mapCommand[stringId];
  if (mcode != undefined) {
    writeBlock(mFormat.format(mcode));
  } else {
    onUnsupportedCommand(command);
  }
}

function onSectionEnd() {
  writeBlock(gPlaneModal.format(17));
  if (!isLastSection() && (getNextSection().getTool().coolant != tool.coolant)) {
    setCoolant(COOLANT_OFF);
  }
  forceXYZ();
  forceFeed();
}

function writeRetract() {
  var retract = getRetractParameters.apply(this, arguments);
  if (retract && retract.words.length > 0) {
    if (!retract.retractAxes[2]) {
      error(localize("Retracting in X/Y is not supported."));
    }
    switch (retract.method) {
    case "specifiedZvalue":
      var words = formatWords("Z" + xyzFormat.format(getProperty("safeZHeight")), "D" + offsetFormat.format(getProperty("useToolNumberForCompensation") ? tool.number : tool.lengthOffset));
      writeBlock(gMotionModal.format(0), words); // retract
      break;
    default:
      error(subst(localize("Unsupported safe position method '%1'"), retract.method));
    }
  }
}

function onClose() {
  setCoolant(COOLANT_OFF);
  writeRetract(Z);
  writeBlock(mFormat.format(30));
  write(cycleCalls);
  writeln("");
  writeln("?");
  writeln("0000");
}

// >>>>> INCLUDED FROM include_files/commonFunctions.cpi
// internal variables, do not change
var receivedMachineConfiguration;
var tcp = {isSupportedByControl:getSetting("supportsTCP", true), isSupportedByMachine:false, isSupportedByOperation:false};
var multiAxisFeedrate;
var sequenceNumber;
var optionalSection = false;
var currentWorkOffset;
var forceSpindleSpeed = false;
var retracted = false; // specifies that the tool has been retracted to the safe plane
var operationNeedsSafeStart = false; // used to convert blocks to optional for safeStartAllOperations

function activateMachine() {
  // disable unsupported rotary axes output
  if (!machineConfiguration.isMachineCoordinate(0) && (typeof aOutput != "undefined")) {
    aOutput.disable();
  }
  if (!machineConfiguration.isMachineCoordinate(1) && (typeof bOutput != "undefined")) {
    bOutput.disable();
  }
  if (!machineConfiguration.isMachineCoordinate(2) && (typeof cOutput != "undefined")) {
    cOutput.disable();
  }

  // setup usage of useTiltedWorkplane
  settings.workPlaneMethod.useTiltedWorkplane = getProperty("useTiltedWorkplane") != undefined ? getProperty("useTiltedWorkplane") :
    getSetting("workPlaneMethod.useTiltedWorkplane", false);
  settings.workPlaneMethod.useABCPrepositioning = getProperty("useABCPrepositioning") != undefined ? getProperty("useABCPrepositioning") :
    getSetting("workPlaneMethod.useABCPrepositioning", false);

  if (!machineConfiguration.isMultiAxisConfiguration()) {
    return; // don't need to modify any settings for 3-axis machines
  }

  // identify if any of the rotary axes has TCP enabled
  var axes = [machineConfiguration.getAxisU(), machineConfiguration.getAxisV(), machineConfiguration.getAxisW()];
  tcp.isSupportedByMachine = axes.some(function(axis) {return axis.isEnabled() && axis.isTCPEnabled();}); // true if TCP is enabled on any rotary axis

  // save multi-axis feedrate settings from machine configuration
  var mode = machineConfiguration.getMultiAxisFeedrateMode();
  var type = mode == FEED_INVERSE_TIME ? machineConfiguration.getMultiAxisFeedrateInverseTimeUnits() :
    (mode == FEED_DPM ? machineConfiguration.getMultiAxisFeedrateDPMType() : DPM_STANDARD);
  multiAxisFeedrate = {
    mode     : mode,
    maximum  : machineConfiguration.getMultiAxisFeedrateMaximum(),
    type     : type,
    tolerance: mode == FEED_DPM ? machineConfiguration.getMultiAxisFeedrateOutputTolerance() : 0,
    bpwRatio : mode == FEED_DPM ? machineConfiguration.getMultiAxisFeedrateBpwRatio() : 1
  };

  // setup of retract/reconfigure  TAG: Only needed until post kernel supports these machine config settings
  if (receivedMachineConfiguration && machineConfiguration.performRewinds()) {
    safeRetractDistance = machineConfiguration.getSafeRetractDistance();
    safePlungeFeed = machineConfiguration.getSafePlungeFeedrate();
    safeRetractFeed = machineConfiguration.getSafeRetractFeedrate();
  }
  if (typeof safeRetractDistance == "number" && getProperty("safeRetractDistance") != undefined && getProperty("safeRetractDistance") != 0) {
    safeRetractDistance = getProperty("safeRetractDistance");
  }

  if (machineConfiguration.isHeadConfiguration()) {
    compensateToolLength = typeof compensateToolLength == "undefined" ? false : compensateToolLength;
  }

  if (machineConfiguration.isHeadConfiguration() && compensateToolLength) {
    for (var i = 0; i < getNumberOfSections(); ++i) {
      var section = getSection(i);
      if (section.isMultiAxis()) {
        machineConfiguration.setToolLength(getBodyLength(section.getTool())); // define the tool length for head adjustments
        section.optimizeMachineAnglesByMachine(machineConfiguration, OPTIMIZE_AXIS);
      }
    }
  } else {
    optimizeMachineAngles2(OPTIMIZE_AXIS);
  }
}

function getBodyLength(tool) {
  for (var i = 0; i < getNumberOfSections(); ++i) {
    var section = getSection(i);
    if (tool.number == section.getTool().number) {
      return section.getParameter("operation:tool_overallLength", tool.bodyLength + tool.holderLength);
    }
  }
  return tool.bodyLength + tool.holderLength;
}

function getFeed(f) {
  if (getProperty("useG95")) {
    return feedOutput.format(f / spindleSpeed); // use feed value
  }
  if (typeof activeMovements != "undefined" && activeMovements) {
    var feedContext = activeMovements[movement];
    if (feedContext != undefined) {
      if (!feedFormat.areDifferent(feedContext.feed, f)) {
        if (feedContext.id == currentFeedId) {
          return ""; // nothing has changed
        }
        forceFeed();
        currentFeedId = feedContext.id;
        return settings.parametricFeeds.feedOutputVariable + (settings.parametricFeeds.firstFeedParameter + feedContext.id);
      }
    }
    currentFeedId = undefined; // force parametric feed next time
  }
  return feedOutput.format(f); // use feed value
}

function validateCommonParameters() {
  validateToolData();
  for (var i = 0; i < getNumberOfSections(); ++i) {
    var section = getSection(i);
    if (getSection(0).workOffset == 0 && section.workOffset > 0) {
      error(localize("Using multiple work offsets is not possible if the initial work offset is 0."));
    }
    if (section.isMultiAxis()) {
      if (!section.isOptimizedForMachine() && !getSetting("supportsToolVectorOutput", false)) {
        error(localize("This postprocessor requires a machine configuration for 5-axis simultaneous toolpath."));
      }
      if (machineConfiguration.getMultiAxisFeedrateMode() == FEED_INVERSE_TIME && !getSetting("supportsInverseTimeFeed", true)) {
        error(localize("This postprocessor does not support inverse time feedrates."));
      }
    }
  }
  if (!tcp.isSupportedByControl && tcp.isSupportedByMachine) {
    error(localize("The machine configuration has TCP enabled which is not supported by this postprocessor."));
  }
  if (getProperty("safePositionMethod") == "clearanceHeight") {
    var msg = "-Attention- Property 'Safe Retracts' is set to 'Clearance Height'." + EOL +
      "Ensure the clearance height will clear the part and or fixtures." + EOL +
      "Raise the Z-axis to a safe height before starting the program.";
    warning(msg);
    writeComment(msg);
  }
}

function validateToolData() {
  var _default = 99999;
  var _maximumSpindleRPM = machineConfiguration.getMaximumSpindleSpeed() > 0 ? machineConfiguration.getMaximumSpindleSpeed() :
    settings.maximumSpindleRPM == undefined ? _default : settings.maximumSpindleRPM;
  var _maximumToolNumber = machineConfiguration.isReceived() && machineConfiguration.getNumberOfTools() > 0 ? machineConfiguration.getNumberOfTools() :
    settings.maximumToolNumber == undefined ? _default : settings.maximumToolNumber;
  var _maximumToolLengthOffset = settings.maximumToolLengthOffset == undefined ? _default : settings.maximumToolLengthOffset;
  var _maximumToolDiameterOffset = settings.maximumToolDiameterOffset == undefined ? _default : settings.maximumToolDiameterOffset;

  var header = ["Detected maximum values are out of range.", "Maximum values:"];
  var warnings = {
    toolNumber    : {msg:"Tool number value exceeds the maximum value for tool: " + EOL, max:" Tool number: " + _maximumToolNumber, values:[]},
    lengthOffset  : {msg:"Tool length offset value exceeds the maximum value for tool: " + EOL, max:" Tool length offset: " + _maximumToolLengthOffset, values:[]},
    diameterOffset: {msg:"Tool diameter offset value exceeds the maximum value for tool: " + EOL, max:" Tool diameter offset: " + _maximumToolDiameterOffset, values:[]},
    spindleSpeed  : {msg:"Spindle speed exceeds the maximum value for operation: " + EOL, max:" Spindle speed: " + _maximumSpindleRPM, values:[]}
  };

  var toolIds = [];
  for (var i = 0; i < getNumberOfSections(); ++i) {
    var section = getSection(i);
    if (toolIds.indexOf(section.getTool().getToolId()) === -1) { // loops only through sections which have a different tool ID
      var toolNumber = section.getTool().number;
      var lengthOffset = section.getTool().lengthOffset;
      var diameterOffset = section.getTool().diameterOffset;
      var comment = section.getParameter("operation-comment", "");

      if (toolNumber > _maximumToolNumber && !getProperty("toolAsName")) {
        warnings.toolNumber.values.push(SP + toolNumber + EOL);
      }
      if (lengthOffset > _maximumToolLengthOffset) {
        warnings.lengthOffset.values.push(SP + "Tool " + toolNumber + " (" + comment + "," + " Length offset: " + lengthOffset + ")" + EOL);
      }
      if (diameterOffset > _maximumToolDiameterOffset) {
        warnings.diameterOffset.values.push(SP + "Tool " + toolNumber + " (" + comment + "," + " Diameter offset: " + diameterOffset + ")" + EOL);
      }
      toolIds.push(section.getTool().getToolId());
    }
    // loop through all sections regardless of tool id for idenitfying spindle speeds

    // identify if movement ramp is used in current toolpath, use ramp spindle speed for comparisons
    var ramp = section.getMovements() & ((1 << MOVEMENT_RAMP) | (1 << MOVEMENT_RAMP_ZIG_ZAG) | (1 << MOVEMENT_RAMP_PROFILE) | (1 << MOVEMENT_RAMP_HELIX));
    var _sectionSpindleSpeed = Math.max(section.getTool().spindleRPM, ramp ? section.getTool().rampingSpindleRPM : 0, 0);
    if (_sectionSpindleSpeed > _maximumSpindleRPM) {
      warnings.spindleSpeed.values.push(SP + section.getParameter("operation-comment", "") + " (" + _sectionSpindleSpeed + " RPM" + ")" + EOL);
    }
  }

  // sort lists by tool number
  warnings.toolNumber.values.sort(function(a, b) {return a - b;});
  warnings.lengthOffset.values.sort(function(a, b) {return a.localeCompare(b);});
  warnings.diameterOffset.values.sort(function(a, b) {return a.localeCompare(b);});

  var warningMessages = [];
  for (var key in warnings) {
    if (warnings[key].values != "") {
      header.push(warnings[key].max); // add affected max values to the header
      warningMessages.push(warnings[key].msg + warnings[key].values.join(""));
    }
  }
  if (warningMessages.length != 0) {
    warningMessages.unshift(header.join(EOL) + EOL);
    warning(warningMessages.join(EOL));
  }
}

function forceFeed() {
  currentFeedId = undefined;
  feedOutput.reset();
}

/** Force output of X, Y, and Z. */
function forceXYZ() {
  xOutput.reset();
  yOutput.reset();
  zOutput.reset();
}

/** Force output of A, B, and C. */
function forceABC() {
  aOutput.reset();
  bOutput.reset();
  cOutput.reset();
}

/** Force output of X, Y, Z, A, B, C, and F on next output. */
function forceAny() {
  forceXYZ();
  forceABC();
  forceFeed();
}

/**
  Writes the specified block.
*/
function writeBlock() {
  var text = formatWords(arguments);
  if (!text) {
    return;
  }
  if ((optionalSection || skipBlocks) && !getSetting("supportsOptionalBlocks", true)) {
    error(localize("Optional blocks are not supported by this post."));
  }
  if (getProperty("showSequenceNumbers") == "true") {
    if (sequenceNumber == undefined || sequenceNumber >= settings.maximumSequenceNumber) {
      sequenceNumber = getProperty("sequenceNumberStart");
    }
    if (optionalSection || skipBlocks) {
      if (text) {
        writeWords("/", "N" + sequenceNumber, text);
      }
    } else {
      writeWords2("N" + sequenceNumber, arguments);
    }
    sequenceNumber += getProperty("sequenceNumberIncrement");
  } else {
    if (optionalSection || skipBlocks) {
      writeWords2("/", arguments);
    } else {
      writeWords(arguments);
    }
  }
}

validate(settings.comments, "Setting 'comments' is required but not defined.");
function formatComment(text) {
  var prefix = settings.comments.prefix;
  var suffix = settings.comments.suffix;
  var _permittedCommentChars = settings.comments.permittedCommentChars == undefined ? "" : settings.comments.permittedCommentChars;
  switch (settings.comments.outputFormat) {
  case "upperCase":
    text = text.toUpperCase();
    _permittedCommentChars = _permittedCommentChars.toUpperCase();
    break;
  case "lowerCase":
    text = text.toLowerCase();
    _permittedCommentChars = _permittedCommentChars.toLowerCase();
    break;
  case "ignoreCase":
    _permittedCommentChars = _permittedCommentChars.toUpperCase() + _permittedCommentChars.toLowerCase();
    break;
  default:
    error(localize("Unsupported option specified for setting 'comments.outputFormat'."));
  }
  if (_permittedCommentChars != "") {
    text = filterText(String(text), _permittedCommentChars);
  }
  text = String(text).substring(0, settings.comments.maximumLineLength - prefix.length - suffix.length);
  return text != "" ?  prefix + text + suffix : "";
}

/**
  Output a comment.
*/
function writeComment(text) {
  if (!text) {
    return;
  }
  var comments = String(text).split(EOL);
  for (comment in comments) {
    var _comment = formatComment(comments[comment]);
    if (_comment) {
      writeln(_comment);
    }
  }
}

function onComment(text) {
  writeComment(text);
}

/**
  Writes the specified block - used for tool changes only.
*/
function writeToolBlock() {
  var show = getProperty("showSequenceNumbers");
  setProperty("showSequenceNumbers", (show == "true" || show == "toolChange") ? "true" : "false");
  writeBlock(arguments);
  setProperty("showSequenceNumbers", show);
}

var skipBlocks = false;
function writeStartBlocks(isRequired, code) {
  var safeSkipBlocks = skipBlocks;
  if (!isRequired) {
    if (!getProperty("safeStartAllOperations", false)) {
      return; // when safeStartAllOperations is disabled, dont output code and return
    }
    // if values are not required, but safe start is enabled - write following blocks as optional
    skipBlocks = true;
  }
  code(); // writes out the code which is passed to this function as an argument
  skipBlocks = safeSkipBlocks; // restore skipBlocks value
}

var pendingRadiusCompensation = -1;
function onRadiusCompensation() {
  pendingRadiusCompensation = radiusCompensation;
  if (pendingRadiusCompensation >= 0 && !getSetting("supportsRadiusCompensation", true)) {
    error(localize("Radius compensation mode is not supported."));
    return;
  }
}

function onPassThrough(text) {
  var commands = String(text).split(",");
  for (text in commands) {
    writeBlock(commands[text]);
  }
}

function forceModals() {
  if (arguments.length == 0) { // reset all modal variables listed below
    if (typeof gMotionModal != "undefined") {
      gMotionModal.reset();
    }
    if (typeof gPlaneModal != "undefined") {
      gPlaneModal.reset();
    }
    if (typeof gAbsIncModal != "undefined") {
      gAbsIncModal.reset();
    }
    if (typeof gFeedModeModal != "undefined") {
      gFeedModeModal.reset();
    }
  } else {
    for (var i in arguments) {
      arguments[i].reset(); // only reset the modal variable passed to this function
    }
  }
}

/** Helper function to be able to use a default value for settings which do not exist. */
function getSetting(setting, defaultValue) {
  var result = defaultValue;
  var keys = setting.split(".");
  var obj = settings;
  for (var i in keys) {
    if (obj[keys[i]] != undefined) { // setting does exist
      result = obj[keys[i]];
      if (typeof [keys[i]] === "object") {
        obj = obj[keys[i]];
        continue;
      }
    } else { // setting does not exist, use default value
      if (defaultValue != undefined) {
        result = defaultValue;
      } else {
        error("Setting '" + keys[i] + "' has no default value and/or does not exist.");
        return undefined;
      }
    }
  }
  return result;
}

function getForwardDirection(_section) {
  var forward = undefined;
  var _optimizeType = settings.workPlaneMethod && settings.workPlaneMethod.optimizeType;
  if (_section.isMultiAxis()) {
    forward = _section.workPlane.forward;
  } else if (!getSetting("workPlaneMethod.useTiltedWorkplane", false) && machineConfiguration.isMultiAxisConfiguration()) {
    if (_optimizeType == undefined) {
      var saveRotation = getRotation();
      getWorkPlaneMachineABC(_section, true);
      forward = getRotation().forward;
      setRotation(saveRotation); // reset rotation
    } else {
      var abc = getWorkPlaneMachineABC(_section, false);
      var forceAdjustment = settings.workPlaneMethod.optimizeType == OPTIMIZE_TABLES || settings.workPlaneMethod.optimizeType == OPTIMIZE_BOTH;
      forward = machineConfiguration.getOptimizedDirection(_section.workPlane.forward, abc, false, forceAdjustment);
    }
  } else {
    forward = getRotation().forward;
  }
  return forward;
}

function getRetractParameters() {
  var words = []; // store all retracted axes in an array
  var retractAxes = new Array(false, false, false);
  var method = getProperty("safePositionMethod", "undefined");
  if (method == "clearanceHeight") {
    if (!is3D()) {
      error(localize("Safe retract option 'Clearance Height' is only supported when all operations are along the setup Z-axis."));
    }
    return undefined;
  }
  validate(settings.retract, "Setting 'retract' is required but not defined.");
  validate(arguments.length != 0, "No axis specified for getRetractParameters().");

  for (i in arguments) {
    retractAxes[arguments[i]] = true;
  }
  if ((retractAxes[0] || retractAxes[1]) && !retracted) { // retract Z first before moving to X/Y home
    error(localize("Retracting in X/Y is not possible without being retracted in Z."));
    return undefined;
  }
  // special conditions
  if (retractAxes[0] || retractAxes[1]) {
    method = getSetting("retract.methodXY", method);
  }
  if (retractAxes[2]) {
    method = getSetting("retract.methodZ", method);
  }
  // define home positions
  var useZeroValues = (settings.retract.useZeroValues && settings.retract.useZeroValues.indexOf(method) != -1);
  var _xHome = machineConfiguration.hasHomePositionX() && !useZeroValues ? machineConfiguration.getHomePositionX() : toPreciseUnit(0, MM);
  var _yHome = machineConfiguration.hasHomePositionY() && !useZeroValues ? machineConfiguration.getHomePositionY() : toPreciseUnit(0, MM);
  var _zHome = machineConfiguration.getRetractPlane() != 0 && !useZeroValues ? machineConfiguration.getRetractPlane() : toPreciseUnit(0, MM);
  for (var i = 0; i < arguments.length; ++i) {
    switch (arguments[i]) {
    case X:
      words.push("X" + xyzFormat.format(_xHome));
      xOutput.reset();
      break;
    case Y:
      words.push("Y" + xyzFormat.format(_yHome));
      yOutput.reset();
      break;
    case Z:
      words.push("Z" + xyzFormat.format(_zHome));
      zOutput.reset();
      retracted = (typeof skipBlocks == "undefined") ? true : !skipBlocks;
      break;
    default:
      error(localize("Unsupported axis specified for getRetractParameters()."));
      return undefined;
    }
  }
  return {method:method, retractAxes:retractAxes, words:words};
}

/** Returns true when subprogram logic does exist into the post. */
function subprogramsAreSupported() {
  return typeof subprogramState != "undefined";
}
// <<<<< INCLUDED FROM include_files/commonFunctions.cpi
// >>>>> INCLUDED FROM include_files/startSpindle.cpi

function startSpindle(tool, insertToolCall) {
  if (tool.type != TOOL_PROBE) {
    var spindleSpeedIsRequired = insertToolCall || forceSpindleSpeed || isFirstSection() ||
      rpmFormat.areDifferent(spindleSpeed, sOutput.getCurrent()) ||
      (tool.clockwise != getPreviousSection().getTool().clockwise);

    writeStartBlocks(spindleSpeedIsRequired, function () {
      if (spindleSpeedIsRequired || operationNeedsSafeStart) {
        onCommand(COMMAND_START_SPINDLE);
      }
    });
  }
}
// <<<<< INCLUDED FROM include_files/startSpindle.cpi
// >>>>> INCLUDED FROM include_files/coolant.cpi
var currentCoolantMode = COOLANT_OFF;
var coolantOff = undefined;
var isOptionalCoolant = false;
var forceCoolant = false;

function setCoolant(coolant) {
  var coolantCodes = getCoolantCodes(coolant);
  if (Array.isArray(coolantCodes)) {
    writeStartBlocks(!isOptionalCoolant, function () {
      if (settings.coolant.singleLineCoolant) {
        writeBlock(coolantCodes.join(getWordSeparator()));
      } else {
        for (var c in coolantCodes) {
          writeBlock(coolantCodes[c]);
        }
      }
    });
    return undefined;
  }
  return coolantCodes;
}

function getCoolantCodes(coolant, format) {
  if (!getProperty("useCoolant", true)) {
    return undefined; // coolant output is disabled by property if it exists
  }
  isOptionalCoolant = false;
  if (typeof operationNeedsSafeStart == "undefined") {
    operationNeedsSafeStart = false;
  }
  var multipleCoolantBlocks = new Array(); // create a formatted array to be passed into the outputted line
  var coolants = settings.coolant.coolants;
  if (!coolants) {
    error(localize("Coolants have not been defined."));
  }
  if (tool.type && tool.type == TOOL_PROBE) { // avoid coolant output for probing
    coolant = COOLANT_OFF;
  }
  if (coolant == currentCoolantMode) {
    if (operationNeedsSafeStart && coolant != COOLANT_OFF) {
      isOptionalCoolant = true;
    } else if (!forceCoolant || coolant == COOLANT_OFF) {
      return undefined; // coolant is already active
    }
  }
  if ((coolant != COOLANT_OFF) && (currentCoolantMode != COOLANT_OFF) && (coolantOff != undefined) && !forceCoolant && !isOptionalCoolant) {
    if (Array.isArray(coolantOff)) {
      for (var i in coolantOff) {
        multipleCoolantBlocks.push(coolantOff[i]);
      }
    } else {
      multipleCoolantBlocks.push(coolantOff);
    }
  }
  forceCoolant = false;

  var m;
  var coolantCodes = {};
  for (var c in coolants) { // find required coolant codes into the coolants array
    if (coolants[c].id == coolant) {
      coolantCodes.on = coolants[c].on;
      if (coolants[c].off != undefined) {
        coolantCodes.off = coolants[c].off;
        break;
      } else {
        for (var i in coolants) {
          if (coolants[i].id == COOLANT_OFF) {
            coolantCodes.off = coolants[i].off;
            break;
          }
        }
      }
    }
  }
  if (coolant == COOLANT_OFF) {
    m = !coolantOff ? coolantCodes.off : coolantOff; // use the default coolant off command when an 'off' value is not specified
  } else {
    coolantOff = coolantCodes.off;
    m = coolantCodes.on;
  }

  if (!m) {
    onUnsupportedCoolant(coolant);
    m = 9;
  } else {
    if (Array.isArray(m)) {
      for (var i in m) {
        multipleCoolantBlocks.push(m[i]);
      }
    } else {
      multipleCoolantBlocks.push(m);
    }
    currentCoolantMode = coolant;
    for (var i in multipleCoolantBlocks) {
      if (typeof multipleCoolantBlocks[i] == "number") {
        multipleCoolantBlocks[i] = mFormat.format(multipleCoolantBlocks[i]);
      }
    }
    if (format == undefined || format) {
      return multipleCoolantBlocks; // return the single formatted coolant value
    } else {
      return m; // return unformatted coolant value
    }
  }
  return undefined;
}
// <<<<< INCLUDED FROM include_files/coolant.cpi
// >>>>> INCLUDED FROM include_files/initialPositioning_fanuc.cpi
/**
 * Writes the initial positioning procedure for a section to get to the start position of the toolpath.
 * @param {Vector} position The initial position to move to
 * @param {boolean} isRequired true: Output full positioning, false: Output full positioning in optional state or output simple positioning only
 * @param {String} codes1 Allows to add additional code to the first positioning line
 * @param {String} codes2 Allows to add additional code to the second positioning line (if applicable)
 * @example
  var myVar1 = formatWords("T" + tool.number, currentSection.wcs);
  var myVar2 = getCoolantCodes(tool.coolant);
  writeInitialPositioning(initialPosition, isRequired, myVar1, myVar2);
*/
function writeInitialPositioning(position, isRequired, codes1, codes2) {
  var motionCode = {single:0, multi:0};
  switch (highFeedMapping) {
  case HIGH_FEED_MAP_ANY:
    motionCode = {single:1, multi:1}; // map all rapid traversals to high feed
    break;
  case HIGH_FEED_MAP_MULTI:
    motionCode = {single:0, multi:1}; // map rapid traversal along more than one axis to high feed
    break;
  }
  var feed = (highFeedMapping != HIGH_FEED_NO_MAPPING) ? getFeed(highFeedrate) : "";
  var gOffset = getSetting("outputToolLengthCompensation", true) ? gFormat.format(getOffsetCode()) : "";
  var hOffset = getSetting("outputToolLengthOffset", true) ? hFormat.format(tool.lengthOffset) : "";
  var additionalCodes = [formatWords(codes1), formatWords(codes2)];

  forceModals(gMotionModal);
  writeStartBlocks(isRequired, function() {
    var modalCodes = formatWords(gAbsIncModal.format(90), gPlaneModal.format(17));
    if (typeof disableLengthCompensation == "function") {
      disableLengthCompensation(false); // cancel tool length compensation prior to enabling it, required when switching G43/G43.4 modes
    }

    // multi axis prepositioning with TWP
    if (currentSection.isMultiAxis() && getSetting("workPlaneMethod.prepositionWithTWP", true) && getSetting("workPlaneMethod.useTiltedWorkplane", false) &&
      tcp.isSupportedByOperation && getCurrentDirection().isNonZero()) {
      var W = machineConfiguration.isMultiAxisConfiguration() ? machineConfiguration.getOrientation(getCurrentDirection()) :
        Matrix.getOrientationFromDirection(getCurrentDirection());
      var prePosition = W.getTransposed().multiply(position);
      var angles = W.getEuler2(settings.workPlaneMethod.eulerConvention);
      setWorkPlane(angles);
      writeBlock(modalCodes, gMotionModal.format(motionCode.multi), xOutput.format(prePosition.x), yOutput.format(prePosition.y), feed, additionalCodes[0]);
      cancelWorkPlane();
      writeBlock(gOffset, hOffset, additionalCodes[1]); // omit Z-axis output is desired
      lengthCompensationActive = true;
      forceAny(); // required to output XYZ coordinates in the following line
    } else {
      if (machineConfiguration.isHeadConfiguration()) {
        writeBlock(modalCodes, gMotionModal.format(motionCode.multi), gOffset,
          xOutput.format(position.x), yOutput.format(position.y), zOutput.format(position.z),
          hOffset, feed, additionalCodes
        );
      } else {
        writeBlock(modalCodes, gMotionModal.format(motionCode.multi), xOutput.format(position.x), yOutput.format(position.y), feed, additionalCodes[0]);
        writeBlock(gMotionModal.format(motionCode.single), gOffset, zOutput.format(position.z), hOffset, additionalCodes[1]);
      }
      lengthCompensationActive = true;
    }
    forceModals(gMotionModal);
    if (isRequired) {
      additionalCodes = []; // clear additionalCodes buffer
    }
  });

  validate(lengthCompensationActive, "Tool length compensation is not active."); // make sure that lenght compensation is enabled
  if (!isRequired) { // simple positioning
    var modalCodes = formatWords(gAbsIncModal.format(90), gPlaneModal.format(17));
    if (!retracted && xyzFormat.getResultingValue(getCurrentPosition().z) < xyzFormat.getResultingValue(position.z)) {
      writeBlock(modalCodes, gMotionModal.format(motionCode.single), zOutput.format(position.z), feed);
    }
    forceXYZ();
    writeBlock(modalCodes, gMotionModal.format(motionCode.multi), xOutput.format(position.x), yOutput.format(position.y), feed, additionalCodes);
  }
}

Matrix.getOrientationFromDirection = function (ijk) {
  var forward = ijk;
  var unitZ = new Vector(0, 0, 1);
  var W;
  if (Math.abs(Vector.dot(forward, unitZ)) < 0.5) {
    var imX = Vector.cross(forward, unitZ).getNormalized();
    W = new Matrix(imX, Vector.cross(forward, imX), forward);
  } else {
    var imX = Vector.cross(new Vector(0, 1, 0), forward).getNormalized();
    W = new Matrix(imX, Vector.cross(forward, imX), forward);
  }
  return W;
};
// <<<<< INCLUDED FROM include_files/initialPositioning_fanuc.cpi

Понравилась статья? Поделить с друзьями:
  • Modet турецкие таблетки инструкция по применению на русском языке
  • Руководство газпром газомоторное топливо санкт петербург
  • Стиральная машина занусси аквацикл 850 инструкция
  • Цветное руководство по ремонту автомобилей lada kalina
  • 0503169 инструкция по заполнению 2022 пример