Страница 1 из 3

EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 12:20
Urec
Всех приветствую.
Мое первое сообщение на форуме :D
Прошу помощи.
Купили ГФ2171 с 2С42, привода Мезоматик-К
Забирали на заводе рабочим, когда он к нам доехал- ЧПУ сказало :freak:
Ни самостоятельно, ни с мастером запустить станок не смог, приняли решение модернизировать.

На данный момент ситуация следующая:
Установлен ЕМЦ, платы МЕСА 7И37,7И33-для аналог управления сервами и 5И20+ самодельный ее аналог для входов-выходов.
Энкодеры в ЕМЦ завел, задание на привода подал, ПИД кое-как настроил, станок худо-бедно ездиет.
Для полного шика нехватает концевиков и вращающегося шпинделя.
На станке стоит гидростанция и автоматическая коробка которая управляется электромагнитными клапанами и гидравлика передвигает вилки в коробке.
Открутил разъем нужный по схеме.
На пинах разъема висят управляющие 27вольт, замыкая нужные пины на массу куском провода включаются нужные реле и замыкаются пускатели.
Мотор шпинделя включается в обе стороны, сам шпиндель не крутится- коробка в нейтральном положении, как я понимаю.
Для включения передачи нужно
1. Выбрать для двигателя режим шагов.
2. Раскачивать двигатель замыканием соответствующих пинов вправо-влево, чтобы шестерни могли войти в зацепление.
3. Включить соответствующие электромагнитные клапана.
4.Получить ответ от концевиков что передача включилась
5.Отключить режим шагов.
(честно говоря, не знаю, должно ли остаться напряжение на клапанах)
6. Пустить шпиндель.
Прикрепляю табличку клапанов которые нужно замкнуть чтобы включить нужную частоту шпинделя и отклик по концевикам.

Код: Выделить всё

       A1  A2  A3  A4  A5  A6  O11 O12 O13 O14 O15 O16
40     0   0   0   0   1   0   1   1   1   1   0   1
50     0   1   0   0   1   0   1   0   1   1   0   1
63     1   0   0   0   1   0   0   1   1   1   0   1
80     0   0   0   1   1   0   1   1   1   0   0   1
100    0   1   0   1   1   0   1   0   1   0   0   1
125    1   0   0   1   1   0   1   1   0   1   0   1
160    0   0   1   0   1   0   1   0   0   1   0   1
200    0   1   1   0   1   0   0   1   0   1   0   1
250    1   0   1   0   1   0   1   1   1   1   1   0
315    0   0   0   0   0   1   1   0   1   1   1   0
400    0   1   0   0   0   1   0   1   1   1   1   0
500    1   0   0   0   0   1   1   1   1   0   1   0
630    0   0   0   1   0   1   1   0   1   0   1   0
800    0   1   0   1   0   1   0   1   1   0   1   0
1000   1   0   0   1   0   1   1   1   0   1   1   0
1250   0   0   1   0   0   1   1   1   0   1   1   0
1600   0   1   1   0   0   1   1   0   0   1   1   0
2000   1   0   1   0   0   1   0   1   0   1   1   0
В ЕМЦ средствами pyVCP сделал кнопку:)
наверное, смогу подвязать к ней работу одного выхода gpio платы. Как все это организовать в слаженную работу-пока для меня туманно, обращаюсь к Вам за помощью.
С Уважением.

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 12:25
Urec
Коробка скоростей

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 12:59
nkp
Скрипт + ладдер.
Довольно грамоздко получается...
попробовать разделить на три диапазона

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 13:03
Nick
Urec писал(а):Для включения передачи нужно
1. Выбрать для двигателя режим шагов.
2. Раскачивать двигатель замыканием соответствующих пинов вправо-влево, чтобы шестерни могли войти в зацепление.
3. Включить соответствующие электромагнитные клапана.
4.Получить ответ от концевиков что передача включилась
5.Отключить режим шагов.
(честно говоря, не знаю, должно ли остаться напряжение на клапанах)
6. Пустить шпиндель.
Прикрепляю табличку клапанов которые нужно замкнуть чтобы включить нужную частоту шпинделя и отклик по концевикам.
Да все это лучше решать через ладдер.
А что значит режим шагов? С какой частотой надо шпиндель раскачивать?

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 13:31
Urec
Я понимаю, что включается режим шагов, подается пин и двиг крутится на треть оборота в одну- потом на треть оборота в другую сторону. Наверное, где то в паспорте это описано, я не нашел.
Частоту не знаю, думаю, около 0,5Гц в одну сторону

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 13:36
Nick
Urec писал(а):что включается режим шагов,
Для этого отдельный пин есть?
Urec писал(а):Частоту не знаю, думаю, около 0,5Гц в одну сторону
Это можно на Ladder сделать.

