Řízení externího subsystému, předání parametrů

Odpovědět
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

7. 7. 2017, 10:12

Potřeboval bych z G-kódu na LinuxCNC řídit nějaký externí subsystém.
Konkrétně bych rád řídil dispenser, tj. dávkovač pasty. Ale chtěl bych to dělat v dynamickém režimu, tedy aby to pastu dávkovalo za jízdy osy.

Představa je tato:
- hlava najede na nějaké souřadnice (nějaký běžný kód G0)
- nějakým příkazem G-kódu se spustí dávkování, které bude mít 2 parametry - délku dávky a zpoždění startu dávkování (oboje třeba v milisekundách), příkaz je neblokující
- hlava popojede po dráze, kde se má nadávkovat pasta (dávkovač mezitím tlačí pastu na základě předchozího příkazu), nějaký běžný kód G1
- dávkování se samo zastaví po zvolené době, dané parametry při spuštění dávkovače, takže hlava zase může odjet nějakým G0 na další pozici

No a nevím, jak z G-kódu spustit ten dávkovač a předat mu parametry (délku dávkování a zpoždění startu).
Použít nějaké běžné ovládání digitálních výstupů a časování pomocí G4 použít nemůžu, protože hlava se musí mezitím hýbat.
Takže buď použít volání externího programu, ale LinuxCNC podle dokumentace asi neumí předat parametry tomu externímu programu.
Nebo do LinuxCNC dopsat nějaký vlastní příkaz, který by to ošéfoval celé, ale tady nemám představu, jak je to pracné.

Takže G-kód by pak vypadal nějak takhle:

G0 X10.0 Y20.0 Z0.3
X 80 10
G1 X10.8
G0 na další pozici

Kde ten příkaz X by spustil dávkování na 80ms se zpožděním začátku o 10ms (aby se mezitím stačila rozjet hlava). Výsledkem by byla krátká šmouha pasty o délce kolem 0.6mm.

Pokud se to dá celé řešit nějak snadno a já hledám problémy kde nejsou, tak se předem omlouvám.
Díky za případné nasměrování.
Uživatelský avatar
Thomeeque
Příspěvky: 8907
Registrován: 30. 1. 2012, 10:20
Bydliště: Mimo ČR

7. 7. 2017, 11:22

Chybí mi tam souvisost mezi zadanými ms a výslednou délkou šmouhy (jaktože by ten ukázkový gcode udělal zrovna 0.6mm šmouhu? a kde by začínala/končila?). Nebo si máme představit, že je tam zadaný takový feed, aby to tak nějak vycházelo (a šmouha je cca od X10.1 do X10.7)?
mimooborová naplavenina • kolowratský zázrak™ • NPS • GCU • HirthCalc • ncDP.ino
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

7. 7. 2017, 11:43

Zpoždění a celkovou dobu dávkování bude třeba stanovit experimentálně.
Těch 0.6mm je to, čeho bych rád dosáhl, nikoli to, co z něčeho exaktně plyne.
Dávkovač bude pneumatický, a konkrétní dávkování závisí na spoustě faktorů.

Některé se dají stanovit dost exaktně:
- granulita a druh pasty
- průměr dávkovací jehly
- tlak
- teplota pasty (platí jen v případě termostatovaného hrotu)

Některé se musí pokusně naladit:
- fyzický stav pasty, který se stářím a skladováním mění
- plnost dávkovací kartuše (poměr plné a již vyčerpané části)
- asi trochu i teplota okolí, i v případě termostatovaného hrotu

Takže ty parametry bude třeba vylaborovat, a občas překalibrovat.
Asi to udělám tak, že zavedu možnost kompezace přímo na dispenseru (nějaké 2 potenciometry nebo případně elegantnější digitální řešení s displejem), abych nemusel modifikovat G-kód.
Takže ty parametry v G-kódu by pak byly v podstatě nějaké symbolické, převod na reálné časové jednotky by pak udělal dispenser.

