Portál AbcLinuxu, 4. května 2025 06:25

Dotaz: Doplnění funkce programu

pdp7 avatar 20.11.2024 08:42 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Doplnění funkce programu
Přečteno: 1569×
Odpovědět | Admin
Příloha:
Ahoj, mám tu prográmek ncdr2cnc, který převádí vrtací data ve formátu Excellon do Gcode. To by mohlo i tak zůstat. Potřeboval bych tam doplnit funkcionalitu, která by to rozšiřovala o frézování např. přepínačem -mill Ručně jsem vytvořil nějaký příklad jak by měl vypadat výstup z programu. Soubory TAP. Ve zdrojovém frézovacím excellon souboru *.rou jsou kódy M15, M16 které reprezentují pohyb vřetene v ose Z dolu a nahoru.

M15 pro pohyb dolu, by mohlo by mohlo být analogicky jako -zdrill pro vrtání určováno volbou -zmill. V příkladu je -2. Toto musí být v rámci normálního frézování G01 s určenou pojezdovou rychlostí.

M16 vřeteno nahoru zase nastavitelné nějakou volbou -zup. V příkladu je 5. Toto může být už v rámci rychloposuvu.

Nevím nakolik je to proveditelné v tom programu vzhledem k tomu jak je postavený (já to bohužel neumím ani přečíst, špatně jsem se učil). Pokud by se tu našel někdo kdo umí a zároveň se aspoň trochu vyzná v G kódech, je to uplně nejlepší možná varianta. Já jsem rád za to, že jsem vůbec sesmolil tenhle dotaz.

Odkaz na zdroják programu https://sourceforge.net/p/ncdr2cnc/code/HEAD/tree/ je tam i zkompilovaný exáč.

Přikládám příklady vstupů a výstupů v zipu.
"První" komunita sdílející software

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.11.2024 11:27 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi bych se netrapil strukturama v C++ a podobne jako v dlr2gcode bych to proste vyparal radek po radku a provedl konverzi. Je potreba si nastudovat vstupni i vystupni format. Pohyb mezi M15 a M16 prevest na G01 etc.
pdp7 avatar 21.11.2024 14:42 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Načítání vstupu je na řádcích 45-55 a zápis výstupu je 57-63?
21.11.2024 18:08 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Cte se radek po radku:
with open(args.drlfile[0]) as fp:
   line = fp.readline()
   while line:
     ....
Nasypou se nastroje(tnum):
if line.startswith("T") and "C" in line:
 ....
Vybere se nastroj(tsel): ....
elif line.startswith("T"):
....
Prevod vrtani:
elif line.startswith("X") and tsel != "0":
Zapis:
for t in tools:
....
pdp7 avatar 21.11.2024 18:31 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Ten převod vrtání, jestli to chápu správně: vždycky očekává, že řádek bude začínat X. Jenže když tam napíšu G00 a do uvozovek 3 aby bral jakože 4 znak, tak mi zas vypíše problém s řádkem newl2. Programovat já neuměti. A už vůbec nevím jak bych si v kódu měl počínat pokud řádek bude začínat jakkoliv jinak, ale bude v něm směrodatná informace. Jsem jako ten Vyhlídka když radil Andělovi garde, radit uměl ale hrát ne.
21.11.2024 19:16 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
FlatCAM. Cituji:
You can open Gerber, Excellon or G-code, edit it or create from scatch, and output G-Code. 
Tohle bude pro tebe idealni a bez programovani. Bezi to na Linuxu, ale to asi chapes. Na widlich WSL.
pdp7 avatar 21.11.2024 20:32 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
To chápu. Zkusil jsem už více věcí včetně FlatCamu a zrovna tak jako ty ostatní neumí zacházet s excellonem v režimu frézování (routing), jen vrtání. Specifikaci má na stránkách firma Ucamco, ale z nějakého důvodu to zřejmně nikdo nepožaduje, protože kdo vyrábí profi plošňáky tak má specializované železo. Bastliči si vystačí s ULP pcb2gcode udělátkem do Eagle. Já dělám v práci panelizaci v softu kde je výstupem ten excellon jak na díry tak drážky a tam končím. Určitým řešením pro mě je, prostě vykálet se tu funkci exportu cest nástroje, exportovat prostě outlajny modulů v DXF a toto zpracovat v nějakém Vectric (na normální frézu co firmě plánujeme) a dělat routepath, můstky a tyhle voloviny v tom. Jako cesta to je, ale připadá mi teda fest debilní.
pdp7 avatar 21.11.2024 20:39 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Chcete li se zasmát, dodavatel té frézy nám nabídl (ve spolupráci s nějakou další programátorskou firmou), že je schopný nějaký takový převodník udělat za 110 prutů :D
21.11.2024 21:41 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Jestli na to mas nejaky rozpocet tak si to nech proste nakodovat. Jako brigada pro VS studenta techniky je to uplne pohodove.
22.11.2024 21:15 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
KiCad jsi zkousel? Protoze podle zdrojaku umi mill i routing do Gerberu..
* Routing commands are similar to Gerber polygons
pdp7 avatar 2.12.2024 12:50 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Zkusím to jinak
elif line.startswith("X") and tsel != "0":
         newl1 = "".join(["G1 F", str(args.z_move_speed), " Z", str(args.safe_height)])
         newl2 = "".join(["G1 F", str(args.xy_move_speed), " ", line.split("Y")[0], " Y", line.split("Y")[1].strip("\r\n")])
