AG-400. Пересадка мозга.

Тяжелые фрезерные станки по металлу.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Nick писал(а):Может тогда что-то вроде max(in1,in2) надо сделать?
В смысле самому написать? Можно конечно, но пока лениво. :)
Nick писал(а):А начальные параметры какие были?
Может ему надо было дать по больше подергаться?
P=1, остальные 0. В том-то и дело, что кроме первого раза так и не смог запустить автонастройку. :(
Nick писал(а):вот такие пины есть:
Ну да, за эти и дёргал, только видимо не в том порядке, потому и засомневался. Правда дёргал не долго - уже очень хотелось домой ужинать. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Сергей Саныч »

UAVpilot писал(а):Ну если на любом входе есть float отличный от нуля, то он должен появится и на выходе.
А как поступать с отрицательными значениями? Или они не предполагаются?
Чудес не бывает. Бывают фокусы.
asutpka
Мастер
Сообщения: 294
Зарегистрирован: 17 апр 2013, 14:27
Репутация: 78
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение asutpka »

UAVpilot писал(а):Новые мозги хоть и меньше по объёму, но гораздо умнее
Изображение
вопрос по компоновке- если предполагается герметичный, ну или пылезашитный корпус шкафа , то по моему стремление прибить электронику в шкафу повыше неминуемо приведёт к перегреву, дело времени. проверено на личном опыте и госденьгах :cry: .
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Serg-tmn писал(а):А как поступать с отрицательными значениями? Или они не предполагаются?
отрицательные не исключение. В принципе по одному из входов можно ограничить только одной полярностью.
asutpka писал(а):вопрос по компоновке- если предполагается герметичный, ну или пылезашитный корпус шкафа
Ну социалистические инженеры-конструкторы дураками точно небыли. :)
На последней фотке с двумя импульсниками виден штатный вентилятор на задней стенке. В дне этой "коробки" стоят два пылевых фильтра.

P.S. Вся электрическая часть станка (трансформаторы, усилители, реле) охлаждается штатным кондиционером с фреоном и т.п.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2857
Откуда: Тюмень
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Сергей Саныч »

UAVpilot писал(а):отрицательные не исключение. В принципе по одному из входов можно ограничить только одной полярностью
Хорошо, а если на одном входе минус сколько-нибудь, а на другом - плюс какой нибудь, где должен быть командир какое значение должно быть на выходе - оба отличны от нуля?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Знал ведь, что этот вопрос возникнет, но поленился сразу написать: по условиям задачи такого не будет. Если на выходе уже есть какое-то значение, то подавать что-то на второй вход нет смысла, да и не дойдёт до этого.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

UAVpilot писал(а):Ну да, за эти и дёргал, только видимо не в том порядке, потому и засомневался. Правда дёргал не долго - уже очень хотелось домой ужинать. :)
Подёргал - разобрался. Надо одновременно включать сигналы spindle-cw и spindle-on и на spindle-speed-out подавать значение скорости.
А со складыванием аналоговых сигналов задачу упростил - применю мультиплексор, благо сигнал для его управления есть.

У станка есть две педали: разжим инструмента и разжим стола (поворотного). Поворотного стола с гидрозажимом точно не будет. Что полезного навесить на вторую педаль?
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Так как всётаки посчитать перемещения осей?
Есть-ли какой сигнал, который появляется при начале движения оси? Сам я пока не нашёл...
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Если кому интересно - переключение скоростей с проворотом шпинделя, если шестерёнки застрянут:

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

# Проворот шпинделя
#
# motion.spindle-speed-out >------------------------*---XXX---*---> spindle-vel-cmd
#                                                   |   ___   |
#                                                   +->|mx |  |
# 10.0 >---------------------------------------------->|   |>-+
#                                                 +----|___|
#                                                 |
# motion.spindle-on >-------*---------------------+-*---XXX---*---> spindle-on
#                           |                     | |   ___   |
#                           |                     | +--|1  |  |
#                           |                     |    |   |--+
#                           |                     *----|___|
#                           |                     |
# motion.spindle-forward >--+---------------------+-*---XXX---*---> spindle-cw
#                           |                     | |   ___   |
#                           |             ____    | +--|1  |  |
#                           |            | T  |   |    |   |--+
# spindle-jog >-------------+------------|C   |---*----|___|
#                           |    1 >-----|D   |   |
#                           |         +--|R   |   +---------------> spindle-jog-proc
#                           |   ___   |  |____|
#                           +--|1  |  |
# spindle-jog-off1 >-----------|   |--+
# spindle-jog-off2 >-----------|___|
#