Ты с ladder logic умеешь общаться?
Если нет, для начала надо написать все словами :
1. включаем такой то пин (включается режим шагов)
2. подаем сингалы на эти пины с интервалом 0.5 Гц
3. как только срабатывает такой-то концевик, выключаем такие-то пины.

Кстати, а как у тебя выполнено само переключение передач и как оно привязано к Gкоду? Через отдельные выходы, или через скорость вращения шпинделя?

Re: EMC+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 13:57
Rafiq
Коробка скотостей? :D :D Хм, интересно :)

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:21
Алексс
видел процесс переключеия на harmle - частота около 1-2Hz, амплитуда совсем небольшая - градусов 30.
подозреваю, что режим шагов это типа jog на частотнике.

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:31
Lexxa
я вот не помню, а топикстартер не указалесть ли у шпинделя привод.
Мне смутно помнится, что нет. Следоательно при переключении передач используется "толчек шпинделя".
То же самое что и у меня, но с автоматической коробкой.
Толчек шпинделя включает пучкатель Шпиндель вперед буквально на полсекунды. Ладдер и никакого геморра.

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:37
nkp
вот в этой теме Dmaster сделал все на ладдере
работает 800 часов (думаю уже больше ;) )
там ,помнится, и схема разжована

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:40
Lexxa
Ссылоку забыл)

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:41
Urec
Lexxa писал(а):Мне смутно помнится, что нет. Следоательно при переключении передач используется "толчек шпинделя".
То же самое что и у меня, но с автоматической коробкой.
Толчек шпинделя включает пучкатель Шпиндель вперед буквально на полсекунды. Ладдер и никакого геморра.
Да да! Все верно!
нужно чтобы именно так и работало.

На шпинделе привода нет. Асинхронник на 1250 об/мин с постоянной частотой вращения и коробка скоростей, диапазон на выходе от 40 до 2000 об.

С Ладдером еще не успел разобраться.
К Г-коду привязку оборотов делать не планировал, если поучится-то супер.
Планировал через PYVSP сделать кнопочки с значением оборотов, и чтобы оператор сам выбирал обороты, станок их включал, а в Г-коде просто М03 и М05.
Если можно отработать через S в Г-коде выбор оборотов-вообще супер, но пока можно без этого.
Еще на станке есть режим торможения шпинделя- на 2 обмотки асинхронника подается постоянка.
Для этого есть пин.

Для включения режима шагов пин есть.
Толчок вправо пин есть
Толчок влево пин есть
Можно упростить задачу, не делать обратную связь по концевикам включенных вилок в коробке.
Просто начать качать туда-сюда шпиндель и выдать правильную комбинацию на электроклапана. И через 10-15 сек прекратить качание.(время качания подобрать опытным путем)

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 14:42
nkp
Lexxa писал(а):Ссылоку забыл)
...поправил

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 16:50
Nick
Urec писал(а):Можно упростить задачу, не делать обратную связь по концевикам включенных вилок в коробке.
Это не сложно :).
Сейчас попробуем что-нибудь нарисовать...

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 17:41
Nick
Вот примерный ladder для шагания вправо/влево по таймеру:
Только почему-то у меня на симуляторе не отображается ход выполнения, может я что-то не так настроил?

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 17:45
Nick
Хотя вот так даже лучше, наверное:

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 20:28
Lexxa
потому что 0мс. addf забыл

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 20:37
Lexxa
Нееее. Делать надо основательно и по уму. Есть концевик в коробасе - юзай. Ник дело говорит, это проще чем надеятьсч на то что типа включилось или нет.

