Uprava post processoru Fusionu - funkce onLinear

seriál článků o fusion 360 a lokalizace
Odpovědět
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

8. 10. 2023, 6:28

Ahojte, jsem ztracen (dost na to abych hledal pomoc :D)

Potřebuju následující: Nějaký vstup (jméno operace(číslo 101 - 124), specifický komentář(číslo 101 - 124 + něco jako keyword třeba), cokoli ...). Při splnění tohoto vstupu by postprocessor (funkce onLinear) generoval místo pevné souřadnice pro proměnnou "z" # + to číslo z komentáře.

U cyklů jsem to rozchodil, ale tam to funguje jinak. Tady to musím upravit ve funkci onLinear ...

Nejde mi získat správný formát vstupu jména operace nebo komentáře u toho programu ... Nevím jakou funkcí nebo parametrem ten vstup získat. V manuálu konrétně o tom toho úplně moc není.

Věděl by někdo ?

Kód: Vybrat vše

function onLinear(_x, _y, _z, feed) {
  var x = xOutput.format(_x);
  var y = yOutput.format(_y);
  var z = zOutput.format(_z);
  var f = getFeed(feed);
  if (x || y || z) {
    if (pendingRadiusCompensation >= 0) {
      pendingRadiusCompensation = -1;
      var d = tool.diameterOffset;
      if (d > 999) {
        warning(localize("The diameter offset exceeds the maximum value."));
      }
      writeBlock(gPlaneModal.format(17));
      switch (radiusCompensation) {
      case RADIUS_COMPENSATION_LEFT:
        dOutput.reset();
        writeBlock(gMotionModal.format(1), gFormat.format(41), x, y, z, dOutput.format(d), f);
        break;
      case RADIUS_COMPENSATION_RIGHT:
        dOutput.reset();
        writeBlock(gMotionModal.format(1), gFormat.format(42), x, y, z, dOutput.format(d), f);
        break;
      default:
        writeBlock(gMotionModal.format(1), gFormat.format(40), x, y, z, f);
      }
    } else {
      writeBlock(gMotionModal.format(1), x, y, z, f);
    }
  } else if (f) {
    if (getNextRecord().isMotion()) { // try not to output feed without motion
      forceFeed(); // force feed on next line
    } else {
      writeBlock(gMotionModal.format(1), f);
    }
  }
}
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

8. 10. 2023, 6:53

Lukas_2 píše: 8. 10. 2023, 6:28 U cyklů jsem to rozchodil,
Můžeš ukázat jak?
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

8. 10. 2023, 7:14

Thomeeque píše: 8. 10. 2023, 6:53
Lukas_2 píše: 8. 10. 2023, 6:28 U cyklů jsem to rozchodil,
Můžeš ukázat jak?
Vlastně jsem zkopíroval funkci getCommonCycle a udělal novou > getParametricCycle. Vytviřil pro ni nový zOutput s prefixem #. Pak vstup ze jména operace porovná jestli se rovná "#521" (tady mi to ten vstup jména operace bere, ve funkci onLinear mi to nefunguje bůh ví proč, asi mi to prostě nenajde ten string nebo tak (nevím přesně, hrál jsme si s hodně možnostmi jak to rozjet, nemám to teď v hlavě...)). V tom kódu je ještě něco navíc, je to WIP no :D Potřebuju to pro navrtávání, takže to mám jen pro case "drilling" ...

Kód: Vybrat vše

function getParametricCycle(x, y, z, r, c) {
  var zOutput1 = createVariable({onchange: function() {retracted = false;}, prefix:"Z#"}, xyzFormat);
  forceXYZ(); // force xyz on first drill hole of any cycle
  if (incrementalMode) {
    zOutput.format(c);
    return [xOutput.format(x), yOutput.format(y),
      "Z" + xyzFormat.format(z - r),
      "R" + xyzFormat.format(r - c)];
  } else {
    return [xOutput.format(x), yOutput.format(y),

      zOutput1.format(z),
      "R" + xyzFormat.format(r)];
  }
}