Jak mám Pythonu říct, aby bral na vstupu i řádky začínající nejen X, ale i G01? Prostě potřebuji aby je opsal, v tomto stavu jen vypíše chybu
Traceback (most recent call last):
  File "C:\Users\cerny\Documents\Elektro Modus\frezovani\CAMOutputs\vylezlo z fabu\drl2gcode.py", line 61, in module
    newl2 = "".join(["G1 F", str(args.xy_move_speed), " ", line.split("Y")[0], " Y", line.split("Y")[1].strip("\r\n")])
                                                                                     ~~~~~~~~~~~~~~~^^^
IndexError: list index out of range
2.12.2024 15:59 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Vrtani je "jednorazova" operace je mozne ji zpracovavat sekvencne, ale routing je operace, ktera vyzaduje sekvenci kroku => je potreba se pri parsovani kodu koukat dopredu i dazdu. Tedy, pokud detekujes na radku zmenu z vrtani na routing G00/G11 bude nasledovat samostatna smycka, ktera detekuje zacatek, pohyb vrtaku a konec.

Ten soubor se zpracovava radek po radku a program nevi co bude nasledovat, to je potreba osetrit:
G00X-1Y11.9007 <- Prepnuti na routing a vychozi pozice.
G40
M15
G01Y0 <- linearni pohyb
M16
G40
G00X19.3493Y-1 <- Routing koncova pozice.
Pseudoodem:
if 'G00' in line:# ROUTING ZACATEK
   while line:
      line = f.readline()
      ..... <- zpracovani pohybu
      if 'G00' in line: ROUTING KONEC
         ....
         break
Snad jsem to pochopil dobre.
pdp7 avatar 2.12.2024 17:15 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Díky tohle jsem potřeboval, sice jsem už přišel na to jak volbě startwith přiřadit více možných hodnot, nicméně nefunguje to jak by bylo třeba jak správně píšeš.
pdp7 avatar 10.12.2024 11:26 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Ahoj, spatlal jsem zatím toto:
with open("Layer_5.rou") as f:
  line = f.readline()
  while line:
      line = f.readline()
      if 'G00' in line:# ROUTING ZACATEK
         print(line)
      if 'G00' in line: #ROUTING KONEC
         break
f.close()
ovšem to vypíše jen první řádku kde se vyskytuje G00 a tam to taky skončí. Potřebuji aby jel do dalšího G00. Může tam být další ROUTING ZACATEK po rychloposuvu a další práce vřetene. Učit se toto v 39 je tedy brutus :D
10.12.2024 12:35 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
V pohode, cenim snahu. Pokusil jsem se to trochu zjednodusit:
#!/usr/bin/python3

with open('frezovani.rou') as f:
  for line in f:
    if 'G00' in line:
      print("[*] Routing start")
      print(line.strip())
      for line in f: 
        print(line.strip())
        if 'G00' in line:
          print("[*] Routing end\n")
          break
11.12.2024 00:06 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Kdyby jsi s tim chtel nejak vic pomoct, tak to vystav treba na Github nebo tak.
pdp7 avatar 11.12.2024 08:06 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Už tohle je velká pomoc. Budu sledovat nějaká videa a biflit se, dám tomu nějaký čas a třeba vypotím něco lepšího. Každopádně dík ;-)
pdp7 avatar 12.12.2024 14:07 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Nějak jsem postoupil. Zjistil jsem, že to s for cyklem nechodí uplně jak potřebuji, špatně jsem si to vyložil. Napsal jsem tohle, sice je to zatím bez zápisu nástroje, nějak to šlape, akorát to má jednu vadu:
# definice promennych

otacky = 25000
feedrate = "F300"
#milldepth = "Z-2"
safeZ = "40"
moveZ = "Z5"

hlavicka = """; Generovano v routexc2gcode.py

; Absolutni koordinaty
G90
; Metricke
G21
; Spust vreteno
M3 S"""+str(otacky)+"""
"""

paticka = """
; zastav vreteno
M5
; vyjeti vretene a konec frezovani
G00 Z"""+str(safeZ)+"""
; konec programu
M2
"""

# zapis hlavicky
print(hlavicka)

# pohyb vretene

with open('Layer_5.rou') as f:
  line = f.readline()
  while line:
    line = f.readline()
    if line.startswith("G00"):
      print(line.strip())
    if line.startswith("G01"):
      print(line.strip(), milldepth, feedrate)
    if line.startswith(("X","Y")):
      print(line.strip())
    if line.startswith("M15"):
      #print(milldepth, "; Vreteno dolu")
      milldepth = "Z-2"
    if line.startswith("M16"):
      print(moveZ, "; Vreteno nahoru")
    #if line.startswith("G40"):
    #  print(line.strip())
    if line.startswith("M30"):
      break

