{"id":444,"date":"2016-11-25T13:41:33","date_gmt":"2016-11-25T11:41:33","guid":{"rendered":"http:\/\/www.joanillo.org\/?p=444"},"modified":"2020-09-24T13:42:10","modified_gmt":"2020-09-24T11:42:10","slug":"cnc-del-dxf-al-g-code-optimitzacio-de-camins","status":"publish","type":"post","link":"https:\/\/www.joanillo.org\/?p=444","title":{"rendered":"CNC: Del dxf al G-Code. Optimitzaci\u00f3 de camins"},"content":{"rendered":"<p><a href=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2016\/11\/toolpath.png\"><img loading=\"lazy\" src=\"http:\/\/www.joanillo.org\/wp-content\/uploads\/2016\/11\/toolpath-300x185.png\" alt=\"\" title=\"toolpath\" width=\"300\" height=\"185\" class=\"alignright size-medium wp-image-1365\"><\/a>El workflow del CNC consta de tres passos:<\/p>\n<ol>\n<li>Disseny del model o pe\u00e7a. Es fa amb software de CAD, com per exemple LibreCAD, i el format de sortida est\u00e0ndar \u00e9s dxf<\/li>\n<li>Generar el G-Code (del que va aquest article). Necessites un programa que s\u00e0piga llegir el format dxf (on estan definides l\u00ednies, arcs, polil\u00ednies, splines, etc.) i generi el codi (G-code) que entenen les fresadores CNC.<\/li>\n<li>El software que sap interpretar el G-Code i sap enviar les comandes a la m\u00e0quina CNC a trav\u00e9s del port paral\u00b7lel. Per exemple, LinuxCNC o EMC.<\/li>\n<\/ol>\n<p>De tota aquesta <em>tool chain<\/em> el proc\u00e9s m\u00e9s complicat \u00e9s el segon. Concretament l&#8217;optimitzaci\u00f3 dels camins que far\u00e0 la m\u00e0quina CNC t\u00e9 molta import\u00e0ncia en el resultat final.<\/p>\n<p>Anem a veure-ho amb un exemple senzill i entenedor. Estem utilitzant el <a href=\"https:\/\/sourceforge.net\/projects\/dxf2gcode\/\" title=\"dxf2gcode\"><strong>dxf2gcode<\/strong><\/a>, i realment va molt b\u00e9. Est\u00e0 escrit en Python. T\u00e9 una interf\u00edcie gr\u00e0fica, per\u00f2 el millor \u00e9s que tamb\u00e9 es pot executar en mode consola. Davant d&#8217;un problema que he tingut i que ja est\u00e0 resolt, vaig buscar una alternativa. M&#8217;he trobat amb el projecte <a href=\"http:\/\/linux.softpedia.com\/get\/Utilities\/dxf2G-17935.shtml\" title=\"dxf2G\"><strong>dxf2G<\/strong><\/a> (els noms no s\u00f3n molt originals, ja veieu), que est\u00e0 escrit en llenguatge C, s\u00f3n 3000 l\u00ednies de codi, i s&#8217;executa en l\u00ednia de comandes.<\/p>\n<p>El segon \u00e9s un projecte senzill que funciona molt b\u00e9 per petits projectes, i que \u00e9s interessant estudiar el codi. Mirant qu\u00e8 fa i com ho fa, es troba a faltar que no separa les capes del dxf (normalment es treballa amb capes perqu\u00e8 associem les capes a un canvi d&#8217;eina, per treballar amb diferents di\u00e0metres de broca), i sobretot l&#8217;optimitzaci\u00f3 de camins, que seria la part dif\u00edcil d&#8217;implementar (es fan tesis doctorals sobre aquesta mat\u00e8ria).<\/p>\n<p>Ho veiem amb un exemple de dibuixar una l\u00ednia amb profunditat de 3mm, fent dues passades de 1,5mm. La manera correcta, com ho fa el <strong>dxf2gcode<\/strong> \u00e9s fer una passada a 1,5mm, foradar fins a 3mm, i desfer el cam\u00ed fins a tornar a l&#8217;inici de la recta.  El tros de G-Code que genera el dxf2gcode \u00e9s:<br \/>\n<code><br \/>\n(*** LAYER: 0 ***)<br \/>\nT1 M6<br \/>\nS6000<\/code><\/p>\n<p><code><br \/>\n<\/code><code>(* SHAPE Nr: 0 *)<br \/>\nG0 X   0.000 Y   0.000<br \/>\nM3 M8<br \/>\nG0 Z   3.000<br \/>\nF150<br \/>\nG1 Z  -1.500<br \/>\nF400<br \/>\nG1 X  60.000 Y   0.000<br \/>\nF150<br \/>\nG1 Z  -3.000<br \/>\nF400<br \/>\nG1 X   0.000 Y   0.000<br \/>\nF150<br \/>\nG1 Z   3.000<br \/>\nG0 Z  15.000<br \/>\nM9 M5<br \/>\n<\/code><br \/>\nEn canvi, el <strong>dxf2G<\/strong> fa la implementaci\u00f3 f\u00e0cil i costosa en temps: anem a l&#8217;origen de la recta; foradem a -1,5; fem la passada de la recta; pujem fins a 6mm per no tocar la pe\u00e7a; tornem a l&#8217;origen de la recta; foradem fins a -3mm; tornem a repassar la recta fresant a -3mm.<br \/>\n<code><br \/>\nG0 X0.000000 Y0.000000<br \/>\nG0 Z3.000000<br \/>\nG1 Z0<br \/>\nG1 Z-1.500000<br \/>\nG1 X60.000000 Y0.000000<br \/>\nG0 Z6.000000<br \/>\nG0 X0.000000 Y0.000000<br \/>\nG0 Z3.000000<br \/>\nG1 Z-3.000000<br \/>\nG1 X60.000000 Y0.000000<br \/>\nG0 Z6.000000<br \/>\n<\/code><br \/>\nTotal, el segon codi pot trigar el doble de temps que el primer. I \u00e9s que implementar algorismes d&#8217;optimitzaci\u00f3 de camins (<em>toolpath optimization<\/em> en angl\u00e8s) no \u00e9s cosa f\u00e0cil.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El workflow del CNC consta de tres passos: Disseny del model o pe\u00e7a. Es fa amb software de CAD, com per exemple LibreCAD, i el format de sortida est\u00e0ndar \u00e9s dxf Generar el G-Code (del que va aquest article). Necessites un programa que s\u00e0piga llegir el format dxf (on estan definides l\u00ednies, arcs, polil\u00ednies, splines, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[33,16],"tags":[],"_links":{"self":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/444"}],"collection":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=444"}],"version-history":[{"count":1,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/444\/revisions"}],"predecessor-version":[{"id":445,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=\/wp\/v2\/posts\/444\/revisions\/445"}],"wp:attachment":[{"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=444"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.joanillo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}