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
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
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
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.
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