Затеял на одном из фрезеров переход с gmoccapy на QTdragon. Воодные такие:
Станок на mesa 7i92, ПЧ 9100 рулится по модбасу. Образ дебиана с сайта linuxcnc.
Изначально, работал на lcnc 2.8.4, на нем же и решил переходить, однако столкнулся с определенным набором проблем.
На искомой версии не удалось подключить вывод параметров частотника на GUI, воевал три дня и три ночи.
В custom_postgui было так:
#---шпиндель---
net spindle.amp qtdragon.spindle_amps vfdmod.parameters.output-current
net spindle.volts qtdragon.spindle_volts vfdmod.parameters.output-voltage
Переписывал со стрелочками и без- результат один. Все параметры vfdmod в hal pins видит, но на qtdragon упорно не заводит.net spindle.amp qtdragon.spindle_amps vfdmod.parameters.output-current
net spindle.volts qtdragon.spindle_volts vfdmod.parameters.output-voltage
Проблема решилась переходом на lcnc 2.9.0, изменил в custom_postgui название пинов qtdragon в соответствии с наименованием версии и все заработало:
#---шпиндель---
net spindle.amps qtdragon.spindle-amps <= vfdmod.parameters.output-current
net spindle.volts qtdragon.spindle-volts <= vfdmod.parameters.output-voltage
Казалось бы, проблема решилась и можно идти домой пить пиво, но не тут то было.net spindle.amps qtdragon.spindle-amps <= vfdmod.parameters.output-current
net spindle.volts qtdragon.spindle-volts <= vfdmod.parameters.output-voltage
В версиях lcnc 2.8.4/2.9.0/2.10 существуют одинаковые проблемы с qtdragon. Мне так и не удалось запустить на них выполнение УП.
Дело в том, что QT внутри себя пересчитывает обороты, получаемые от ПЧ х60 (рассчитан не на rpm, а на rps?). Для корректного отображения оборотов и срабатывания сигнала at-speed приходится в my_config_file.ini править множитель и делитель оборотов с учетом внутреннего умножения х60 внутри QT
[SpindleRpmIn]
# Function code:
# 0x06 - write single register (default).
# 0x10 - write multiple registers.
;FunctionCode=0x06
Address=0x2000
Multiplier=10
Divider=24
[SpindleRpmOut]
# An address of the output speed (or frequency) register.
;FunctionCode=0x06
Address=0x3001
Multiplier=1
Divider=6
То есть, при входном задании в 6000 об./мин в частотник, он дает ответ о том, что вышел 100 об., QT внутри себя применяет множитель и в итоге мы получаем срабатывание at-speed и корректное отображение оборотов. Но, УП при этом дальше не движется.# Function code:
# 0x06 - write single register (default).
# 0x10 - write multiple registers.
;FunctionCode=0x06
Address=0x2000
Multiplier=10
Divider=24
[SpindleRpmOut]
# An address of the output speed (or frequency) register.
;FunctionCode=0x06
Address=0x3001
Multiplier=1
Divider=6
В hal станка мы имеем:
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs <= spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rpm => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
в сustom:
net spindle-vel-cmd-rps <= spindle.0.speed-out-rps
net spindle-vel-cmd-rps-abs <= spindle.0.speed-out-rps-abs
net spindle-vel-cmd-rpm <= spindle.0.speed-out
net spindle-vel-cmd-rpm-abs <= spindle.0.speed-out-abs
net spindle-enable <= spindle.0.on
net spindle-cw <= spindle.0.forward
net spindle-ccw <= spindle.0.reverse
net spindle-brake <= spindle.0.brake
net spindle-revs <= spindle.0.revs
net spindle-at-speed => spindle.0.at-speed
net spindle-vel-fb-rpm => spindle.0.speed-in
net spindle-index-enable <=> spindle.0.index-enable
loadusr -W vfdmod --debug my-config-file.ini
net spindle-cw => vfdmod.control.run-forward
net spindle-ccw => vfdmod.control.run-reverse
net spindle-vel-fb-rpm <= vfdmod.spindle.rpm-out
net spindle-vel-cmd-rpm => vfdmod.spindle.rpm-in
net spindle-at-speed <= vfdmod.spindle.at-speed
Подобная ситуация с зависанием выполнения УП была у меня на gmoccapy, когда УП я написал не под стандартные для меня подача на оборот, а подача на зуб (G95 вместо G94).net spindle-cw => vfdmod.control.run-forward
net spindle-ccw => vfdmod.control.run-reverse
net spindle-vel-fb-rpm <= vfdmod.spindle.rpm-out
net spindle-vel-cmd-rpm => vfdmod.spindle.rpm-in
net spindle-at-speed <= vfdmod.spindle.at-speed
Финальной проблемой является УП под гравер. Версии 2.9/2.10 выдают ошибку при выборе УП с гравировкой. На gmoccapy ошибка появляется, нет визуализации УП и не видно gcode, однако программа выполняется. На QT ошибка приводит к вылетанию lcnc в целом. Ошибка везде одинаковая:
Traceback (most recent call last)
File "/usr/lib/python3/dist-packages/qtvcp/widgets/gcode_editor.py", line
612, in load_program
self.load_text(filename)
File "/usr/lib/python3/dist-packages/qtvcp/widgets/gcode_editor.py", line
322, in load_text
self.setText(f.read())
File "/usr/lib/pyton3.7/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data,self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 29:
invalid start byte
Помогите, пожалуйста, советом как этот букет исправить.File "/usr/lib/python3/dist-packages/qtvcp/widgets/gcode_editor.py", line
612, in load_program
self.load_text(filename)
File "/usr/lib/python3/dist-packages/qtvcp/widgets/gcode_editor.py", line
322, in load_text
self.setText(f.read())
File "/usr/lib/pyton3.7/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data,self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 29:
invalid start byte