loadrt scale

Odpovědět
r4cv
Příspěvky: 2681
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

7. 2. 2017, 7:04

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?
Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

7. 2. 2017, 7:58

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 :wink:
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

8. 2. 2017, 1:24

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?
Jednodušeji to napsat nejde. Máš to dobře.
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: 2681
Registrován: 8. 12. 2009, 8:32
Bydliště: Topoľčany

8. 2. 2017, 3:46

count=0 to nedává smysl, protože alespoň jeden scale tam chceš.
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.

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: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

9. 2. 2017, 9:43

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
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22371
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

9. 2. 2017, 10:52

Taky jsem parkrat pouzil
Hlavne kdyz pises scoje komponenty do halu tak je to nezbytnost
Vsechna prava na chyby vyhrazena (E)
Mex
Příspěvky: 10288
Registrován: 6. 2. 2014, 10:29

9. 2. 2017, 10:55

Díky fupemu za osvětu. :-)
Odpovědět

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