Co chcemy osiągnąć
Chcemy sterować kierunkiem i obrotami wrzeciona z poziomu LinuxCNC tak, jak na filmie demo:
Założenia
Zakładam, że czytelnik potrafi sprawnie poruszać się w consoli linux. Pomocne może być skonfigurowanie zdalnych sesji X tak jak to opisałem w tym wpisie. W moim przypadku LinuxCNC jest bez monitora i wszystkie operacje wykonuje na nim zdalnie przy pomocy consoli, zdalnych X.
Konfiguracja
Konfiguracja falownika
Pierwszym krokiem jest konfiguracja falownika, aby przyjmował komendy przez port komunikacyjny, ten krok jest omówiony tu.
| Parametr | Wartość | Opis |
|---|---|---|
| PD001 | 2 | Sterowanie przez interfejs komunikacyjny |
| PD002 | 2 | Źródło nastawy obrotów - port komunikacyjny |
| PD163 | 1 | nadanie identyfikatora urządzenia |
| PD164 | 2 | 19200 b/s |
| PD165 | 3 | 8N1 RTU |
Łączymy falownik z komputerem przez konwerter USB<->RS485.

Nic nie musimy instalować, driver jest częścią LinuxCNC. W moim przypadku port komunikacyjny był zmapowany jako /dev/ttyUSB0 ale nie jest to reguła, wiec sprawdź jak jest u ciebie.
Czysta bazowa konfiguracja maszyny CNC
Jako punkt wyjściowy bierzemy domyślną konfigurację wygenerowaną przez kreator. Uruchamiamy kreator i wybieramy tworzenie nowej czystej konfiguracji. Następnie nadajemy nazwę naszym ustawieniom, wybieramy jednostki i parametry silników, na tym etapie nie musimy wszystkiego ustawiać, bo zawsze możemy to zmienić edytując plik.
Odłączamy piny, które domyślnie służyły do sterowania wrzecionem (PIN: 14, 16), jeśli tego nie zrobimy teraz to będziemy musieli usunąć mapowania z pliku konfiguracyjnego ręcznie, bo inaczej aplikacja w chwili uruchomienia zgłosi błąd konfliktu przypisania pinów. Następnie, dodajemy panel z informacjami o aktualnych obrotach wrzeciona.
Konfigurujemy kolejne osie, możemy ominąć ten etap i wprowadzić zmiany w pliku konfiguracyjnym. Ostatnim krokiem jest potwierdzenie ustawień, na pulpicie powinniśmy widzieć nowy skrót do naszej konfiguracji. W moim przypadku nazywa się lunch wrzeciono_test. Kiedy uruchomimy aplikację sterującą na tym etapie, zobaczymy, że możemy virtualnie sterować wrzecionem, ale nic się nie dzieje fizycznie.

Jeśli chcesz zdalnie wywołać konfiguracje przez zdalne X, opisane dokładnie w innym wpisie, użyj:
linuxcnc /home/cnc/linuxcnc/configs/wrzeciono_test/wrzeciono_test.ini
Zmiany w konfiguracji
Mając naszą bazową konfigurację, wprowadzamy w niej pewne zmiany. Do pliku custom.hal w katalogu naszej konfiguracji, który w moim przypadku jest "/home/cnc/linuxcnc/configs/wrzeciono_test/" dodajemy poniższy kod:
loadusr -Wn vfd hy_vfd -n vfd -t 1 -d /dev/ttyUSB0 -p none -r 19200 -s 1
net spindle-cmd-rpm-abs => vfd.speed-command
net spindle-cw motion.spindle-forward => vfd.spindle-forward
net spindle-ccw motion.spindle-reverse => vfd.spindle-reverse
net on motion.spindle-on => vfd.spindle-onŁadujemy sterownik, z odpowiednimi parametrami transmisji oraz portem. Następnie łączymy wirtualne piny odpowiedzialne za wrzeciono.
Jeśli w twoim przypadku adres portu komunikacyjnego jest inny to go zmień na właściwy dla ciebie, u mnie to jest /dev/ttyUSB0. Teraz edytujemy plik custom_postgui.hal. Końcówka powinna wygadać następująco:
# **** force spindle at speed indicator true because we have no feedback ****
net spindle-at-speed => pyvcp.spindle-at-speed-led
net spindle-at-speed => vfd.spindle-at-speed
setp vfd.enable 1Pliku wrzeciono_test.hal nie musimy edytować, zamieszczam tu jego zawartość, aby pomóc przy rozwiązywaniu ewentualnych problemów przy konfliktach i błędach konfiguracji. Mogą się takie pojawić jeśli podłączymy dwa lub więcej wirtualnych źródeł do tego samego wirtualnego pinu.
# Generated by stepconf 1.1 at Fri Jun 7 16:18:24 2019
# If you make changes to this file, they will be
# overwritten when you run stepconf again
loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt hal_parport cfg="0 out"
setp parport.0.reset-time 5000
loadrt stepgen step_type=0,0,0
addf parport.0.read base-thread
addf stepgen.make-pulses base-thread
addf parport.0.write base-thread
addf parport.0.reset base-thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
net spindle-cmd-rpm <= motion.spindle-speed-out
net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
net spindle-cmd-rps <= motion.spindle-speed-out-rps
net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
net spindle-at-speed => motion.spindle-at-speed
net estop-out => parport.0.pin-01-out
net xstep => parport.0.pin-02-out
setp parport.0.pin-02-out-reset 1
net xdir => parport.0.pin-03-out
net ystep => parport.0.pin-04-out
setp parport.0.pin-04-out-reset 1
net ydir => parport.0.pin-05-out
net zstep => parport.0.pin-06-out
setp parport.0.pin-06-out-reset 1
net zdir => parport.0.pin-07-out
net astep => parport.0.pin-08-out
setp parport.0.pin-08-out-reset 1
net adir => parport.0.pin-09-out
net xenable => parport.0.pin-17-out
setp stepgen.0.position-scale [AXIS_0]SCALE
setp stepgen.0.steplen 1
setp stepgen.0.stepspace 0
setp stepgen.0.dirhold 35000
setp stepgen.0.dirsetup 35000
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd
net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb
net xstep <= stepgen.0.step
net xdir <= stepgen.0.dir
net xenable axis.0.amp-enable-out => stepgen.0.enable
setp stepgen.1.position-scale [AXIS_1]SCALE
setp stepgen.1.steplen 1
setp stepgen.1.stepspace 0
setp stepgen.1.dirhold 35000
setp stepgen.1.dirsetup 35000
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
net ypos-cmd axis.1.motor-pos-cmd => stepgen.1.position-cmd
net ypos-fb stepgen.1.position-fb => axis.1.motor-pos-fb
net ystep <= stepgen.1.step
net ydir <= stepgen.1.dir
net yenable axis.1.amp-enable-out => stepgen.1.enable
setp stepgen.2.position-scale [AXIS_2]SCALE
setp stepgen.2.steplen 1
setp stepgen.2.stepspace 0
setp stepgen.2.dirhold 35000
setp stepgen.2.dirsetup 35000
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd
net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb
net zstep <= stepgen.2.step
net zdir <= stepgen.2.dir
net zenable axis.2.amp-enable-out => stepgen.2.enable
net estop-out <= iocontrol.0.user-enable-out
net estop-out => iocontrol.0.emc-enable-in
loadusr -W hal_manualtoolchange
net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-preparedUwaga
Jeśli nadal masz problemy z konfiguracją maszyny CNC, podłączeniem falownika, napisaniem skryptu rozważ skorzystanie z moich komercyjnych usług.



