LINUXCNC zamiana TRUE na '1' i FALSE na '0'

Sterowanie invertera Lenze poprzez Ethercat z wykorzystaniem rejestru sterującego

Dyskusje dotyczące działania obsługi programu LinuxCNC

Autor tematu
mik197
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 4
Posty: 8
Rejestracja: 21 gru 2018, 14:40

LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#1

Post napisał: mik197 » 22 gru 2018, 12:59

Dzień Dobry,
Od dłuższego czasu próbuje sterowania inverterem Lenze poprzez ethercat wykorzystując jego rejestr sterujący x6042
Bezpośrednie przypisanie wartości do rejestru

setp lcec.0.4.drivecontrol-0 1

powoduje ustawienie "1" w rejestrze sterującym na pozycji 0-go bitu i jest OK.

Problem w tym, aby móc, w czasie rzeczywistym, przy wykorzystaniu dostępnych funkcji linuxcnc znieniać wartośc poszczególnych bitów muszę podać na pin "1" lub "0". ( przed uruchomieniem invertera)

Linuxcnc wyrzuca błąd w przypadku przypisania sygnału odczytanego z pinów choćby był to sygnał TRUE lub FALSE.
Zaznaczam, że konwersje conv-u32-bit czy conv-s32-bit nie działają w tym przypadku lub nie umiem ich zmusić do współpracy.

Czy może jest Ktoś na forum kto zechce podpowiedzieć w jaki sposób mogę konwertować TRUE na "1" i FALSE na "0"?

Dodane 1 godzina 57 minuty 25 sekundy:
Temat rozwiązany, opis konfiguracji HAL dla tej konwersji wykonywałem w niewłaściwym pliku dlatego pin nie znał wartości sygnału ponieważ jeszcze nie został przetworzony przez system. Obecnie zarówno wartość zadana jak i mierzona działa prawidłowo. Użyłem do tego celu
komponentu czasu rzeczywistefo -> weighted_sum.
ps. Ethercat dla LinuxCNC nie jest trudny.
Życzę Wesołych Świąt i Dobrego Nowego Roku 2019.



Tagi:

Awatar użytkownika

adam Fx
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 5598
Rejestracja: 04 lip 2004, 16:03
Lokalizacja: Gliwice

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#2

Post napisał: adam Fx » 23 gru 2018, 01:33

mik197 pisze:ps. Ethercat dla LinuxCNC nie jest trudny.

No to znaczy że wymiatasz - nic nie zrozumiałem z tego co napisałeś :)
Przyznam że przydał by się tutorial
Rozumiem że udało się nawiązać połączenie miedzy linuxcnc a falownikiem z pomocą jakiejś transmisji coś jak ModBus
Krążą plotki że da się jakoś zrobić że przy pomocy konwertera USB na RS485 da się dogadać z falownikiem ale jak to zrobić od strony LinuxCNC aż przez prawidłowe fizyczne podłączenie do falownika oraz zaprogramowanie falownika to nie wiem :/
sorki za wszystkie błędy ... (dyslektyk) :?
Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos


micges
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 292
Rejestracja: 08 sty 2010, 02:04
Lokalizacja: Toruń

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#3

Post napisał: micges » 23 gru 2018, 15:25

Witam,
Mógłbyś kolego w skrócie opisać jak utworzyć prawidłowy plik xml dla lcec?
Próbuję serwo delty sterować po ethercacie ale raz że robię to na raty a dwa że brak dokumentacji.

pozdrawiam
Michał

Awatar użytkownika

adam Fx
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 2
Posty: 5598
Rejestracja: 04 lip 2004, 16:03
Lokalizacja: Gliwice

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#4

Post napisał: adam Fx » 23 gru 2018, 18:24

hehe następny Kolega w jakimś obcym języku się wyraża hehe
Naprawdę brakuje tutoriali z obsługi linuxcnc na wyższym poziomie niż Kreator konfiguracji.
sorki za wszystkie błędy ... (dyslektyk) :?
Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos


Autor tematu
mik197
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 4
Posty: 8
Rejestracja: 21 gru 2018, 14:40

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#5

Post napisał: mik197 » 24 gru 2018, 09:00