Kód: Vybrat vše

    var F = 516; //uprava - "F" nahrazeno za 516 - cislo parametru pro parametric cycle;
    if (properties.useG95) {
      F /= spindleSpeed;
    }
    var P = !cycle.dwell ? 0 : clamp(1, cycle.dwell * 1000, 99999999); // in milliseconds

    var forceCycle = false;
    switch (cycleType) {
    case "drilling":
      var feedOutput1 = createVariable({prefix:"F#"}, feedFormat); // uprava - pridano
      var comment = getParameter("operation-comment");
      //comment = "#521"
      if (comment == "#521") {
        useCycle = getParametricCycle
        z = 521;
      } else {
        useCycle = getCommonCycle
      };

      writeBlock(
        gRetractModal.format(98), gCycleModal.format(81),
        useCycle(x, y, z, cycle.retract, cycle.clearance), //uprava - z "getCommonCycle()"
        feedOutput1.format(F) //uprava - na parametric feed
      );
      var feedOutput1 = createVariable({prefix:"F"}, feedFormat); //uprava - pridano - vraci prefix zpet na F 
      break;
edit: koukám na ten kód a feedOutput je špatně. Takhle to "F" bude vždy generovat jako "F#" (taky parametricky).
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

8. 10. 2023, 8:24

Ještě doplním že to mám pro to aby některé parametry pro posuvy, hloubka navrtání, hloubka gravírování a další... to načítalo ze stroje. Proto v některých případech potřebuju generovat místo pevné souřadnice variables (#)...
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

8. 10. 2023, 9:22

Mě toto funguje (viz blok if (z) { ... }), jen nevím, jestli je to to, co chceš:

Kód: Vybrat vše

function onLinear(_x, _y, _z, feed) {
  if (pendingRadiusCompensation >= 0) {
    xOutput.reset();
    yOutput.reset();
  }
  var x = xOutput.format(_x);
  var y = yOutput.format(_y);
  var z = zOutput.format(_z);
  var f = getFeed(feed);

  if (z) {
    var comment = getParameter('operation-comment');
    var match = comment.match(/^z#(\d+)$/i);

    if (match) {
      z = 'Z#' + match[1];
    }
  }

  if (x || y || z) {
  ... dále již bez úprav ...
Screenshot 2023-10-08 at 22.16.35.png

Jinak jsem si všiml, že se to musí spustit víckrát, než zaberou poslední změny v cps, asi nějaká cache.

T.
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

9. 10. 2023, 7:21

Ano to je ono. Ještě to musí F# generovat pouze když jede do materiálu. Takže do podmínky přidat směr, bottom height nebo něco takového ...
Odpoledne, večer na to kouknu.
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

12. 10. 2023, 6:44

Tak bych to rád ještě otevřel. Jde mi ideáně o toto. Každopádně takle to nefunguje. Ale záměr je si myslím jasný. Máte někdo nápad či zkušenost ? :)

Kód: Vybrat vše

  var strategy = getParameter("operation-strategy");
  if (strategy == "trace" && MOVEMENT_PLUNGE == true) {
    var z = zOutput.format("#Z101");
  } else {
    var z = zOutput.format(_z);
  }
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

12. 10. 2023, 7:25

Kód: Vybrat vše

  var strategy = getParameter("operation-strategy");
  var z = (strategy == "trace" && MOVEMENT_PLUNGE) ? "Z#101" : zOutput.format(_z);
Jinak je slušnost poprosit a poděkovat..
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

12. 10. 2023, 7:56

Děkuju, vážím si pomoci. Děkuju.
Snažím se nad tím přemýšlet a zapojovat chatbota, ať otravuju co nejméně. Každopádně ani tohle nefunguje. Vždy to generuje souřadnici ...
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

12. 10. 2023, 8:15

Pak asi neplatí ta podmínka, buď strategy není "trace" a/nebo MOVEMENT_PLUNGE není true(thy).

Můžeš si to vypsat do výsledného kódu ve formě komentářů (nevím, jestli je tam i nějaká elegantnější možnost debugování):

Kód: Vybrat vše

  var strategy = getParameter("operation-strategy");
  
  writeComment("strategy = " + strategy);
  writeComment("MOVEMENT_PLUNGE = " + MOVEMENT_PLUNGE);  
Btw. u mě (v tom onLinear) je MOVEMENT_PLUNGE číslo (10).

Screenshot 2023-10-12 at 21.20.05.png

EDIT: Lepší je použít writeln, komentář ten text dost silně modifikuje. Možná pak gcode nebude validní, ale o to v této fázi nejde.

Kód: Vybrat vše

  var strategy = getParameter("operation-strategy");

  writeln("; strategy: " + strategy);
  writeln("; MOVEMENT_PLUNGE: " + MOVEMENT_PLUNGE);
Výstup např.

Kód: Vybrat vše

; strategy: contour2d
; MOVEMENT_PLUNGE: 10
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

12. 10. 2023, 8:38

Když já zkusim Trace, tak strategy je "path3d".

Screenshot 2023-10-12 at 21.37.08.png
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

13. 10. 2023, 5:09

Teď jsem to upravil a funguje to. Skvělý, mockrát děkuju Thomeeque
Tohle mi teď udělalo mega radost :D
Výstřižek.PNG
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Uživatelský avatar
Thomeeque
Příspěvky: 8913
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

13. 10. 2023, 5:31

Tak to mě těší, rádo se stalo :) Jen mě trochu zaráží, že ti funguje to #Z101. (mělo by být Z#101), asi si to ten systém umí nějak přebrat (nebo je to nějaká novinka, kterou ještě neznám :D). Jaký systém používáš?
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Lukas_2
Příspěvky: 529
Registrován: 6. 11. 2017, 3:58
Kontaktovat uživatele:

13. 10. 2023, 5:34

Thomeeque píše: 13. 10. 2023, 5:31 Tak to mě těší, rádo se stalo :) Jen mě trochu zaráží, že ti funguje to #Z101. (mělo by být Z#101), asi si to ten systém umí nějak přebrat (nebo je to nějaká novinka, kterou ještě neznám :D). Jaký systém používáš?
Jo vidíš. Toho jsem si v zápalu nadšení nevšiml :D Jen to přehodím :lol: Je to na Mach4. Data to bere z .csv souboru. Tam mi to už krásně funguje :D
BF30 přestavěná, Optimum F100 přestavěná
Kamodel.cz
Mach4
Odpovědět

Zpět na „Učíme se Fusion 360“