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