Witam,
może i "obcy" jest to język który się wyraziłem ale muszę stwierdzić że dla ethercat'a nie ma żadnego tutka w linuxcnc dlatego wszystko z palca piszę i trochę mnie przytkało. Ale jak już napisałem popełniłem błąd deklarując sygnały w pliku który jest później przetwarzany.

Dodane 22 minuty 46 sekundy:
micges pisze:
23 gru 2018, 15:25
Witam,
Mógłbyś kolego w skrócie opisać jak utworzyć prawidłowy plik xml dla lcec?
Próbuję serwo delty sterować po ethercacie ale raz że robię to na raty a dwa że brak dokumentacji.

pozdrawiam
Michał
Nie próbowałem korzystać z modułów dedykowanych servom Delta ponieważ mam Estuny.
Konfigurując je opierałem się na module generic korzystając z tutoriala chyba A. Schiffler'a oraz na Jego plik bazowym xml dla serva ESTUN. Oczywiście ważny jest xml udostępniany przez producenta sprzętu z którego trzeba przenieś dane charakterystyczne dla danego napędu ("ProductCode", "Id", "Sm").
Nie jestem fachowcem w tym temacie ponieważ Linuxcnc zająłem się kilka tygodni temu i ciągle się uczę. Ale maszyna po ethercat działa.

Dodane 3 minuty 59 sekundy:
adam Fx pisze:
23 gru 2018, 01:33
mik197 pisze:ps. Ethercat dla LinuxCNC nie jest trudny.

No to znaczy że wymiatasz - nic nie zrozumiałem z tego co napisałeś :)
Przyznam że przydał by się tutorial
Rozumiem że udało się nawiązać połączenie miedzy linuxcnc a falownikiem z pomocą jakiejś transmisji coś jak ModBus
Krążą plotki że da się jakoś zrobić że przy pomocy konwertera USB na RS485 da się dogadać z falownikiem ale jak to zrobić od strony LinuxCNC aż przez prawidłowe fizyczne podłączenie do falownika oraz zaprogramowanie falownika to nie wiem :/
Tak jak pisałem dla kolegi "micges" nie silę się na fachowca ale udało mi się uruchomić naszynę i steruję nią po ethercat.
Co do łatwości sterowania z Linuxcnc po ethercat jestem mile zaskoczony prostotą tego rozwiązania.

Dodane 4 minuty 13 sekundy:
Życzę Wesołych Świąt,

dziękuje za zainteresowanie tematem ethercat naprawdę warto
Linuxcnc to fajna rzecz.

pozdrawiam
Mirek


micges
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 292
Rejestracja: 08 sty 2010, 02:04
Lokalizacja: Toruń

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#6

Post napisał: micges » 24 gru 2018, 23:16

Wstaw kolego tego xml może metodą prób i błedów uruchomię swój zestaw.


Autor tematu
mik197
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 4
Posty: 8
Rejestracja: 21 gru 2018, 14:40

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#7

Post napisał: mik197 » 25 gru 2018, 08:27

micges pisze:Wstaw kolego tego xml może metodą prób i błedów uruchomię swój zestaw.


OK, nie pomyślałem mogłem to od razu zrobić byłoby łatwiej:
# =======================================================
#XML estunX3.xml