Zatím to dávkuju ručně a nemám termostatovaný hrot (je to "termostatováno" teplotou mé ruky). Takže před akcí vždy potenciometrem vyladím velikost dávky někde na kousku papíru (nakonec i s ohledem na velikost osazovaných součástek).
Uživatelský avatar
filla
Příspěvky: 3536
Registrován: 1. 12. 2013, 12:55
Bydliště: Brno
Kontaktovat uživatele:

8. 7. 2017, 2:03

to je 3d tisk jak vysitej, inspiruj se tam
"do řiti se řítíme, ani o tom nevíme.."
testone
Sponzor fora
Příspěvky: 7201
Registrován: 3. 12. 2010, 5:56
Bydliště: Slaný

8. 7. 2017, 5:24

do ostatních věcí moc nevidím, ale myslím že máš té v úvaze jednu zásadní chybu
nelze použít pneumatické vytlačování té pasty z kartuše stylem fouknu/nefouknu tlakový vzduch nad pastu
to bude mít hroznou setrvačnost a rampy než to nafoukneš/ odfoukneš
díky pružnosti vzduchu to bude šíleně citlivý na homogenitu pasty
když se tam náhodou vyskytne bublinka, tak to vyprskne
nelze
musíš použít něco jako dávkovací čerpadlo a důsledně vyloučit všechny pružné členy v cestě pasty
Obvykle se dějí věci obvyklé. Méně často se dějí věci neobvyklé a zcela vyjímečně se dějí věci vyjímečné...
Masturn 40 CNC, Hermle UWF1200H CNC a pár klasik
http://www.radialengine.cz" onclick="window.open(this.href);return false;
http://www.autopejsek.cz" onclick="window.open(this.href);return false;
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 11:15

Není to tak hrozné. Dávkování pneumatickým dispenserem se běžně používá, a nakonec i já ho rutinně používám, ale v ručním režimu.
Když se zvolí vhodný průměr jehly (v mém případě jehly se světlostí kolem 0.3mm o minimální délce cca 3mm), vhodný tlak (v mém případě 4 bary) a vhodná doba (u mě kolem 50-150ms), tak to udělá pěkný "bobek" pasty, jehož velikost je přímo úměrná době dávkování.

Ten pneumatický ventil, který spíná tlakový vzduch je dvoučinný, po vypnutí přívodu tlakového vzduchu okamžitě odfoukne přetlak z kartuše.
Já jsem si ten dispenser dělal sám. Dělají se ale samozřejmě i komerčně, a pak někdy mívají výrobník podtlaku Venturiho trubicí, a po ukončení tlaku tam naopak pustí podtlak, aby to natáhlo pastu zpět. Ale praxe ukazuje, že je to zbytečné, a uživatelé těch profi dispenserů to většinou ani nepoužívají, protože to dělá randál, trvale to žere vzduch a k ničemu to není.

Máš pravdu, že lepší je dávkování nějakým dávkovacím mechanismem. Hodně drahé stroje to používají (jsou to mašiny za dost velké miliony Kč). Tam se pak pneumatický systém stará jen o přísun materiálu do vlastní dávkovací hlavy, ta pak používá buď nějaké čerpadlo s mikrošroubem, nebo dneska už asi i nějaké piezo elementy a podobně.

Jednodušší systém by se možná dal udělat tak, že by se udělala malá komůrka, do té by se to v první fázi natlačilo pneumatikou, pak by se vstup do komory uzavřel, otevřel výstup a vysokým tlakem by se ta jednorázová dávka vystříkla ven. Ale to "jednodušší" asi mělo být v uvozovkách, je dobré si uvědomit, že se zde pohybujeme v rozměrech v desetinách milimetru.

Pro běžné použití ten jednoduchý pneumatický systém funguje fakt slušně. Pokud je u toho ještě zpětná vazba přes oko, tak už vůbec není problém.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

8. 7. 2017, 11:32

tak z g kodu aktivuj virtualni IO

Input/Output Codes
M62 - M65 P Digital Output Control
M66 P E L Q Wait on Input
M67 T Analog Output,Synchronized
M68 T Analog Output, Immediate

posleze s tim nejak naloz v HALu
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 11:37