unlinkp motion.spindle-speed-out
unlinkp motion.spindle-on
unlinkp motion.spindle-forward

net t.sp-sout motion.spindle-speed-out => mx_sspeed.in0
setp mx_sspeed.in1 10.0
net spindle-vel-cmd <= mx_sspeed.out

net t.spon motion.spindle-on => or_spinon.in0 => or_sjogoff.in-00
net spindle-on <= or_spinon.out

net t.spfw motion.spindle-forward => or_spincw.in0
net spindle-cw <= or_spincw.out

net spindle-jog-proc ff_sjog.out => mx_sspeed.sel => or_spinon.in1 => or_spincw.in1
net spindle-jog => ff_sjog.clk
setp ff_sjog.data 1
net t.spjogr or_sjogoff.or => ff_sjog.reset
net spindle-jog-off1 => or_sjogoff.in-01
net spindle-jog-off2 => or_sjogoff.in-02

# Переключение диапазонов шпинделя
#                            ____
# band.1.turn >-------------|C T |
#                     _     |    |--*----------------> band.1.set
#                 +--|_|o---|D   |  |
# band.1 >--------*---------|R   |  |
#                 |         |____|  |
#                 |          ___    |
#                 +---------|_n_|---+----------------> spindle-jog-off1
#                           |___|   |   __     __
#                                   +--|1 |   |w1|
#                                      |  |---|5c|---> spindle-jog
#                                   +--|__|   |__|
#                            ____   |
# band.2.turn >-------------|C T |  |
#                     _     |    |--*----------------> band.2.set
#                 +--|_|o---|D   |
# band.2 >--------*---------|R   |
#                 |         |____|
#                 |          ___
#                 +---------|_n_|--------------------> spindle-jog-off2
#                           |___|
#

# 1 диапазон
net band.1.turn => ff_band1.clk
net band.1 => ff_band1.reset => not_band1t.in => os_sjog1.in
net band.1.set <= ff_band1.out => or_bandset.in0
net t.band1r not_band1t.out => ff_band1.data
net spindle-jog-off1 <= os_sjog1.out
setp os_sjog1.width 1

# 2 диапазон
net band.2.turn => ff_band2.clk
net band.2 => ff_band2.reset => not_band2t.in => os_sjog2.in
net band.2.set <= ff_band2.out => or_bandset.in1
net t.band2r not_band2t.out => ff_band2.data
net spindle-jog-off2 <= os_sjog2.out
setp os_sjog2.width 1

net t_sjogtd or_bandset.out => td_sjog.in
net spindle-jog <= td_sjog.out
setp td_sjog.on-delay 5
setp td_sjog.off-delay 0
Надо будет ещё дописать код для автонажатия e_stop, если не получится переключить за разумное время.
Последний раз редактировалось Serg 29 июл 2013, 13:56, всего редактировалось 1 раз.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение nkp »

UAVpilot писал(а):Есть-ли какой сигнал, который появляется при начале движения оси
а момент появления не нулевой скорости - не оно?
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Да, это подойдёт.
Ещё нужен какой-то накапливающий сумматор... Очень не хочется писать свой компонент, а хочется обойтись штатным набором.
Попробовать чтоль sample_hold с обратной связью?..
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Nick »

По первому вопросу, возможно edge + motion.current-vel
http://linuxcnc.org/docs/html/man/man9/edge.9.html
UAVpilot писал(а):Ещё нужен какой-то накапливающий сумматор...
integ не оно?
http://linuxcnc.org/docs/html/man/man9/integ.9.html


