xhc-whb04b-6 - kompilace

Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

13. 2. 2022, 9:48

Čaute,

uživatel kombik mi zapůjčil jeho druhý pendant xhc-whb04b-4 s vadným displejem. Nefunkčnost displeje nemá vliv na funkčnost zařízení.

Máme problém s tím, že nám nefunguje OPTIONS:
-s Lead + jogwheel changes the spindle override speed. Each tick will increase/decrease the spindle override.

-f MPG + jogwheel changes the feed override. Each tick will increment/decrement the feed override.
Možná že to funguje, ale neumím to používat. Ovšem spíše to vidím na BUG.

Konečně bych se chtěl naučit využívat největší výhody OPEN-SOURCE projektů => když je problém, vyřešit ho.

Stáhl jsem si zdrojáky tohoto driveru:
/linuxcnc-master/src/hal/user_comps/xhc-whb04b-6/

a když jsem si je procházel, tak jsem našel část zdrojového kódu, která by měla dělat, to co potřebuji.

Kód: Vybrat vše

// ----------------------------------------------------------------------
bool Pendant::onJogDialEvent(const HandWheelCounters& counters, int8_t delta)
{

    FeedRotaryButton& feedButton = mCurrentButtonsState.feedButton();

    if (HandWheelCounters::CounterNameToIndex::UNDEFINED != counters.activeCounter()) // && 0 != counters.counts())
    {
        *mPendantCout << mPrefix << "wheel  event " << counters.counts() << endl;

        if (0 != delta)
        {
            if (counters.isLeadCounterActive() && mIsLeadModeSpindle)
            {   // Spindle override mode
                if (delta > 0)
                {
                    mHal.toggleSpindleOverrideIncrease();
                }
                else
                {
                    mHal.toggleSpindleOverrideDecrease();
                }
            }
            else if (!counters.isLeadCounterActive() && mIsLeadModeFeed && feedButton.stepMode() == HandwheelStepmodes::Mode::MPG)
            {      // FeedRate override mode
                   if (delta > 0)
                   {
                       mHal.toggleFeedrateIncrease();
                   }
                   else
                   {
                       mHal.toggleFeedrateDecrease();
                   }
             }
             else if (!counters.isLeadCounterActive() && (feedButton.stepMode() == HandwheelStepmodes::Mode::CON || feedButton.stepMode() == HandwheelStepmodes::Mode::STEP))
             {      // Normal Mode
                    mHal.setJogCounts(counters);
             }
        }
        mDisplay.onJogDialEvent(counters, delta);
        return true;
    }
    return false;
}
Řekl bych, že odsud bych se mohl odpíchnout.

Ovšem abych se mnohl posunout dál, tak potřebuji nejdříve umět tuto komponentu zkompilovat.

A zde jsem se již zasekl:

Kód: Vybrat vše

zdenek@CNC:~/linuxcnc/xhc-whb04b-6$ sudo halcompile --compile --userspace main.cc
Unrecognized file type for mode compile: 'main.c
Co mě zarazilo jako první je přípona main.cc místo main.c . Na internetu jsem našel, že cc je nějaká odnož c. Používám tedy vůbec správný program "halcompile" na zkompilování?

Dále mi není jasné, jestli se u tohoto driveru mám zabývat Component Personality.

Když hledám nějakou chybu v Arduinu, tak si vložím do určitých míst ve zdrojovém kódu příkaz na poslání zprávy po sériové lince. Někdy si pošlu po sériové lince jen "HAF" abych věděl, zda ten program tam vůbec dojde a někdy si tam vložím nějakou proměnou, u které mě zajímá jakou má hodnotu. Jak se toto řeší zde?

Hlavním cílem není rozchodit tento ovladač, ale naučit se najít a opravit chyby v LCNC.

ZZ
LinuxCNC - MESA 7i96
zz912.webnode.cz
StoupaCZ
Příspěvky: 543
Registrován: 2. 6. 2017, 8:12

13. 2. 2022, 11:29

Nevím, nejsem odborník na LinuxCNC (na ten se vrhnu až udělám mechanickou část :), ale jestli je to https://github.com/LinuxCNC/linuxcnc/tr ... c-whb04b-6, tak to se bude kompilovat v rámci celého linuxCNC, viz soubor Submakefile.

Hlavní Makefile je pak v rootu zdrojáků LinuxCNC: https://github.com/LinuxCNC/linuxcnc/tree/master/src

Kompilace popsaná v: http://linuxcnc.org/docs/devel/html/cod ... uxcnc.html

Jinak soubory s příponou .cc jsou C++ zdrojáky viz např. https://stackoverflow.com/questions/517 ... s-h-vs-cxx

čili mám z toho pocit, že je to přímo součástí LinuxCNC (od verze) 2.8 a Halcompile ti v tomto nepomůže.

Co se týká nějakých debugovacích výpisů v rámci HAL komponent, asi lze použít http://linuxcnc.org/docs/ja/html/man/ma ... rtapi.html.