Ještě poznámka.
Zvažoval jsem i jiné mechanismy ovládání toho spouštění, třeba přes virtuální osu. Ale potřebuju tam nějak dostat jek to úvodní zpoždění, tak celkovou délku, a to nezávisle na pohybu reálných os od XY. Takže by to snad mohlo fungovat nějakým sledováním DIR/STEP virtuální osy, pokud bych jí dokázal úkolovat nezívisle na rychlosti os XY. Tímto směrem se moc pouštět nechci.

Je zde ústupová varianta přes volání externích programů, to LinuxCNC umí. Ale neumí (podle mě) tomu předat parametry.
Takže kdyby to fakt nešlo jinak, tak bych prostě udělal 2 externí programy "delayX" a "dispenseY", které by byly v mnoha variantách, a zavolala by se vždy ta správná. Takže by existovaly třeba delay05, delay006, ..., delay020 a dispense050, dispense055, ..., dispense150.

G-kód by pak vypadal nějak takhle:
G0 X10.0 Y20.0 Z0.3
Odelay010 call
Odispense080 call
G1 X10.8
G0 na další pozici

Ale to jedině když to jinak nepůjde.
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 11:42

Mezitím napsal robokop, díky.
Použití digitálních výstupů jsem zavrhnul, že s tím bych to asi neudělal.
Ale máš pravdu, že přes analogové výstupy by se to asi udělat nějak dalo, díky za tip.
Pokud by se použily 2 analogové výstupy, jeden by časoval zpoždění a druhý dobu, tak to opravdu asi ve spolupráci s HALem šlo.
Díky moc. :-)
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

8. 7. 2017, 12:33

ty parametry muzes prave predat HALu prezez ty digitalni a analogove vstupy a vystupy
podprogram nebo i nove definovany Gcko nebo Mko (REMAP) ktere odkaze budto na soubor s poprogramem v g kodu nebo python
oboji pak prejima parametry jako ostatni tj XYZ PQR IJK a dalsi
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 1:52

Použiju 2 synchronizované analogové výstupy. Jeden bude definovat délku, druhý zpoždění.
Až se pohne osa, tak LinuxCNC předpokládám zavolá HAL a pošle tam ty 2 hodnoty. Já podle toho na úrovni HALu nějak zakomunikuju s dispenserem a spustím dávkování.
Ten Tvůj tip použít analogové výstupy a HAL byl skvělý. Díky.

Ten G-kód pak bude vypadat takhle:

G0 X10.0 Y20.0 Z0.3
M67 0 80
M67 1 10
G1 X10.8
G0 na další pozici
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

8. 7. 2017, 2:38

muzes si to pak predefinovat aby to vypadalo lip treba na
...
posun na pozici
M300 P80 Q10
odjezd na novou pozici
...

prave pomoci remap
http://linuxcnc.org/docs/html/remap/remap.html" onclick="window.open(this.href);return false;
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 6:04

Aha, tak to je ještě větší frajeřina. :-)
LinuxCNC je fakt mocný nástroj.
Děkuji.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

8. 7. 2017, 8:38

Teoreticky by melo jit i to napsat to do cyklu
Jako treba vrtani G81 a pod...
Zavolas vrtani s parametrama a pozici
A pak volas pouze pozice a ono to na nich sjede
Nanese to
Odjede na bezp. Vysku
Opakovanym zadanim pouze sour. X a Y to same provede na novych souradnicich
Po poslednim nanaseni ukoncis cyklus G80
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

8. 7. 2017, 10:04

Do cyklu to asi nebudu moct dát, protože ta dávkovací data musím vygenerovat konverzí z nějakých externích dat.
Takže budu mít vždy informace o každém jednotlivém bodu zvlášť. Takže maximum co budu moct udělat je nějak poskládat pořadí tak, abych měl co nejmíň přejezdů.
Proto taky musím mít tu informaci s parametry dávky pro každý ten bod zvlášť a nemůžu to třeba na začátku předem přednastavit. Velikost SMD plošek je velmi rozdílná, takže ten konverzní program pro každý bod musí spočítat souřadnice začátku, délku přejezdu po tom vlastním bodu (to jsou přejezdy v řádech maximálně desetin milimetru) a parametry dávky.
Odpovědět

Zpět na „LinuxCNC - drive pod nazvem EMC2“