Для смены передач надо м-комманды свои.
И тут мы вновь возвращаемся к вопросу как как по м-команде дернуть пином?
Т.е. в итоге например М111 - установит 1 на пине, который в ладдер передаст включение первой передачи. А ладдер сам разрулит все концевики и выдаст подтверждение, что мол готово, можно продолжать.
По крайней мере взрослые чпу примерно так и работают.

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 23 окт 2012, 21:18
Nick
Lexxa писал(а):И тут мы вновь возвращаемся к вопросу как как по м-команде дернуть пином?
Я же уже раз писал, M62-65: http://www.linuxcnc.org/docs/html/gcode ... ec:M62-M65
И ждать можно 1 на пине через M66 Wait on Input
Lexxa писал(а):потому что 0мс. addf забыл
+1 :good: addf забыл написать.

Кстати, все заново перерисовал, теперь работает как надо:

Re: EMC2+MESA+ГФ2171 программирование коробки скотостей

Добавлено: 25 окт 2012, 09:02
Urec
Всех приветствую.
Извиняюсь за долгое молчание,
продолжаю ковыряться.

При создании профиля ЕМЦ использовал готовый для Месы 5И20
В нем отключен PLC
Добавил строки из мануала

Код: Выделить всё

loadrt classicladder_rt
addf classicladder.0.refresh servo-thread
ЕМЦ начал ругаться сначала на переменную таймер при включении(я пытался описать количество переменных в HAl), потом на переменную servo-thread
(не знаю как правильно перевести thread)
Удалил 2 строку с привязкой к времени серво цикла, ЕМЦ запустился, ладдер открылся, пытаюсь повторить то что Nick нарисовал.
HAL прикрепляю.

Код: Выделить всё

# #######################################
#
# HAL file for HostMot2 with 3 servos
#
# Derived from Ted Hyde's original hm2-seloadrt classicladder_rt numRungs=12 numBits=100 
loadrt classicladder_rt
addf classicladder.0.refresh servo-thread
##numWords=10
##numTimers=10 numMonostables=10 numCounters=10 numPhysInputs=10
##numPhysOutputs=10 numArithmExpr=100 numSections=4 numSymbols=200
##numS32in=5 numS32out=5rvo config
#
# Based up work and discussion with Seb & Peter & Jeff
# GNU license references - insert here. www.linuxcnc.org
#
#
# ########################################
# Firmware files are in /lib/firmware/hm2/7i43/
# Must symlink the hostmot2 firmware directory of sanbox to
# /lib/firmware before running EMC2...
# sudo ln -s $HOME/emc2-sandbox/src/hal/drivers/mesa-hostmot2/firmware /lib/firmware/hm2
#
# See also:
# <http://www.linuxcnc.org/docs/devel/html/man/man9/hostmot2.9.html#config%20modparam>
# and http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?HostMot2
#
# #####################################################################


# ###################################
# Core EMC/HAL Loads
# ###################################

# kinematics
loadrt trivkins

# motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES

# standard components
loadrt pid num_chan=3 

# only the 7i43 needs this, but it doesnt hurt the others
loadrt probe_parport

# hostmot2 driver
# if you have any firmware trouble, enable the debug flags here and see what's going on in the syslog
#loadrt hostmot2 debug_idrom=1 debug_module_descriptors=1 debug_pin_descriptors=1 debug_modules=1
loadrt hostmot2

# load low-level driver
loadrt [HOSTMOT2](DRIVER) config=[HOSTMOT2](CONFIG)

setp hm2_[HOSTMOT2](BOARD).0.pwmgen.pwm_frequency 40000