<masters>
<master idx="0" appTimePeriod="1000000" refClockSyncCycles="1">
<slave idx="0" type="generic" vid="0000060A" pid="00000001" configPdos="true">
<sdoConfig idx="6060" subIdx="0"><sdoDataRaw data="08"/></sdoConfig>
<sdoConfig idx="6098" subIdx="0"><sdoDataRaw data="23"/></sdoConfig>
<sdoConfig idx="6093" subIdx="1"><sdoDataRaw data="00 80 00 00"/></sdoConfig>
<sdoConfig idx="6093" subIdx="2"><sdoDataRaw data="E2 04 00 00"/></sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1602">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="500"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A02">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="0.002"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
<watchdog divider="2498" intervals="1000"/>
</slave>
<slave idx="1" type="generic" vid="0000060A" pid="00000001" configPdos="true">
<sdoConfig idx="6060" subIdx="0"><sdoDataRaw data="08"/></sdoConfig>
<sdoConfig idx="6098" subIdx="0"><sdoDataRaw data="23"/></sdoConfig>
<sdoConfig idx="6093" subIdx="1"><sdoDataRaw data="00 80 00 00"/></sdoConfig>
<sdoConfig idx="6093" subIdx="2"><sdoDataRaw data="E2 04 00 00"/></sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1602">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="500"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A02">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="0.002"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
<watchdog divider="2498" intervals="1000"/>
</slave>
<slave idx="2" type="generic" vid="0000060A" pid="00000001" configPdos="true">
<sdoConfig idx="6060" subIdx="0"><sdoDataRaw data="08"/></sdoConfig>
<sdoConfig idx="6098" subIdx="0"><sdoDataRaw data="23"/></sdoConfig>
<sdoConfig idx="6093" subIdx="1"><sdoDataRaw data="00 80 00 00"/></sdoConfig>
<sdoConfig idx="6093" subIdx="2"><sdoDataRaw data="E2 04 00 00"/></sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1602">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="500"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A02">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="0.002"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
<watchdog divider="2498" intervals="1000"/>
</slave>
<slave idx="3" type="generic" vid="0000060A" pid="00000001" configPdos="true">
<sdoConfig idx="6060" subIdx="0"><sdoDataRaw data="08"/></sdoConfig>
<sdoConfig idx="6098" subIdx="0"><sdoDataRaw data="23"/></sdoConfig>
<sdoConfig idx="6093" subIdx="1"><sdoDataRaw data="00 80 00 00"/></sdoConfig>
<sdoConfig idx="6093" subIdx="2"><sdoDataRaw data="E2 04 00 00"/></sdoConfig>
<syncManager idx="0" dir="out"></syncManager>
<syncManager idx="1" dir="in"></syncManager>
<syncManager idx="2" dir="out">
<pdo idx="1602">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halPin="drivecontrol" halType="bit"/>
<pdoEntry idx="607A" subIdx="00" bitLen="32" halPin="poscommand" halType="float" scale="500.0"/>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1A02">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halPin="drivestatus" halType="bit"/>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="pos" halType="float" scale="0.002"/>
</pdo>
</syncManager>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="250000"/>
<watchdog divider="2498" intervals="1000"/>
</slave>

</master>
</masters>

# ==========================================================
# HAL estunX3.hal

loadusr -W lcec_conf estunX3.xml
loadrt lcec
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES


#załączenie sterowników napędów ESTUN i Lenze ustawienie "1" poprzez "F2" Linuxcnc
net ec_up lcec.state-op => lcec.0.0.drivecontrol-0 => lcec.0.1.drivecontrol-0 => lcec.0.2.drivecontrol-0 => lcec.0.3.drivecontrol-0

setp lcec.0.0.drivecontrol-1 1 # oś X ustawienie "1' dla bitu 1 i 2 pinu drivecontrol
setp lcec.0.0.drivecontrol-2 1

setp lcec.0.1.drivecontrol-1 1 # oś Y
setp lcec.0.1.drivecontrol-2 1

setp lcec.0.2.drivecontrol-1 1 # oś Z
setp lcec.0.2.drivecontrol-2 1

setp lcec.0.3.drivecontrol-1 1 # oś A
setp lcec.0.3.drivecontrol-2 1

net Xachse_AF axis.0.amp-enable-out => lcec.0.0.drivecontrol-3 # ustawienie pinu poprzezaxis.0.amp.-enable-out
net Yachse_AF axis.1.amp-enable-out => lcec.0.1.drivecontrol-3
net Zachse_AF axis.2.amp-enable-out => lcec.0.2.drivecontrol-3
net A_os_AF axis.3.amp-enable-out => lcec.0.3.drivecontrol-3


# Sterowanie prędkościa silników
Scale - nie wiem czy tak jest prawidłowo i jak to sprawdzić ustawiłem to metodą prób

net Xachse_fb lcec.0.0.pos => axis.0.motor-pos-fb
net Xachse_cmd axis.0.motor-pos-cmd => lcec.0.0.poscommand
net Yachse_fb lcec.0.1.pos => axis.1.motor-pos-fb
net Yachse_cmd axis.1.motor-pos-cmd => lcec.0.1.poscommand
net Zachse_fb lcec.0.2.pos => axis.2.motor-pos-fb
net Zachse_cmd axis.2.motor-pos-cmd => lcec.0.2.poscommand

net A_os_fb lcec.0.3.pos => axis.3.motor-pos-fb
net A_os_cmd axis.3.motor-pos-cmd => lcec.0.3.poscommand