Vše bez záruky, musel bych se v tom lépe (a hlavně déle) zorientovat.
Sieg SX4, Interkrenn IKD-400, Vernier Minishape 28
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

13. 2. 2022, 11:59

StoupaCZ píše: 13. 2. 2022, 11:29 čili mám z toho pocit, že je to přímo součástí LinuxCNC (od verze) 2.8 a Halcompile ti v tomto nepomůže.
hmmmm........ :-( Tak celou kompilaci LCNC asi nedám.

Každopádně díky moc za vysvětlení, ušetřil jsi mi hromadu času, že jsem se snažil o něco co nejde.

Nastává tak čas na plán B. Na githubu napíšu že jsem možná našel BUG a poprosím o opravu.
LinuxCNC - MESA 7i96
zz912.webnode.cz
titel
Příspěvky: 339
Registrován: 29. 5. 2017, 12:30

13. 2. 2022, 12:39

zz912 píše: 13. 2. 2022, 11:59
hmmmm........ :-( Tak celou kompilaci LCNC asi nedám.
Nemusíš sa toho obávať. Mali by ísť skompilovať na jednu šupu bez problémov. Teda ak neurobíš chybu v tom driveri. Najprv si skompiluj stiahnuté zdrojáky LCNC, tam zistíš, či ti to prejde.
Uživatelský avatar
Erythros
Příspěvky: 33
Registrován: 7. 10. 2014, 7:48

15. 2. 2022, 9:06

Kompilační pravidla pro LinuxCNC jsou celkem šílená, ale pokud je nemusíš upravovat, tak ta samotná kompilace proběhne (obvykle) bez problémů.

Kde jsi se zadrhl?

Je dobré si projít skripty pro CI, jelikož ty to sestavují v podstatě z čistého systému. Především řádky https://github.com/LinuxCNC/linuxcnc/bl ... ci.yml#L25 a https://github.com/LinuxCNC/linuxcnc/bl ... deps.sh#L8 a níže.

V podstatě vše co potřebuješ je nainstalovat kompilační základ, balíčky závislostí a nakonec spustit onu kompilaci. (V případě RIP a RT_Preempt.)

Kód: Vybrat vše

sudo apt-get install build-essential fakeroot devscripts equivs git
git clone https://github.com/linuxcnc/linuxcnc
cd linuxcnc
debian/configure
mk-build-deps -irs sudo
cd src
./autogen.sh
./configure --with-realtime=uspace
make
A podobně.

Pokud si myslíš, že chybu zvládněs opravit sám, tak to zkompilovat je opravdu to nejmenší. A než psát žádost na Github, no nevím, pravděpodobně to nikdo neopraví, alespoň ne do doby, než to bude potřebovat.
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

16. 2. 2022, 5:49

Erythros píše: 15. 2. 2022, 9:06 Kde jsi se zadrhl?
Defakto už na začátku.

Nevím zda mám začít s kompilací RIP a až pak se pokoušet o kompilaci celkovou?

Momentálně mám na PC rozjetý:
http://www.linuxcnc.org/iso/linuxcnc-2.8.2-buster.iso

Mám začít tím, že linuxcnc odinsaluji?

Kód: Vybrat vše

sudo apt-get remove linuxcnc
Mám PC vyhrazené na pokusy, takže si žádnou CNC mašinu nezablokuji.
Je dobré si projít skripty pro CI, jelikož ty to sestavují v podstatě z čistého systému. Především řádky https://github.com/LinuxCNC/linuxcnc/bl ... ci.yml#L25 a https://github.com/LinuxCNC/linuxcnc/bl ... deps.sh#L8 a níže.
Tyhle řádky mi nic neříkají, což bude asi problém.

S Arduinem už vím jak se k nefunkčnímu kódu posatvit a co s tím dělat, ale nedovedu si představit, jak to dělat u LCNC? To když zkusím udělat nějakou změnu v kódu, tak musím kompilovat celý LinuxCNC, pak zkusím co se stalo, celý LCNC odinstaluji a pak zkusím další úpravu a opět celý LCNC nainstaluji?

Nepochopil jsem ani systém složek v Linuxu. Je to takový systém všechno všude:

Kód: Vybrat vše

zdenek@CNC:~$ find / -name linuxcnc 2>/dev/null
/usr/include/linuxcnc
/usr/bin/linuxcnc
/usr/share/doc/linuxcnc
/usr/share/linuxcnc
/usr/lib/tcltk/linuxcnc
/usr/lib/linuxcnc
/etc/linuxcnc
Ono to asi nějakou logiku má.
Nevím jak pak tvořit více kompilací, abych mohl zkoušet různé varianty úprav.

Pak jsem slyšel o nějakých strašácích "řešení křížových odkazů" při kompilaci LCNC. Bohužel nevím o co vůbec jde. Asi nějaké vazby mezi knihovnami?

Kód: Vybrat vše

A než psát žádost na Github, no nevím, pravděpodobně to nikdo neopraví, alespoň ne do doby, než to bude potřebovat.
Bohužel je to tak, ale moc jiných možností nemám. Zatím to vypadá, že chyba se bude týkat dotazů LCNC na stav módu:
A než psát žádost na Github, no nevím, pravděpodobně to nikdo neopraví, alespoň ne do doby, než to bude potřebovat.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

16. 2. 2022, 7:03

Tezko takhle vysvetlovat
Doporucuji zkusit kompilaci bez uprav
Pak udelat upravu a uvidis
Kdyz budes mit tech asi 8 knihoven co to pro kompilaci vyzaduje tak to pujde snadno
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
Erythros
Příspěvky: 33
Registrován: 7. 10. 2014, 7:48

16. 2. 2022, 8:42

Nevím zda mám začít s kompilací RIP a až pak se pokoušet o kompilaci celkovou?
Run-In-Place je celková kompilace. V podstatě LinuxCNC podporuje dvě verze kompilace:
  • RIP: Kompilace s cestami natvrdo nastavenými ve skriptech a binárkách do určité složby, LinuxCNC pak běží z ní => Spuštění-Z-Místa
  • Debianí balíčky: Kompilace s cestami natvrdo nastavenými tak jak to vyžaduje standardní Debianí instalace => Systémový běh
Tyto dva módy se dost liší a z různých historických důvodů způsobují dost velké problémy, ale vždycky zkompiluješ celý LinuxCNC (nebo alespoň tak celý, jak je běžné).
Mám začít tím, že linuxcnc odinsaluji?
To bude pro tebe nejjednodušší. Tím bych začal. Pomůže ti to s tím, že nebudeš mít v prostředí, v cestě (${PATH}) žádné binárky z té instalace (halrun, halcmd atd.).
Nepochopil jsem ani systém složek v Linuxu. Je to takový systém všechno všude:
To, co jsi vypsal, je dáno Debianem, respektive něčím, čemu se říká Souborový Standard (Filesystem Hierarchy Standard, FHS). Na Linuxu naprosto elementární věc. Pokud těto zajímá, jsou krásné tutoriály. (Hyn hingliš, v češtině určitě nějaké také.)
Nevím jak pak tvořit více kompilací, abych mohl zkoušet různé varianty úprav.
Ono v podstatě potřebuješ jenom jednu verzi. Ten sestavovací systém je schopen postupné kompilace, pokud se nemýlím. To znamená, že to bude kompilovat pouze změněné soubory a bude to trvat kratší dobu. (Samozřejmě přitom používat verzovací systém, ať se můžeš vrátit.)
Pak jsem slyšel o nějakých strašácích "řešení křížových odkazů" při kompilaci LCNC. Bohužel nevím o co vůbec jde. Asi nějaké vazby mezi knihovnami?
Takhle bez podrobností nevím. Možná cyklické, rekurzivní řešení Makefilů? Nebo problémy s dynamicky slinkovanými moduly při kompilaci na vícero mašinách?
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

16. 2. 2022, 8:52

A kterou cestu by si mi doporučil?
RIP nebo Debianí?
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
Erythros
Příspěvky: 33
Registrován: 7. 10. 2014, 7:48

16. 2. 2022, 9:01

A kterou cestu by si mi doporučil?
RIP nebo Debianí?
Rozhodně RIP. Práce pak bude vypadat nějak takto: Zkompiluješsi to poprvé z čistého kódu. Aktivuješ si prostředí pomocí

Kód: Vybrat vše

source ./scripts/rip-environment
, vyzkoušíš si to spustit a pak jen uděláš nějakou změnu v kódu, necháš si to sestavit a zkusíš to znovu spustit.

S balíčky bys to vždy musel zkompilovat do balíčku, odinstalovat ten původní, nainstalovat ten nový, spustit, zkusit, změnit a nanovo.
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

16. 2. 2022, 9:19

Mezi zmenami se kompiluji pouze zaeditovane soubory. Nic vic. Samozrejme se to linkuje paklize to je soucasti vetsi binarky.
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

16. 2. 2022, 9:30

Je RIP vhodné i pro následný běžný provoz LinuxuCNC se strojem?

Asi přestane fungovat aktualizace pomocí apt-get, ale to by asi nevadilo. Je tam ještě nějaká zrada?
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

16. 2. 2022, 9:41

ano je to vhodne
aktualizace stejne chces mit pod kontrolou
v RIP muzes pak mit treba 20 verzi linuxcnc s ruznymi modifikacemi na jednom stroji
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
zz912
Příspěvky: 1354
Registrován: 25. 5. 2008, 7:16

16. 2. 2022, 9:43

Díky moc za vysvětlení. O víkendu vyzkouším RIP kompilaci.
LinuxCNC - MESA 7i96
zz912.webnode.cz
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22384
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

16. 2. 2022, 9:56

jedina pakarna je vyresit ty zavislosti kdyz je nemas vyresene uz odpredtim z nejakeho duvodu
trosku to zabere ale da se, je to ta snadnejsi varianta mezi ruznymi linuxovymi kompilacemi ruznych vetsich projektu
Vsechna prava na chyby vyhrazena (E)
Odpovědět

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