setp hm2_[HOSTMOT2](BOARD).0.watchdog.timeout_ns 10000000


# ################################################
# THREADS
# ################################################

addf hm2_[HOSTMOT2](BOARD).0.read          servo-thread

addf motion-command-handler                servo-thread
addf motion-controller                     servo-thread

addf pid.0.do-pid-calcs                    servo-thread
addf pid.1.do-pid-calcs                    servo-thread
addf pid.2.do-pid-calcs                    servo-thread

addf hm2_[HOSTMOT2](BOARD).0.write         servo-thread
addf hm2_[HOSTMOT2](BOARD).0.pet_watchdog  servo-thread
       

# ######################################################
# Axis-of-motion Specific Configs (not the GUI)
# ######################################################


# ################
# X [0] Axis
# ################

# axis enable chain
newsig emcmot.00.enable bit
sets emcmot.00.enable FALSE
net emcmot.00.enable => pid.0.enable
net emcmot.00.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.00.enable
net emcmot.00.enable <= axis.0.amp-enable-out 

# encoder feedback
setp hm2_[HOSTMOT2](BOARD).0.encoder.00.counter-mode 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.00.filter 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-mask 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.00.index-mask-invert 0

setp  hm2_[HOSTMOT2](BOARD).0.encoder.00.scale  [AXIS_0]INPUT_SCALE
net motor.00.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.00.position => pid.0.feedback
net motor.00.pos-fb => axis.0.motor-pos-fb #push copy back to Axis GUI

# set PID loop gains from inifile
setp pid.0.Pgain [AXIS_0]P
setp pid.0.Igain [AXIS_0]I
setp pid.0.Dgain [AXIS_0]D
setp pid.0.bias [AXIS_0]BIAS
setp pid.0.FF0 [AXIS_0]FF0
setp pid.0.FF1 [AXIS_0]FF1
setp pid.0.FF2 [AXIS_0]FF2
setp pid.0.deadband [AXIS_0]DEADBAND
setp pid.0.maxoutput [AXIS_0]MAX_OUTPUT

# position command signals
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.00.output-type 1 #pwm on pin1, dir on pin2
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.00.scale  [AXIS_0]OUTPUT_SCALE

net emcmot.00.pos-cmd axis.0.motor-pos-cmd => pid.0.command
net motor.00.command  pid.0.output  =>  hm2_[HOSTMOT2](BOARD).0.pwmgen.00.value


# ################
# Y [1] Axis
# ################

# axis enable chain
newsig emcmot.01.enable bit
sets emcmot.01.enable FALSE
net emcmot.01.enable => pid.1.enable
net emcmot.01.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.01.enable
net emcmot.01.enable <= axis.1.amp-enable-out 

# encoder feedback
setp hm2_[HOSTMOT2](BOARD).0.encoder.01.counter-mode 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.01.filter 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-mask 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.01.index-mask-invert 0

setp  hm2_[HOSTMOT2](BOARD).0.encoder.01.scale  [AXIS_1]INPUT_SCALE
net motor.01.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.01.position => pid.1.feedback
net motor.01.pos-fb => axis.1.motor-pos-fb #push copy back to Axis GUI

# set PID loop gains from inifile
setp pid.1.Pgain [AXIS_1]P
setp pid.1.Igain [AXIS_1]I
setp pid.1.Dgain [AXIS_1]D
setp pid.1.bias [AXIS_1]BIAS
setp pid.1.FF0 [AXIS_1]FF0
setp pid.1.FF1 [AXIS_1]FF1
setp pid.1.FF2 [AXIS_1]FF2
setp pid.1.deadband [AXIS_1]DEADBAND
setp pid.1.maxoutput [AXIS_1]MAX_OUTPUT

# position command signals
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.01.output-type 1 #pwm on pin1, dir on pin2
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.01.scale [AXIS_1]OUTPUT_SCALE