# =========================================================
# INI estunX3.ini
[HAL]
HALUI = halui
HALFILE = estunX3.hal


# --------------------------------------------------------------------------
# trochę mojego opisu
Co do pinów np. lcec.0.1.drivecontrol są już zadeklarowane dla każdego napędu slave'a gdzie jest również opisane jakiego typu jest to pin.

Sterowanie pinami opisane w HAL'u.

Trochę wyjaśnienia:

Każdy Master w sieci ethercat dla linuxcnc opisany jest poprzez liczbę.
Każde urządzenie w sieci ethercat stanowi tzw. węzeł i opisany jest kolejną liczbą.
Nazwa pinu składa się z części opisowe (ciąg znaków) w naszym przypadku lcec -linuxcnc ethercat (moje przypuszczenie) następnie oddzielony kropką nr master i oddzielony kropką nr węzła (sleva) i po kolejnej kropce nazwa pinu.
"lcec.0.1.drivestatus"

Wszystko zależy jakiego rodzaju jest dany pin takiego rodzaju możemy mu przypisać sygnał. Ale to opisane jest w "HAL Manual".
net jaki_bit "lcec.0.1.drivestatus-1

# odniesienie się do kankretnego bitu poprzez użycie myślnika i nr bitu
# odczyt bitu "1" pinu drivestatus i przypisanie jego wartości do połączenia (sygnału) "jaki_bit"

I WAŻNE: dużo czasu zajęło mi próbowanie kolejnych kart LAN aby zechciały pracować w ethercat.
Najlepiej sprawują się INTEL'e full duplex opisane w dokumentacji "IgH EtherCAT Master 1.5.2"

mam nadzieję, że pomogłem
pozdrawiam Mirek


Tomasz_K
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 1
Posty: 295
Rejestracja: 25 kwie 2012, 15:58
Lokalizacja: ok. Rybnika

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#8

Post napisał: Tomasz_K » 29 gru 2018, 10:42

Gościu i tak wymiatasz.
Pierwszy raz widzę w polskim necie taki przykład sterowania Ethercatem.
Pisałeś że sterujesz również Lenze a wkleiłeś tylko ESTUN.
To przypadek?

Pozdrawiam
Tomasz


Autor tematu
mik197
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 4
Posty: 8
Rejestracja: 21 gru 2018, 14:40

Re: LINUXCNC zamiana TRUE na '1' i FALSE na '0'

#9

Post napisał: mik197 » 29 gru 2018, 13:02

Nie, nie przypadek ponieważ xml estuna i lenze różni się tylko parametrami charakterystycznymi dla danego napędu więc kolega nie będzie miał problemów z dopasowaniem swoich parametrów.
Dodam tylko, że obecnie nie spotkałem invertera który oferowałby pełny zakres sterowania falownikiem poprzez ethercat. Dlatego na razie kombinuje protezę aby trochę "oszukać" linuxcnc i zmusić go do współpracy z lenze.
CiA402 dokładnie opisuje co i jak można sterować ale w przypadku inverterów oferują one tylko cztery rejestry 16-to bitowe.
powodzenia
Mirek

Dodane 25 minuty 41 sekundy:
Co do dostępności tutoriali / przewodników linuxcnc-Ethercat to obawiam się, że w całym internecie nie znajdzie Kolega kompleksowego opisu. Najwięcej udostępnili jak do tej pory p. Ittner i Schiffler. "Studiuje" to sterowanie od kilku miesięcy a materiały zbieram z wielu portali od Azji poprzez Rosję na Stanach kończąc oczywiście jest również YT. Chciałem zainteresować jak największą grupę ludzi tym rodzajem sterowania bo nie wymaga super hiper zakupów dodatkowego oprzyrządowania. No prawda jest taka, że większość producentów sprzętu wyposażonego w moduł ethercat życzy sobie ekstra pieniądze dlatego nie jest to tanie. Po nowym roku zacznę coś dłubać na maszynie (czekam na frezy) to zobaczę czy warto było - myślę o precyzji. Bo szybkość posuwów na mojej maszynie jest wg mnie duża. Problem jest taki, że w ogóle nie znam się na obróbce i obsłudze linuxcnc więc muszę wszystkiego uczyć się od zera.
pozdrawiam
Mirek

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”