Diagnostyka

Dyskusje dotyczące działania obsługi programu LinuxCNC
Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 7877
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Diagnostyka

#1

Post napisał: tuxcnc » 13 lut 2022, 03:21

W przemysłowych maszynach CNC są dość rozbudowane systemy diagnostyki, wystarczy jakiś kabelek odłączyć a maszyna się wyłącza i wyświetla stosowny komunikat.
Pomyślałem, że jak ktoś lubi, to i w Linuxcnc może sobie to zrobić.
Oczywiście pozostaje problem dostępności odpowiedniej ilości wejść i układów generujących sygnały diagnostyczne, ale to już inny temat.
Dla testu opracowałem system, w którym są trzy wejścia (10,11,12) portu LPT1.
Składa się on z komponentów http://linuxcnc.org/docs/2.5/html/man/m ... age.9.html oraz http://linuxcnc.org/docs/2.4/html/man/man9/lut5.9.html
Komponent message odpowiada za wyświetlenie komunikatu gdy któreś z wejść zmieni stan, a komponent lut5 daje możliwość wykonania dowolnej funkcji logicznej z pięciu wejść. Lut5 można porównać do pamięci o pięciu wejściach adresowych i jednym wyjściu. Dla dowolnego adresu można zapisać stan wyjścia na zero lub jeden. Autorzy komponentu rozwiązali to poprzez "dodawanie wag", co jest opisane na linkowanej stronie i ja tego tłumaczyć nie będę.
Przykład działa w ten sposób, że zmiana stanu na dowolnym wejściu powoduje wyświetlenie jednego z trzech komunikatów, ale tylko gdy stan wysoki jest na wejściu 11 a na wejściach 10,12 jest stan niski następuje wyłączenie maszyny.
Tutaj dochodzimy do tego, że można użyć nie tylko fizycznych wejść, ale też dowolnych pinów HAL dających na wyjściu wartości logiczne.
Można na przykład ustawić wyświetlanie komunikatu gdy wrzeciono się kręci, albo gdy nie ma chłodzenia, ale tylko gdy nie ma chłodzenia przy obracającym się wrzecionie maszyna się wyłączy. Po prostu nie należy wyłączać maszyny gdy wystarczy dolać chłodziwa, ale należy ją wyłączyć gdy istnieje możliwość zniszczenia narzędzia i detalu. Przykład może głupi, ale tłumaczący sens zastosowania funkcji logicznych.
Oczywiście mój przykład jest wyjątkowo prosty, ale tylko wyobraźnia ogranicza możliwość jego skomplikowania...

Kod: Zaznacz cały

loadrt message count=3 messages="event1,event2,event3"
addf message.0 servo-thread
addf message.1 servo-thread
addf message.2 servo-thread

loadrt lut5 count=1
addf lut5.0 servo-thread
setp lut5.0.in-3 false #not used, always=0
setp lut5.0.in-4 false #not used, always=0
setp lut5.0.function 0xfffffffb

net input1 parport.0.pin-10-in-not lut5.0.in-0 message.0.trigger
net input2 parport.0.pin-11-in-not lut5.0.in-1 message.1.trigger
net input3 parport.0.pin-12-in-not lut5.0.in-2 message.2.trigger
net estop-external lut5.0.out iocontrol.0.emc-enable-in



Wróć do „LinuxCNC (dawniej EMC2)”