2017. augusztus 26., szombat

Pen Plotter 4 - InkScape/KiCAD munkamenet rajzoláshoz

A plotter első tesztje (ez it)



a következő munkamenettel készült:
Rajzoltam egy spirált az InkScape-ben, elmentettem DXF-ként és a DXF2GCODE programmal átkonvertáltam
https://sourceforge.net/projects/dxf2gcode/
Kipróbáltam néhány gcode küldőt, de végülis a Raspberry Pi/Ubuntu/Octoprint kombónál maradtam, amivel eléggé tisztában vagyok a 3D nyomtató miatt.
A fenti munkamenetnek van néhány baja:
  • Képtelen megfelelő skálázást produkálni. Azt nem tudom, hogy csak az én bénaságom, vagy a szoftverek baja.
  • A DXF2GCODE inkább hasonlít egy CAM szoftverre mint egy plug and play konverziós megoldásra. A plotternek sokkal egyszerűbb G code-ra van szüksége mint egy CNC marónak. Az a lehetőség, hogy marófejekkel, zsebekkel, stb. dolgozzunk itt teljesen felesleges.
  • Van egy vonal a plotter kezdőpontja és az ábra kezdőpontja között aminek nem kéne ott lennie. Ezt nem a munkamenet okozza, de erre majd visszatérek később.
Ezen a ponton elkezdtem másképp hozzáálni a feladathoz. A DXF egy mechanikai CAD formátum, tehát nem igazán tollas plotterekhez tervezték, ugyanakkor a HPGL kifejezetten a HP tollas plottereinek a nyelve.
Elkezdtem keresni egy programot ami a HPGL-t G code-á alakítja. Találtam néhány konvertert. Egy sem felelt meg a céljaimnak. A nagyja képtelen volt a HPGL AA íveit G2, G3 ívekké alakítani. Ez a konverzió feltételez némi trigonometriai tudást. Úgy látszik ezt néhány programozó nem tudta megugrani. Néhány próbálkozás után feladtam, hogy valami kész megoldást használjak.
Tehát írtam egy konveretert. Megtalálható a plotter github reojában:
https://github.com/sufzoli/suf-3D-Plotter/tree/master/SW/Hpgl2Gcode
Még vannak hiányosságai mint a hiányos hibakezelés vagy az útvonal optimalizáció hiánya, de teszi a dolgát.
Most nézzük meg, hogy működik a munkamenet.
Az eredeti rajz:


Először is a rajz objektumait útvonalakká (path) kell alakítani, másképp nem jelennek meg a HPGL fájlban:


Ha ez kész van elmenthetjük HPGL-ként:



Most jön a trükkös része:
Az InkScape HPGL mentés ablaka kivágó plotterhez tartalmaz alapbeállítáűsokat ami itt nekünk nem jó. Ezért a nagyját meg kell változtatni az alábbiak szerint:

 

Most átkonvertálhatjuk G code-á.
Két különböző beállítást használtam. Az ok, hogy a plotter M280 P0 S50 parancsot használ a fej felemeléséhez és M280 P0 S0 parancsot a letevéséhez.
A szokásos CNC marók G1 parancsot használnak a Z irány mozgatásához. Az elterjedt G code szimulátor a CAMotics nem tudja értelmezni az én toll magasság vezérlő parancsaimat így a szimulációra lecseréltem ezeket G1 Z5 F50-re és G1 Z-2 F50-re:


Az eredmény a szimulátorban:


Jól néz ki, csináljuk meg a plotterhez is:


Mint látható a PenUp és PenDown paraméterek hiányoznak. Az oka, hogy ezek az application config-ban kerültek elhelyezésre.
Ezek után feltöltöttem a fájlt az Octoprintre és kiküldtem a plotternek. Az eredmény katasztrófális. Rajzolt egy két centis szaggatott vonalat a plotter kezdöpontjából kiindulva az ábra kedőpontja felé, majd lerajzolta az egész ábrát a levegőbe (toll felemelve).
Az első pillanattól kezdve tudtam az okot. Ez azonos a korábban említett problémával (vonal a plotter kezdőpontjától a spirál kezdőpontjáig). A G code-ok nem sorrendben hajtódnak végre.
Tudom a Marlin firmware-ről, hogy bizonyos parancsok sorban, más parancsok viszont soron kívül hajtódnak végre. Néhány órán keresztül olvasgattam a Marlin forráskódját, hogy megtaláljam, hogyan lehet ezt a viselkedést megváltoztatni. Sikertelenül. Feladtam ezen a ponton és megkérdeztem a Marlin fórumon.
A válasz sokkal egyszerűbb mint gondoltam. Ha kiteszünk egy M400-as parancsot (vár a korábbi parancsok befejezésére) a soron kívüli parancsok elé az megoldja a problémát. Még a kódon sem kellett változtatnom, a toll vezérlő parancsaim a konfigurációs fájlban vannak.
Az egyetlen szükséges trükk a töbsoros szöveg kezelése a .Net konfigurációs fájlban. Tehát a paraméter most valahogy így néz ki:
M400
M280 P0 S0