# zapis paticky
print(paticka)
Potřebuji aby řádky začínající G00 vypsal a současně zkopíroval s těmi stejnými souřadnicemi na nový řádek jako G01 následujíc proměnné milldepth a feedrate. Řádky začínající G01 normálně vypsat, ale už bez těch milldepth a feedrate. Vpodstatě na těch kopiích by to G01 už ani nemuselo být, protože už je definovaná.
Příklad vstupu:
G00X10Y10
M15
G01X20Y20

Příklad výstupu:
G00X10Y10
G01X10Y10 Z-2 F300
X20Y20
pdp7 avatar 12.12.2024 16:31 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Už to mám.
12.12.2024 16:54 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
with open('frezovani.rou') as f:
  line = f.readline()
  while line:
    line = f.readline().strip()
    if line.startswith("G00"):
      print(line)
      print(line.replace('G00','G01'), milldepth, feedrate)
    if line.startswith("G01"): print(line)
    if line.startswith(("X","Y")): print(line)
    #if line.startswith("M15"): print(milldepth)
    if line.startswith("M16"): print(moveZ)
    if line.startswith("G40"): print(line)
    if line.startswith("M30"):
      break

pdp7 avatar 13.12.2024 11:05 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Příloha:
Jasně, šel jsem na to podobně. Doteď jsem printoval výstup jednotlivých ifů Co kdybych chtěl místo printování zapisovat do souboru? Zkoušel jsem třeba v tom prvním ifu pro G00 udělat proměnnou
rychloposuvy = line.strip()
...
with open("soubor.nc", "w") as uloz:
   uloz.write(rychloposuvy)
ale samozřemně to tu proměnnou mění řádek po řádku a v soubor.nc je pak jenom poslední řádek s G00. Jdu na to blbě, to je jasný, ale já nevím co mám dělat :D Jinak vyprintovaný výstup do konsole je teď uplně OK.

13.12.2024 13:35 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Na zacatku si otevres vystupni soubor:
out = open('vystup.gcode','w')
v prubehu smycky do nej budes postupne zapisovat:
while
  ...
  if ...
    out.write(line)
a nakonec ho korektne uzavres.
out.close()
Druha moznost, je vystpu nekam docasne odkladat(treba do slovniku, jako v puvodnim kodu) a pak to slepit a ulozit.
Řešení 1× (pdp7 (tazatel))
pdp7 avatar 18.12.2024 13:34 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Příloha:
Mám výtvor hotový. Vyřešeno.
18.12.2024 15:49 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Super. Muzu to vystavit na Gitu pro "dalsi generace"? Detaily bych zaslal na email.
pdp7 avatar 18.12.2024 19:06 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Klidně, já s tím Githubem vůbec neumím a angličtina taky není moje silná stránka.
pdp7 avatar 19.2. 15:21 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Příloha:
Ahoj, nějak jsem zase pokročil ve svém výblitku a chtěl bych do toho zakomponovat možnost pokračování na enter nebo esc na vyskočení. Našel jsem si toto , ale nevím kam to vecpat. Když vložím cyklus while True za ty definice proměnných a odsadím to tělo zpracování souboru tak mi ho to opakuje furt dokola. Pak je ve výsledku i nějak blbě odsazená ta hlavička v Gcodu, taky nevím proč. Poradíte?
pdp7 avatar 20.2. 09:03 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Udělal jsem to takhle, akorát mě drtí, že po odentrování a dokončení vytvoření výstupního souboru se objeví 2 prompty. Jakoby to samo mačkalo enter :-D
pdp7 avatar 20.2. 09:05 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Příloha:
Kód zde.
20.2. 11:11 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Myslim, ze na to jdes moc slozite. Upravil jsem a aktualizoval tvuj kod na Gitu. Koukni na to jestli to takto vyhovuje. Poznamky: a] Nekonecna smycka zere CPU a je to potreba osetrit, nebo se tomu radeji vyhnout. b] Detekce [esc], [enter], neni zrovna jednoducha, takze jsem to trochu zjednodusil. c] Obecne bych ten zacatek a inicializaci vstupnich hodnot a vubec parametry programu resil modulem 'argparse'. Koukni na to(neni to ze zacatku uplne snadne, ale da to programu nejakou standardizovanou formu a jako bonus to lze poustet s parametry prikazove radky. ie. program.py --cesta xxx -- cesta xxc etc.). Posilam mail.
pdp7 avatar 20.2. 12:08 pdp7 | skóre: 33 | blog: Mravenec_v_LCD_monitoru | Zákupy u České lípy
Rozbalit Rozbalit vše Re: Doplnění funkce programu
Ano takto vyhovuje. Po tvé úpravě to vypadá jako program a né jako hromada šrotu co taky vykazuje nějakou činnost :-D Sám se divím, že ses v tom vyznal.
20.2. 12:27 X
Rozbalit Rozbalit vše Re: Doplnění funkce programu
lol ;D Pohoda. Jenom jsem to trochu ucesal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.