LinuxCNC - czujnik narzędzia - drgania styków
: 07 mar 2024, 13:49
Generalnie do tej pory zakładałem zawsze sprzętowy filtr (zazwyczaj kondensator) na wyjście z sondy próbkującej - u mnie to czujnik offsetów narzędzia.
Czujnik stykowy - narzędzie dotykając czujnika zwiera sygnał. Jak wiadomo, wszelkiego rodzaju czujniki mechaniczne powodują powstawanie zjawiska "drgania styków" -
Ale tak zacząłem się zastanawiać, jakby to rozwiązać programowo/systemowo bez konieczności montowania dodatkowych elementów - nie żeby to był jakiś koszt, ale zawsze łatwiej dopisać kilka linijek niż przylutować kondensator.
Problem jest taki, że linuxCNC zgłasza błąd, gdy wystąpi narastające zbocze na pinie sondowania, w momencie, gdy następuje ruch który nie jest ruchem sondowania. Wtedy zgłasza błąd: Probe tripped during non-probe move
Noi w sumie znalazłem podpowiedź na forum linuxcnc
https://forum.linuxcnc.org/38-general-l ... e?start=10
aby podłączyć wejście czujnika przez bramkę and, a drugie wejście bramki sterować z poziomu G-kodu który wykonuje pomiar.
W sumie to proste i działa.
Użyłem pin motion.digital-out-00 którego można sterować za pomocą M-kodów np. M64/M65.
Czyli przykładowe sondowanie wygląda tak:
Wszystko byłoby ok, ale nadal czasami wyskakuje błąd: Probe tripped during non-probe move
Trochę poszukałem, i okazuje się, że on następuje po zakończeniu G38.3 ale jeszcze przed lub w trakcie M65 P00.
Czyli tak naprawdę zgłasza błąd wykrycia sondy podczas ruchu, nawet gdy ruchu nie ma.
Poszperałem w źródłach LinuxCNC i znalazłem moment w którym błąd ten jest wyświetlany:
Niby jest sprawdzanie, czy jest aktualnie ruch ale coś chyba nie działa.
I niby można sobie to w źródłach wykomentować (ale to zwykłe druciarstwo) albo odnaleźć gdzie jest błąd - trzeba by trochę więcej chęci do tego ale da się.
Ktoś ma jakieś doświadczenie ze zgłaszaniem błędów do twórców LinuxCNC?
To nie jest jakiś krytyczny błąd, ale skoro został zauważony to warto by nie zachowywać go tylko dla siebie.
Czujnik stykowy - narzędzie dotykając czujnika zwiera sygnał. Jak wiadomo, wszelkiego rodzaju czujniki mechaniczne powodują powstawanie zjawiska "drgania styków" -
Ale tak zacząłem się zastanawiać, jakby to rozwiązać programowo/systemowo bez konieczności montowania dodatkowych elementów - nie żeby to był jakiś koszt, ale zawsze łatwiej dopisać kilka linijek niż przylutować kondensator.
Problem jest taki, że linuxCNC zgłasza błąd, gdy wystąpi narastające zbocze na pinie sondowania, w momencie, gdy następuje ruch który nie jest ruchem sondowania. Wtedy zgłasza błąd: Probe tripped during non-probe move
Noi w sumie znalazłem podpowiedź na forum linuxcnc
https://forum.linuxcnc.org/38-general-l ... e?start=10
aby podłączyć wejście czujnika przez bramkę and, a drugie wejście bramki sterować z poziomu G-kodu który wykonuje pomiar.
W sumie to proste i działa.
Użyłem pin motion.digital-out-00 którego można sterować za pomocą M-kodów np. M64/M65.
Czyli przykładowe sondowanie wygląda tak:
Kod: Zaznacz cały
M64 P00 (Uruchomienie wejścia sondy)
G38.3 X-3 F150 (Pomiar do kontaktu)
M65 P00 (wyłączenie wejścia sondy)
Trochę poszukałem, i okazuje się, że on następuje po zakończeniu G38.3 ale jeszcze przed lub w trakcie M65 P00.
Czyli tak naprawdę zgłasza błąd wykrycia sondy podczas ruchu, nawet gdy ruchu nie ma.
Poszperałem w źródłach LinuxCNC i znalazłem moment w którym błąd ten jest wyświetlany:
Kod: Zaznacz cały
if (emcmotStatus->probing) {
/* check if the probe has been tripped */
if (emcmotStatus->probeVal ^ probe_whenclears) {
/* remember the current position */
emcmotStatus->probedPos = emcmotStatus->carte_pos_fb;
/* stop! */
emcmotStatus->probing = 0;
emcmotStatus->probeTripped = 1;
tpAbort(&emcmotInternal->coord_tp);
/* check if the probe hasn't tripped, but the move finished */
} else if (GET_MOTION_INPOS_FLAG() && tpQueueDepth(&emcmotInternal->coord_tp) == 0) {
/* we are already stopped, but we need to remember the current
position here, because it will still be queried */
emcmotStatus->probedPos = emcmotStatus->carte_pos_fb;
emcmotStatus->probing = 0;
if (probe_suppress) {
emcmotStatus->probeTripped = 0;
} else if(probe_whenclears) {
reportError(_("G38.4 move finished without breaking contact."));
SET_MOTION_ERROR_FLAG(1);
} else {
reportError(_("G38.2 move finished without making contact."));
SET_MOTION_ERROR_FLAG(1);
}
}
} else if (!old_probeVal && emcmotStatus->probeVal) {
// not probing, but we have a rising edge on the probe.
// this could be expensive if we don't stop.
int i;
int aborted = 0;
if(!GET_MOTION_INPOS_FLAG() && tpQueueDepth(&emcmotInternal->coord_tp)) {
// running an command
tpAbort(&emcmotInternal->coord_tp);
reportError(_("Probe tripped during non-probe move."));
SET_MOTION_ERROR_FLAG(1);
}
I niby można sobie to w źródłach wykomentować (ale to zwykłe druciarstwo) albo odnaleźć gdzie jest błąd - trzeba by trochę więcej chęci do tego ale da się.
Ktoś ma jakieś doświadczenie ze zgłaszaniem błędów do twórców LinuxCNC?
To nie jest jakiś krytyczny błąd, ale skoro został zauważony to warto by nie zachowywać go tylko dla siebie.