ЗЫ со шпинделем красиво написал, надо будет на досуге вчитаться/разобраться :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Nick писал(а):integ не оно?
Не, надо что-то вроде сумматора с D-триггером, но для float. :freak: sum2+sample_hold вроде подходит, если от закольцовывания им не поплохеет.
Nick писал(а):ЗЫ со шпинделем красиво написал, надо будет на досуге вчитаться/разобраться :)
Это я всячески пытаюсь избежать classiclader'а и изображаю из себя компилятор верилога. :idiot: :hehehe:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Nick »

UAVpilot писал(а):Не, надо что-то вроде сумматора с D-триггером, но для float.
А как оно работает? для меня все это незнакомые слова :monkey:
sum2+sample_hold вроде подходит, если от закольцовывания им не поплохеет.
А чем им будет то :)
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Так понятнее или ты хочешь словами?

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

                           _____
                          |shold|
 start >------------------|hold |
              ____        |  out|----*-------> result
 s32 >-------|sum2|       |     |    |
             |    |-------|in   |    |
           +-|____|       |_____|    |
           |                         |
           +-------------------------+
А вообще задумался: нужно-ли периодичность смазки расчитывать на основе длинны перемещений по осям, не будет-ли правильнее учитывать только количество этих перемещений? Ведь если считать длину, то куча мелких перемещений может просто протереть дыру в одном месте без масла... :thinking:
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
elephant007
Мастер
Сообщения: 857
Зарегистрирован: 18 ноя 2012, 13:12
Репутация: 332
Откуда: Сибирь, Томск
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение elephant007 »

а смысл? у тебя масла что-ли ограниченный запас? инъекция каждые n минут при поданном на привода питании. его там дозируется то всего ничего.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Сейчас так и работает, но при таких умных мозгах это кощунство. :hehehe:
Опять-же лишнее масло - лишняя грязь. В станке много мест, где есть масло и попадает пыль, а доступа для чистки нет.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
elephant007
Мастер
Сообщения: 857
Зарегистрирован: 18 ноя 2012, 13:12
Репутация: 332
Откуда: Сибирь, Томск
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение elephant007 »

вот как раз в таких местах маслом всю грязь к фильтрам и смоет. типа как в ДВС.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

С направляющих-то смоет, но останется там, куда смывает.
Я ж не выдумываю, а описываю как оно есть в реальности. И так станки через некоторое время покрываются тонкой плёнкой масляной грязи, а не везде есть доступ, чтоб её отмыть.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: AG-400. Пересадка мозга.

Сообщение Serg »

Родил смазку направляющих в зависимости от количества перемещения осей.

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

# Периодичность смазки направляющих (кол-во движени оси)
sets lube-period 10

loadrt logic names=or_lube_rst personality=0x203
addf or_lube_rst servo-thread

loadrt and2 names=and_lubelow
addf and_lubelow servo-thread

loadrt or2 names=or_lube
addf or_lube servo-thread

loadrt not names=not_xinpos,not_yinpos,not_zinpos
addf not_xinpos servo-thread
addf not_yinpos servo-thread
addf not_zinpos servo-thread

loadrt timedelay names=td_lubeerr,td_sjog
addf td_lubeerr servo-thread
addf td_sjog servo-thread

loadrt mux2 names=mx_sspeed
addf mx_sspeed servo-thread

loadrt adder names=add_xlube,add_ylube,add_zlube
addf add_xlube servo-thread
addf add_ylube servo-thread
addf add_zlube servo-thread

loadrt conv_u32_float names=uf_xlube,uf_ylube,uf_zlube
addf uf_xlube servo-thread
addf uf_ylube servo-thread
addf uf_zlube servo-thread

loadrt comp names=cmp_xlube,cmp_zlube,cmp_zlube
addf cmp_xlube servo-thread
addf cmp_ylube servo-thread
addf cmp_zlube servo-thread

loadrt message names=msg_lubelow,msg_lubeerr messages="Низкий уровень смазки,Отказ смазки"
addf msg_lubelow servo-thread
addf msg_lubeerr servo-thread

