LINUXCNC zamiana TRUE na '1' i FALSE na '0'
Sterowanie invertera Lenze poprzez Ethercat z wykorzystaniem rejestru sterującego
-
Autor tematu - 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'
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.
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:
-
- 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'
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

Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos
-
- 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'
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ł
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ł
-
- 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'
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.
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

Zobacz moje filmy http://www.youtube.com/user/pokachontass/videos
-
Autor tematu - 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'
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:
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:
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
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:
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:
Tak jak pisałem dla kolegi "micges" nie silę się na fachowca ale udało mi się uruchomić naszynę i steruję nią po ethercat.adam Fx pisze: ↑23 gru 2018, 01:33mik197 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 :/
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
-
Autor tematu - 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'
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
-
- 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'
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
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 - 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'
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
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