Z toho jsem právě paf.
Na straně 16 například funkce
F0.6 odpovídá
Dec time
Na straně 57 stejná funkce
0x0006 odpovídá
Jog running stop
Ten kdo vymýšlel modbus jasně nadefinoval funkce, které se mají na co používat:
# fnct_02_read_discrete_inputs (02 = 0x02)
# fnct_03_read_holding_registers (03 = 0x03)
# fnct_04_read_input_registers (04 = 0x04)
# fnct_06_write_single_register (06 = 0x06)
# fnct_15_write_multiple_coils (15 = 0x0F)
# fnct_16_write_multiple_registers (16 = 0x10)
Ten kdo vymýšlel HAL componentu mb2hal se držel toho, jak je protokol Modbus vymyšlen.
Pak přišli výrobci driverů, kteří se na vše vykašlali a zavedli si nějaké vlastní registry, kde jeden registr umí 10 věcí.
Když si vezmu desku pana Pouchy,
https://zz912.webnode.cz/quido-30-3/
tak ten má tři výstupy řešen takhle jednoduše:
[TRANSACTION_01]
FIRST_ELEMENT=0
NELEMENTS=3
MB_TX_CODE=fnct_15_write_multiple_coils
HAL_TX_NAME=output
a výsledek vypadá takto:

- Papouch_output.jpg (10.83 KiB) Zobrazeno 2253 x
Jednoduchý jak facka, jasný. Kdyby to bylo vřeteno, tak si dovedu představit, že tam nebude output.00 output.01 output.02 , ale bude tam vreteno-doprava vreteno-doleva vreteno-stop
Vůbec mě nějaký registry nezajímají a rovnou můžu přiřazené piny typu boolean spojovat s dalšími hal-piny.
S těmi registry mám pocit, že výrobci driveru vůbec nepochopili o čem Modbus je.
Nebo jsem to já kdo jede na dálnici v protisměru a říká si, že je tam těch blbců nějak moc?
A jak tedy v mb2hal vytvořit třeba transakci pro zapnutí vřetene?
Na stránce 57 jsem našel:
0x0001 FWD running startup
[TRANSACTION_00]
#------------------------------ tohle vím jak vyplnit
LINK_TYPE=serial
SERIAL_PORT=/dev/ttyS0
SERIAL_BAUD=9600
SERIAL_BITS=8
SERIAL_PARITY=none
SERIAL_STOP=2
SERIAL_DELAY_MS=50
MB_SLAVE_ID=1
#------------------------------
#------------------------------ a tady nevím
MB_TX_CODE=fnct_06_write_single_register
FIRST_ELEMENT=1
NELEMENTS=2
#------------------------------
#------------------------------ tohle vím jak vyplnit
HAL_TX_NAME=spindle-register
MAX_UPDATE_RATE=0.0
DEBUG=1
#------------------------------
Zapisování registru přes fnct_06_write_single_register se mi zdá jako škrábání pravou rukou za levým uchem.
Nevýhoda fnct_06_write_single_register je, že ve verzi LCNC 2.8 umí jen datový typ float (ve verzi 2.9 bude umět i integer), takže jsem ke vhodnému číslu došel jen stylem pokus omyl. Poté jsem musel toto float číslo propojit s hal componentou mux
http://linuxcnc.org/docs/stable/html/ma ... ux8.9.html , abych se dostal hal piny typu boolean. Sice to pak už bude fungovat do konce životnosti toho driveru, ale to nastavování je porod.
Pak lze Modbus řídit komponentou classicladder
http://linuxcnc.org/docs/stable/html/ma ... der.9.html
ale to je jak vzít na kulomet na vrabce.
Třetí možností je napsat si vlastní komponentu pro konkrétní vřeteno, ale tomu se snažím vyhnout, ať si majitel stroje nemusí řešit kompilaci takovéto komponenty, při výměně PC.