net emcmot.01.pos-cmd axis.1.motor-pos-cmd => pid.1.command
net motor.01.command  pid.1.output  =>  hm2_[HOSTMOT2](BOARD).0.pwmgen.01.value


# ################
# Z [2] Axis
# ################

# axis enable chain
newsig emcmot.02.enable bit
sets emcmot.02.enable FALSE
net emcmot.02.enable => pid.2.enable
net emcmot.02.enable => hm2_[HOSTMOT2](BOARD).0.pwmgen.02.enable
net emcmot.02.enable <= axis.2.amp-enable-out 

# encoder feedback
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.counter-mode 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.filter 1
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-invert 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask 0
setp hm2_[HOSTMOT2](BOARD).0.encoder.02.index-mask-invert 0

setp  hm2_[HOSTMOT2](BOARD).0.encoder.02.scale  [AXIS_2]INPUT_SCALE
net motor.02.pos-fb hm2_[HOSTMOT2](BOARD).0.encoder.02.position => pid.2.feedback
net motor.02.pos-fb => axis.2.motor-pos-fb #push copy back to Axis GUI

# set PID loop gains from inifile
setp pid.2.Pgain [AXIS_2]P
setp pid.2.Igain [AXIS_2]I
setp pid.2.Dgain [AXIS_2]D
setp pid.2.bias [AXIS_2]BIAS
setp pid.2.FF0 [AXIS_2]FF0
setp pid.2.FF1 [AXIS_2]FF1
setp pid.2.FF2 [AXIS_2]FF2
setp pid.2.deadband [AXIS_2]DEADBAND
setp pid.2.maxoutput [AXIS_2]MAX_OUTPUT

# position command signals
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.output-type 1 #pwm on pin1, dir on pin2
setp hm2_[HOSTMOT2](BOARD).0.pwmgen.02.scale [AXIS_2]OUTPUT_SCALE

net emcmot.02.pos-cmd axis.2.motor-pos-cmd => pid.2.command
net motor.02.command  pid.2.output  =>  hm2_[HOSTMOT2](BOARD).0.pwmgen.02.value


# ##################################################
# Standard I/O Block - EStop, Etc
# ##################################################

# create a signal for the estop loopback
net estop-loop iocontrol.0.user-enable-out => iocontrol.0.emc-enable-in

# create signals for tool loading loopback
net tool-prep-loop iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
net tool-change-loop iocontrol.0.tool-change => iocontrol.0.tool-changed


#
# homing
#

#
# In this example, each of the three axes have their own home switch.  All
# home switches are connected to GPIO 25, though hostmot2 boards generally
# have enough GPIO pins to put each axis' home switch on its own pin.
#
# Each switch is normally open, momentarily closed.  When the switch is open,
# GPIO 25 floats high (because that is the hostmot2 way).  When the switch is
# closed, it shorts GPIO 25 to ground.
#
# EMC expects the value on the .home-sw-in HAL pin to be active high, ie
# True when the switch is closed and False when the switch is open.
# We get this behavior by linking the GPIO .in_not pin instead of the .in
# pin.
#

net home-switch <= hm2_[HOSTMOT2](BOARD).0.gpio.025.in_not
net home-switch => axis.0.home-sw-in
net home-switch => axis.1.home-sw-in
net home-switch => axis.2.home-sw-in

# only the Y servo has an index, X and Z home without using the index
net y-index-enable hm2_[HOSTMOT2](BOARD).0.encoder.01.index-enable <=> axis.1.index-enable
# --- SPINDLE-CW ---

setp hm2_5i20.0.gpio.071.is_output true
setp hm2_5i20.0.gpio.071.invert_output true
net spindle-cw <= motion.spindle-on => hm2_5i20.0.gpio.071.out

# --- CNC-READY ---

setp hm2_5i20.0.gpio.070.is_output true
net cnc-ok <= motion.motion-enabled => hm2_5i20.0.gpio.070.out


# --- SPINDLE-CCW ---
setp hm2_5i20.0.gpio.043.is_output true
net spindle-ccw => hm2_5i20.0.gpio.043.out