Dnes som riešil zobrazenie skutočných otáčok na panely AXIS. enkodér mi ich zosníma a Mesa napočíta. Výsledok z mesy je otáčky za sekundu.
Na panely mám otáčky za minútu, tak som to jednoducho chcel vynásobiť 60. Na to je funkcia SCALE.
http://linuxcnc.org/docs/html/man/man9/scale.9.html - popis je veľmi skromný.
Nakoniec som skončil takto:
loadrt scale count=0
addf scale.0 servo-thread
setp scale.0.gain 60
net spindle-vel-fb-rps scale.0.in
net spindle-vel-fb-rpm scale.0.out
Kým som prišiel na správnu kombináciu, chvíľu to trvalo.
Pýtam sa, prečo setp požaduje hodnotu vpravo (najprv signál, potom hodnota)
prečo net chce v prvom riadku najprv hodnotu, potom signál a v druhom riadku naopak.
V inom odseku, kde mám definovaný signál od enkodéru to funguje takto (príklad):
net spindle-cmd <= motion.spindle-speed-out => spindle-ramp.in
Prečo tu ide signál aj do prava aj do ľava?
EDIT: Prípadne dá sa to napísať jednoduchšie?
loadrt scale
-
CZ_Pascal
- Příspěvky: 894
- Registrován: 14. 1. 2008, 8:24
- Bydliště: Brno
Musíš rozlišovat mezi "Signály" a "Piny"
"Signál" je dalo by se říct něco jako název "proměnné" nebo "Drátu"
"Pin" může být VÝSTUP OUT, VSTUP IN nebo Výstupo-Vstup I/O (tedy "obojetný")
SETP je příkaz pro nastavení nějaké fixní/konstantní hodnoty do Vstupního "Pinu"
NET je příkaz ke spojení "Signálu" a "Pinu", případně Dvou a více "Pinů" skrze "Signál"
Na jeden "drát" ("Signál") můžeš připjit pouze jeden Výstupní OUT "Pin" ale několik Vstupních IN "Pinů"
V jednom příkazu NET můžeš připojit klidně jen jeden konec drátu (bez ohledu na to zdali připojuješ Vstupní IN nebo Výstupní OUT nebo "obojetný" I/O "Pin")
Stejně tak ale můžeš připojit v jednom NET příkazu všechny "Piny" na daný "Signál"
Pro spojení dvou "Pinů" potřebuješ "Signál" (drát)
Většinou tedy najdeš tedy popis ve tvaru: "NET JmenoSignalu JedenPin DruhyPin"
Pro lepší čitelnost pak můžeš použít "šipky" <= nebo => a nebo <=>
Tyto jsou pouze pro "člověka" systém je na nic nepotřebuje a ignoruje jejich přítomnost nebo směr protože ví že z výstupního pinu může "téct" informace pouze "ven" a do vstupního zase pouze "Dovnitř".
U "Obojetných Pinů" rozhoduje zrovna ten pin u kterého nastala nějaká zmněna (dalo by se říct "hrana" ať už náběžná nebo sestupná) a ta "proteče" do toho druhého který byl zrovna "v klidu"
Zkus se na to podívat ještě jednou a přiřadit si co je vstup a co výstup a co jméno drátu a ono to začne dávat smysl
"Signál" je dalo by se říct něco jako název "proměnné" nebo "Drátu"
"Pin" může být VÝSTUP OUT, VSTUP IN nebo Výstupo-Vstup I/O (tedy "obojetný")
SETP je příkaz pro nastavení nějaké fixní/konstantní hodnoty do Vstupního "Pinu"
NET je příkaz ke spojení "Signálu" a "Pinu", případně Dvou a více "Pinů" skrze "Signál"
Na jeden "drát" ("Signál") můžeš připjit pouze jeden Výstupní OUT "Pin" ale několik Vstupních IN "Pinů"
V jednom příkazu NET můžeš připojit klidně jen jeden konec drátu (bez ohledu na to zdali připojuješ Vstupní IN nebo Výstupní OUT nebo "obojetný" I/O "Pin")
Stejně tak ale můžeš připojit v jednom NET příkazu všechny "Piny" na daný "Signál"
Pro spojení dvou "Pinů" potřebuješ "Signál" (drát)
Většinou tedy najdeš tedy popis ve tvaru: "NET JmenoSignalu JedenPin DruhyPin"
Pro lepší čitelnost pak můžeš použít "šipky" <= nebo => a nebo <=>
Tyto jsou pouze pro "člověka" systém je na nic nepotřebuje a ignoruje jejich přítomnost nebo směr protože ví že z výstupního pinu může "téct" informace pouze "ven" a do vstupního zase pouze "Dovnitř".
U "Obojetných Pinů" rozhoduje zrovna ten pin u kterého nastala nějaká zmněna (dalo by se říct "hrana" ať už náběžná nebo sestupná) a ta "proteče" do toho druhého který byl zrovna "v klidu"
Zkus se na to podívat ještě jednou a přiřadit si co je vstup a co výstup a co jméno drátu a ono to začne dávat smysl
-
fupe
- Příspěvky: 657
- Registrován: 27. 5. 2008, 9:10
- Bydliště: Praha
Jednodušeji to napsat nejde. Máš to dobře.r4cv píše:
Nakoniec som skončil takto:
loadrt scale count=0
addf scale.0 servo-thread
setp scale.0.gain 60
net spindle-vel-fb-rps scale.0.in
net spindle-vel-fb-rpm scale.0.out
Prípadne dá sa to napísať jednoduchšie?
Jen malé doporučení.
jak píše skromná dokumentace,
loadrt scale [count=N|names=name1[,name2...]]
ty máš count=0 to nedává smysl, protože alespoň jeden scale tam chceš. Když potřebuješ jen jeden modul, tak tam nemusí být nic, když dva tak count=2.
Pak se číslují od 0 nahoru
Ale ještě lepší zápis je .....
loadrt scale names=scale-rps-to-rpm,scale-neco-to-necojinyho nebo si to pojmenuj jak uznas za vhodný. Proste si vymysli název pro kazdy scale a odděl je čárkou. Protože jak se tvoje konfigurace bude stávat složitejší a složitější tak najednou zjistíš, že potřebuješ těch modulu 5 a pak se nevyznáš jestli ten pro vřeteno je 0 nebo 3 nebo 5
Prostě to budeš mít přehlednější a čitelnější a nebudeš muset pokaždý dohledávat kterej je kterej.
samozřejmě pak musíš používat ten tvůj název i v dalších řádcích.
net spindle-vel-fb-rps scale-rps-to-rpm.in
net spindle-vel-fb-rpm scale-rps-to-rpm.out
Martin
-
r4cv
- Příspěvky: 2952
- Registrován: 8. 12. 2009, 8:32
- Bydliště: Topoľčany
Ja viem, že keď chcem scale, tak min. 1 si musím (vytvoriť?). pôvodne tam jednotka bola, ale nefungovalo mi to, tak som potom začal ladiť riadok za riadkom a prišiel som ku tomuto zápisu. Dať 2 ma nenapadlo.count=0 to nedává smysl, protože alespoň jeden scale tam chceš.
loadrt scale [count=N|names=name1[,name2...]]
z tohto popisu som nevydedukoval, ako má ten zápis presne vyzerať, tak som skúšal a skúšal.
Tvoj návod vyskúšam a uvidíme.
EDIT: tak ide to aj s jednotkou.
-
fupe
- Příspěvky: 657
- Registrován: 27. 5. 2008, 9:10
- Bydliště: Praha
Ješte ti poradím jednu fintu, která se mi osvědčila, ale trvalo mi dlouho než sem se ji naučil.
Pusť si linuxcnc a otevři si terminálové okno. V něm si pust halcmd -kf to ti otevře přikazový řádek v interaktivním režimu. Něco jako halrun, ale ten se spušteným linuxcnc nedá spustit.
A tady postupně zadávej příkazy přesně jak si uvedl.
loadrt scale
addf scale.0 servo-thread
setp scale.0.gain 60
net spindle-vel-fb-rps scale.0.in
net spindle-vel-fb-rpm scale.0.out
tim pridáš do aktualni konfigurace z ini a halu svuj scale.
Muzes si prohlídnout co je kam pripojeny pres menu v linuxcnc halshowconfig nebo z příkazové řádky
show [alias all comp funct param pin sig thread]
můžeš chybně nalinkovanej pin zase odlinkovat a přípojit jinam, to samé můžeš udělat i s pinem nalinkovaným z hal konfigurace když chceš třeba vložit do cesty signálu najaký prvek (například limit, filter atd)
unlinkp
atd atd. prostě to odladíš a až když to funguje tak to přidáš do halu. JInak je to furt dokola - upravit hal - spustit linuxcnc - přečíst si chybu- upravit hal- ,........
Navic halcmd ti pomuze pri napsání prvních par pismen a stisknuti TABELÁTORU dopsat cely příkaz.
například v tvém případě.
loadrt scale
addf TAB [sám doplní scale.0] TAB [sám doplní servo-thread] protože je to jediná komponenta která nemá definovaný thread ve kterém beží.
když použiješ příkaz net nazev signálu název pinu a stisknes TAB tak ti vypiše všechny piny které lze použit. Když je první název pinu IN tak vypíše pouze OUT piny a naopak.
Dokonce si to co si ručně pridal mužeš uložit a pak použit jen copy paste do sveho hal souboru.
Hodně to zjednodušší práci na ladění halu.
http://linuxcnc.org/docs/html/man/man1/halcmd.1.html tady jsou všechny přikazy co to umí
Martin
Pusť si linuxcnc a otevři si terminálové okno. V něm si pust halcmd -kf to ti otevře přikazový řádek v interaktivním režimu. Něco jako halrun, ale ten se spušteným linuxcnc nedá spustit.
A tady postupně zadávej příkazy přesně jak si uvedl.
loadrt scale
addf scale.0 servo-thread
setp scale.0.gain 60
net spindle-vel-fb-rps scale.0.in
net spindle-vel-fb-rpm scale.0.out
tim pridáš do aktualni konfigurace z ini a halu svuj scale.
Muzes si prohlídnout co je kam pripojeny pres menu v linuxcnc halshowconfig nebo z příkazové řádky
show [alias all comp funct param pin sig thread]
můžeš chybně nalinkovanej pin zase odlinkovat a přípojit jinam, to samé můžeš udělat i s pinem nalinkovaným z hal konfigurace když chceš třeba vložit do cesty signálu najaký prvek (například limit, filter atd)
unlinkp
atd atd. prostě to odladíš a až když to funguje tak to přidáš do halu. JInak je to furt dokola - upravit hal - spustit linuxcnc - přečíst si chybu- upravit hal- ,........
Navic halcmd ti pomuze pri napsání prvních par pismen a stisknuti TABELÁTORU dopsat cely příkaz.
například v tvém případě.
loadrt scale
addf TAB [sám doplní scale.0] TAB [sám doplní servo-thread] protože je to jediná komponenta která nemá definovaný thread ve kterém beží.
když použiješ příkaz net nazev signálu název pinu a stisknes TAB tak ti vypiše všechny piny které lze použit. Když je první název pinu IN tak vypíše pouze OUT piny a naopak.
Dokonce si to co si ručně pridal mužeš uložit a pak použit jen copy paste do sveho hal souboru.
Hodně to zjednodušší práci na ladění halu.
http://linuxcnc.org/docs/html/man/man1/halcmd.1.html tady jsou všechny přikazy co to umí
Martin
-
robokop
- Site Admin
- Příspěvky: 23436
- Registrován: 10. 7. 2006, 12:12
- Bydliště: Praha
Taky jsem parkrat pouzil
Hlavne kdyz pises scoje komponenty do halu tak je to nezbytnost
Hlavne kdyz pises scoje komponenty do halu tak je to nezbytnost
Vsechna prava na chyby vyhrazena (E)