És végül az eredmény:


A monverter amit írtam a KiCAD HPGL kimenetét is kezeli. Egyenlőre csak rajzolásra használható és nem nyák marásra. Ez majd később jön.

2017. augusztus 14., hétfő

Graylog, Elasticsearch, maximális mezőszám, graylog_deflector

Csak mert nem vagyok linuxos gyerek.
Néhány napja összeraktam a vadiúj Graylog szerverünket.
Sikeresen hozzákötöttem valami 10+ Windows szervert, hogy begyűjtse az eseménynapló bejegyzéseket róluk.
A project második részeként hozzá akartam adni néhány linux szervert is.
zzáadtam az elsőt, látszik, hogy a begyűjtés működik, az üzenetek beérkeznek, de a konzolon nem jelenik meg semmi. Fura.
Kicsit mélyebbre ásva az index hibalista ezzel volt tele:
{"type":"illegal_argument_exception","reason":"Limit of total fields [1000] in index [graylog_0] has been exceeded"}
Ez azt jelenti, hogy túlment a rendszer a maximális mezőszámon (azt hiszem, hogy a Windows nagytömegű eseménytítusa miatt)
Elolvastam egy rakás fórumbejegyzést róla. Megpróbáltam beállítani az elasticsearch.yml-ben.
Nem segített. Az eredmény egy működésképtelen elasticsearch lett.
Végül lepucoltam az egészet (elasticsearch) az indexekkel eggyüttvéve és újratelepítettem.
Az eredmény:
Lett egy működő elasticsearch-öm. Az 1000-es mezőlimit maradt, de jött hozzá mégegy hiba. Valami ilyesmi:
A graylog_deflector egy index és nem egy alias.
Kugli újra, a hibára rátaláltam, a megoldásra nem. Elkezdtem gondolkodni a guglizás helyett. Amire rájöttem:
  1. Az egyik log fáljból kiderült, hogy az elasticsearch beállításai nem a konfig fájlon keresztül mennek, hanem a web API-n keresztül, JSON objektumokban.
  2. A curl a barátod
  3. A Graylog létrehozza a grylog_deflector-t indexként, ha nem találja a graylog_alias-t. Ezt utána nem tudja használni. Ezzel azután semmit sem tudsz kezdeni a Graylog felületen belül, tehát a dolog el van cseszve.
A megoldás a fentiek alapján:

  1. A Graylog web  felületén menj be a System/Indices>Indices-be. Válaszd ki a Default index set-et
  2. Maintanance-ben válaszd ki a Rotate active write index pontot. Ez gyárt egy graylog_0 nevű index-et (csak ez nem fog működni)
  3. A konzolon álítsd le a graylog-ot:
    sudo service graylog-server stop
  4. Kezeljük az 1000 mező problémáját:
    curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
      "index.mapping.total_fields.limit" : "5000"
    }'
  5. Állítsuk le a graylog_deflector index-et:
    curl -XPOST 'localhost:9200/graylog_deflector/_close?pretty'
  6. Töröljük a graylog_deflector index-et:
    curl -XDELETE 'localhost:9200/graylog_deflector?pretty'
  7. Adjuk hozzá a graylog_deflector aliast az újonan gyártott graylog_0 index-hez:
    curl -XPOST 'localhost:9200/_aliases?pretty' -H 'Content-Type: application/json' -d'
    {
        "actions" : [
            { "add" : { "index" : "graylog_0", "alias" : "graylog_deflector" } }
        ]
    }'
  8. Indítsuk el a graylog-ot:
    sudo service graylog-server start
  9. Most a graylog elekzd bőszen indexelni ez akár napokig is tathat, de a begyűjtött üzenetek elkezdenek látszani közben.