# Контроль уровня масла (если при включении уровень мал, то выключить)
net lube.low => and_lubelow.in0
net machine-on => and_lubelow.in1
net machine-offlube and_lubelow.out => msg_lubelow.trigger => or_machineoff.in-01

# Смазка направляющих
#
# lube-period >-------------------------------+
#                                 _____       |
#                        _       | add |      |   ___
# axis.0.in-position >--|_|o-----|C    |--U/F-+--| = |-+
#                  1 >-----------|D    |      *--|___| |
#                             +--|R    |      |        |
#                             |  |_____|      |        |
#                             |   _____       |        |  __
#                        _    |  | add |      |   ___  +-|1 |
# axis.1.in-position >--|_|o--+--|C    |--U/F-+--| = |---|  |-+
#                  1 >--------+--|D    |      *--|___| +-|__| |
#                             *--|R    |      |        |      |
#                             |  |_____|      |        |      |
#                             |   _____       |        |      |
#                        _    |  | add |      |   ___  |      |
# axis.2.in-position >--|_|o--+--|C    |--U/F-+--| = |-+      |
#                  1 >--------+--|D    |      +--|___|        |
#                             *--|R    |                      |
#                             |  |_____|                      |
#             +---------------*-------------------------------+
#             |   __         ____       __
# lube.auto   +--|1 |       | T  |     |w1|
#                |  |-------|C   |--*--|15|---> msg_lubeerr
# lube.manual >--|__|  1 >--|D   |  |  |__|
#                           |    |  |
# lube.completed >----------|R   |  +---------> lube.on
#                           |____|
#
net _x.inpos axis.0.in-position => not_xinpos.in
net _x.move not_xinpos.out => add_xlube.clk
setp add_xlube.data 1
net _x.lubeout add_xlube.out => uf_xlube.in
net _x.lubefout uf_xlube.out => cmp_xlube.in0
net lube-period cmp_xlube.in1
setp cmp_xlube.hyst 1.0
net _x.lubeeq cmp_xlube.equal => or_lube_rst.in-00

net _y.inpos axis.1.in-position => not_yinpos.in
net _y.move not_yinpos.out => add_ylube.clk
setp add_ylube.data 1
net _y.lubeout add_ylube.out => uf_ylube.in
net _y.lubefout uf_ylube.out => cmp_ylube.in0
net lube-period cmp_ylube.in1
setp cmp_ylube.hyst 1.0
net _y.lubeeq cmp_ylube.equal => or_lube_rst.in-01

net _z.inpos axis.2.in-position => not_zinpos.in
net _z.move not_zinpos.out => add_zlube.clk
setp add_zlube.data 1
net _z.lubeout add_zlube.out => uf_zlube.in
net _z.lubefout uf_zlube.out => cmp_zlube.in0
net lube-period cmp_zlube.in1
setp cmp_zlube.hyst 1.0
net _z.lubeeq cmp_zlube.equal => or_lube_rst.in-02

net lube.auto or_lube_rst.or => or_lube.in0 add_xlube.reset add_ylube.reset add_ylube.reset
net lube.manual => or_lube.in1
net lube.shot or_lube.out => ff_lube.clk
setp ff_lube.data 1
net lube.completed => ff_lube.reset
net lube.on <= ff_lube.out => td_lubeerr.in
setp td_lubeerr.on-delay 15
setp td_lubeerr.off-delay 0
net lube.err td_lubeerr.out => msg_lubeerr.trigger
Правда как не изворачивался, но пришлось родить совственный HAL-компонент "накапливающий сумматор":

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

component adder "adder accumulator";
pin in u32 data_ "data input";
pin in bit clk "clock, rising edge added data to out";
pin in bit sub "FALSE - summation, TRUE subtraction";
pin in bit reset "when true, force out zero";
pin out u32 out "output";
option data adder_data;

function _ nofp;
license "GPL";
;;

typedef struct { int oldclk; } adder_data;

FUNCTION(_) {
	int c;

	c = clk;
	if (reset) {
		out = 0;
        } else if ( c && ! data.oldclk ) {
		if (sub)
			out -= data_;
		else
			out += data_;
	}
	data.oldclk = c;
}
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Фрезерные станки по металлам»