Перейти к содержимому


Фотография

Работа с подпрограммами на стойке Syntec


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 28 Сентябрь 2021 - 15:52

Доброго времени суток! Напишу много текста, однако важного. Сам уже не новичок в станках и программировании, несколько разных стоек перебирал от механики до макропрограммирования, но Syntec решил мне по правому мизинцу левой ноги своей красивой угловатой стойкой въехать так, что аж в мозжечке отдает теперь. Собственно от бомбежки к делу:
Есть стойка Syntec EZ4. Станок подгоняем под Nesting систему. Программа, которой делаем УП для станка не умеет делать гравировки (конкретно - вензеля всякие сложные, простые углы на V120 или V45 делает) и поэтому, чтобы на деталях были те самые "вензеля" мы сделали ход лошадью и запустили подпрограммы. На стойке OSAI (Beaver 25avlt) работает как надо. Там все с кодом понятно, быстро разобрались. Если кому надо, то вот собственно:


;( установка позиции для нашей ПП X=205.000, Y=305.000)
(UTO, 1, X205.000, Y305.000)
;( установка угла поворота=-0.000)
(ROT, -0.000)
;(вызов самой подпрограммы с названием: 'C119-1center-c')
(CLS, C119-1center-c)
;(на этом все колдовство кончилось)

Эти строчки счастья пишем в основной программе в любом удобном для нас месте и ВАЖНО, чтобы эти коды были в конце какой-либо обработки. Это чтобы фреза была в шпинделе.

Ну а сами подпрограммы - это обычные арткамовские уп для нужного нам станка, только с корректировками:
в начале УП мы удаляем все строки безопасности и замены фрезы так, чтобы она начиналась с кода G00 куда-то там идет по X Y Z, или еще как-то там у вас будет. В конце программы удаляем все остановки M кодов, подпрограмма в итоге кончается на подъеме безопасной высоты Z5.000, например. И последнее - эта подпрограмма должна быть без расширения в названии файла. То есть без всяких .cnc или .nc. Именно удалить, чтобы файл сам ничем не мог читаться (условно). 

Тут-то все понятно. Шифр не долго догоняли, не то чтобы программировать в блокноте радиусные интерполяции, но и не линию нарисовать в арткаме.

А вот Syntec так просто не сдается.
Во первых:
У него есть 4 вида координат (не новость))): 
Абсолютные: G90 и обычно работают они в паре с табличкой G54 (ноль по детали). Мы с вами в них и работаем по умолчанию.
Машинные: не заморачиваемся, нужны для калибровки инструмента и его смене. В ПП они не играют роли.
Distance To Go: тоже можно не смотреть на них, если только мы не наладчик станка, чтобы понимать куда станок помчится вот прям вот щас вот.
Релятивные/Относительные: а вот эти, как говорят все инструкции в глобальной паутине, как раз нам и надо использовать. Вот собственно как:

Переход на относительные координаты делается при помощи G91, как бы "хоба" и готово, но не тут-то было.
В деталях:
В основной программе должен быть код вызова подпрограммы:
G65 P0002 X267.1347 Y487.6575 (вызов пп - имя пп - координаты для работы пп)
ИЛИ
M98 P0002 (вызов пп - имя пп)
С этим разобрались, тут ошибок нет, ПП реально запускаются, можно работать.

Далее:
Имя подпрограмм, как и в случае с OSAI надо корректировать. Во первых все подпрограммы в Syntec надо обозвать O1111, то есть в начале буква "O" затем само имя программы. При этом при вызове подпрограммы мы это "O" не указываем. Видать так ПП в станке только обозначаются для внутреннего поиска нужной программы в памяти станка, так как мы эти ПП туда и кидаем - просто в память станка со всеми другими УП. И надо тоже удалить расширение файла, иначе не найдет программку. В самой ПП мы указываем концовку в виде:

G80 - остановка цикла
G90 - возврат в абсолютные координаты (ниже все поясню)
M99 - возврат на следующую строчку в основной программе после команды вызова нашей подпрограммы, чтобы работать дальше могли.

И вот дошли до самой проблемы:
В начале нашей ПП мы должны указать код G91, чтобы перевести нашу ПП в режим работы относительных координат, таким образом ПП должна запускаться только там, где  станок на эту секунду остановился и в этих координатах якобы новый 0 для ПП должен быть, только есть один нюанс... 
Программа, которая у нас играет роль подпрограммы ломается, так как относительные координаты не для всей программы назначаются, а для каждой строчки в ней. То есть каждая строчка в нашей программе работает относительно каждой предыдущей строчки в этой же программе. И рисует при этом ту еще абракадабру. 

Я пытался сделать вызов подпрограммы в конкретных координатах:
G65 P0002 X267.1347 Y487.6575
Без использования G91 и G54, чтобы вообще нолей не было. Итог - не верно. Подпрограммы подгружаются, но все равно в общий ноль уходят, а не на нужное место в детали.

Пробовал G91 прописывать перед вызовом подпрограммы:
G91 M98 P0002 
В подпрограмме так же все удалено по принципу OSAI. Снова не то. Начало там где надо, а рисует так же рогалик какой-то километр на километр.

Пробовал присвоить координаты на вызов ПП через G92 - тот же результат как и простой вызов, все в общий 0 пришло.

Пытался найти способ, чтобы записать временное положение ноля для ПП - нет такого на Syntec (наверное)

Пробовал найти способ записи текущих координат (в момент вызова ПП) станка в G55/G56/G58/G59, чтобы потом в подпрограмме указать нужный 0 для работы - нет такой функции.

Пробовал не указывать вообще ничего и нигде (ну мало ли) - понятно что ничего не вышло.

Была попытка вручную прописать в подпрограмме G92 "использовать текущие координаты станка" (не то совсем что мне нужно, но разобраться то хочется) - оказывается не работает такое правило. Все рвано в абсолютный 0 все идет.

Пытался найти способ переделать УП подпрограммы под относительные координаты, чтобы корректно все рисовало, но эта тема нигде и никем не упоминается даже, оно и понятно, не в уп дело а работе G91.


Вот получается тупик пока у меня. 

Ну а сама проблема - подпрограммы запускаются из основной программы. Они работают некорректно в относительных координатах. 
Что делать - не знаю. Пятый день уже ищу ответы. Может кто здесь знает такое, как раз по теме подпрограмм не было еще ничего на форуме.

Сообщение отредактировал ViktorSwild: 28 Сентябрь 2021 - 16:23

  • 0

#2 OFFLINE   prod

prod

    Студент

  • Пользователи+
  • PipPip
  • 32 сообщений
  • Пол:Мужчина
  • Из:СПб

Отправлено 28 Сентябрь 2021 - 22:04

а для чего вы в начале основной УП используете G91?

G91 это перевод в относительные координаты, то есть все смещения XYZ будут относительно текущей (перед указанием новой) позиции инструмента

Если вам нужно временно создать новую систему координат можно попробовать использовать G52XYZ (координаты должны быть относительно G54 G55 ...) что бы использовать текущее положение инструмента как новый ноль для последующих команд в УП можно взять переменные координат из стойки, для отмены данной системы координат используем G52X0.0Y0.0Z0.0


Сообщение отредактировал prod: 28 Сентябрь 2021 - 22:16

  • 1

#3 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 29 Сентябрь 2021 - 01:36

По инструкциям делал все. Потом, конечно, понял что G91 на самом делает. С G52 не пробовал, надо будет протестировать, спасибо за активность!)
  • 0

#4 OFFLINE   mihams

mihams

    Гуру CNC

  • Пользователи+
  • PipPipPipPipPipPipPipPipPipPip
  • 1 328 сообщений
  • Из:Kovrov

Отправлено 29 Сентябрь 2021 - 10:53

самое простое - подпрограммы в относительных сделать.

а так в подпрограмме можно в переменных и текущие координаты записать и G55/G55/G56/G58/G59 переписать

#20001~#20006  External workpiece zero point offset value  R/W 

#20021~#20026  Workpiece 1 zero point offset value,G54  R/W 
#20041~#20046  Workpiece 2 zero point offset value,G55  R/W 
…   R/W 
#25981~#25986  Workpiece 299 zero point offset value  R/W 
 
перезапись координат можно так же в подпрограммы запихать, например на G300 и G301
 
тогда логика такая:
в основной программе подходим точке начала координат вензелей
в подпрограмме вензелей вызываем G300
в G300 сохраняем в глобальные переменные(Global    @1~) текущие смещения(G54 и External) и записываем в External нули а в G54 текущие машинные(их можно взять из #1321~#1336  Current position in machine coordinate) координаты

выполняем подпрограмму и в конце G301 в которой переписываем G54 и External

 

только тут косяк в том что если на подпрограмме остановите то координаты не вернутся...

можно основные рабочие смещения G54 и External в глобальных хранить и в основной программе в начале всегда G301 вызывать.

но тогда в окне offset нельзя их будет задать

 

а все вензеля вообще можно в одном файле хранить и кейсом(CASE <INT expression> OF) их выбирать передавая номер вензеля через любую букву(X  Y  Z  A  B  C  I  J  K  F  S  T  D)

 

 

я такую подпрограмму для щупа делал. 

на заготовку приклеивалась другая заготовка и нужно было +-0,5мм в верхнюю заготовку попасть. я в экстернал просто смещения записывал. заодно и высоту заготовки определял.


Сообщение отредактировал mihams: 29 Сентябрь 2021 - 11:04

  • 1

#5 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 29 Сентябрь 2021 - 11:33

самое простое - подпрограммы в относительных сделать.

а так в подпрограмме можно в переменных и текущие координаты записать и G55/G55/G56/G58/G59 переписать

#20001~#20006  External workpiece zero point offset value  R/W 

#20021~#20026  Workpiece 1 zero point offset value,G54  R/W 
#20041~#20046  Workpiece 2 zero point offset value,G55  R/W 
......
......

я такую подпрограмму для щупа делал. 

на заготовку приклеивалась другая заготовка и нужно было +-0,5мм в верхнюю заготовку попасть. я в экстернал просто смещения записывал. заодно и высоту заготовки определял.

Интересный способ, спасибо) Пока подозреваю, что не получится в моем случае применять. У меня ISO коды, они операторы "CASE <INT....." и т.д. не поддерживаются. Все же попробую, может и ошибаюсь. Но для себя способ оставлю как рабочий, чтобы можно было и с ним эксперименты ставить)


Если вам нужно временно создать новую систему координат можно попробовать использовать G52XYZ (координаты должны быть относительно G54 G55 ...) что бы использовать текущее положение инструмента как новый ноль для последующих команд в УП можно взять переменные координат из стойки, для отмены данной системы координат используем G52X0.0Y0.0Z0.0

Этот вариант сработал. Спасибо!
В итоге как он пишется (пояснение для тех, кто хотел бы использовать):
В основной программе пишем:
......
......

G52X82.8653Y487.6575Z0.0000         (Указываем временные координаты для G52)
M98 P0001                                           (Вызываем подпрограмму с именем 0001 (внутри подпрограммы в начало кода пишем G52))
G52X0.0000Y0.0000Z0.0000               (Отключаем временные координаты G52)
G54                                                       (Возвращаем основную программу в основную систему координат)
......
......

Все дополнительные изменения в подпрограмме описаны в первом сообщении темы (до пункта с проблемой).

Еще раз всем спасибо за помощь в решении проблемы!!!

  • 0

#6 OFFLINE   mihams

mihams

    Гуру CNC

  • Пользователи+
  • PipPipPipPipPipPipPipPipPipPip
  • 1 328 сообщений
  • Из:Kovrov

Отправлено 29 Сентябрь 2021 - 11:44

 

Интересный способ, спасибо) Пока подозреваю, что не получится в моем случае применять. У меня ISO коды, они операторы "CASE <INT....." и т.д. не поддерживаются. Все же попробую, может и ошибаюсь. Но для себя способ оставлю как рабочий, чтобы можно было и с ним эксперименты ставить)

 

все заработает) документацию по макросам синтека почитайте

в ней вообще дофига всяких операторов и функций в программе можно использовать


для примера моя подпрограмма

 

%@MACRO
 
// x #24
// y #25
// a #26
// b #27
 
 
 
#24=GETARG(X);
#25=GETARG(Y);
#26=GETARG©;
#27=GETARG(B);
 
 
 
// #20001~#20006  External workpiece zero point offset value
// #20021~#20026  Workpiece 1 zero point offset value,G54
// #1341~#1356  current position in workpiece coordinate
// #1036  Tool selection number, T Code 
// #1046  Feedrate command, F Code
// #1046  Feedrate command, F Code
// #1614  Default spindle speed
 
// переводим в приращения
G91;
 
CASE  @10101 OF
1:
#40 := #13001 ; // расстояние разгона
#41 := #12001*1000 ; // увеличение в процентах
#42 := #11001 ; // расстояние торможения
#43 := #10001*1000 ; // расход
 
#44 := #13002 ; // впрыск перед стартом
#45 := #12002 ; // задержка перед стартом
#46 := #11002 ; // обратка на финише
#47 := #10002 ; // задержка на финише
2:
#40 := #13003 ; 
#41 := #12003 ; 
#42 := #11003 ; 
#43 := #10003 ; 
 
#44 := #13004 ; 
#45 := #12004 ; 
#46 := #11004 ; 
#47 := #10004 ; 
 
 
 
 
END_CASE; 
 
//#44 := @10200 ; // глобальные 600
 
 
#50 := STDAX((#24),X); //X 
#51 := STDAX((#25),Y); //Y
 
IF (ABS(#24) > 0) THEN
#50 := STDAX((#24 - #1301),X); //X 
ELSE
#50 := 0;
END_IF;
 
IF (ABS(#25) > 0) THEN
#51 := STDAX((#25 - #1302),Y); //Y
ELSE
#51 := 0;
END_IF;
 
 
 
IF (#26 = 1) THEN // если С=1
 
M100 ; // опускаем сопло
#28 := STDAX((#44),C) ;
G01 C#28 F9000 ; // впрыск
#45 := ROUND((#45) * 10000) ;
G04 P#45 ; // пауза
 
#7 :=  CEIL(#40/5); //Количество циклов разгона
#4 := #40/(SQRT((#50*#50)+(#51*#51)));
#20 :=  #50*#4/#7; //  X приращение разгона
#21 :=  #51*#4/#7; //  Y приращение разгона
 
FOR #1:= 1 TO #7 BY 1 DO          // #1 - начало  #7 - конец  1 - инкремент
 
#5 := STDAX((SQRT(#20*#20+#21*#21)*#43/100*(100+(#41/#1))/100    ),C) ;
 
G01 X#20 Y#21 C#5;
 
END_FOR;
 
 
IF (ABS(#24) > 0) THEN
#50 := STDAX((#24 - #1301),X); //X 
ELSE
#50 := 0;
END_IF;
 
IF (ABS(#25) > 0) THEN
#51 := STDAX((#25 - #1302),Y); //Y
ELSE
#51 := 0;
END_IF;
 
 
#5 := STDAX((SQRT(#50*#50 + #51*#51) * #43/100),C) ;
G01 X#50 Y#51 C#5;
 
ELSEIF (#26 < 0) THEN // если С=-1
 
#4 :=  ((SQRT((#50*#50)+(#51*#51)))-#42)/(SQRT((#50*#50)+(#51*#51)));
#20 :=  #50*#4; //  X приращение разгона
#21 :=  #51*#4; //  Y приращение разгона
 
#5 := STDAX((SQRT(#20*#20 + #21*#21) * #43/100),C) ;
G01 X#20 Y#21 C#5;
G90;
G01 X#24 Y#25;
G91;
#29 := STDAX((#46),C) ;
G01 C-#29 F9000 ; // обратка на финише
#47 := ROUND((#47) * 10000) ;
G04 P#47 ; // пауза
M101 ; // поднимаем сопло
G04 P700 ; 
 
 
ELSE // стандартное движение
 
#5 := STDAX((SQRT(#50*#50 + #51*#51) * #43/100),C) ;
G01 X#50 Y#51 C#5;
 
END_IF;
 
G90;
M99;

  • 0

#7 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 29 Сентябрь 2021 - 18:04

Большое спасибо за пример! Буду пользоваться! Никогда знания лишними не бывают, сам стараюсь поделиться, если что-то полезное знаю))) 


  • 0

#8 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 05 Октябрь 2021 - 13:46

А как в этом случае повернуть координаты осей при вызове подпрограммы? 
 

G52X267.1347Y487.6575Z0.0000R45.0000 - так? (без  G68)
 
G68X267.1347Y487.6575R45.0000 M98 P0002 - или так? (не работает поворот в итого)
 
G69
G52X0.0000Y0.0000Z16.0000

Пробовал записать G68 сразу в подпрограмму, но при запуске на станке ничего нового не происходило. Положение подпрограмм не поменялось. Практически везде работает у всех поворот, а у нас какой-то непонятный станок похоже) ему, видимо, все равно на команды).
Не исключаю вариант, что сам все не верно указываю :crazy:

На одном из форумов нашел:

G68 - вращение координат.
Код G68 позволяет выполнить поворот координатной системы на определенный угол. Для выполнения поворота требуется указать плоскость вращения, центр вращения и угол поворота. Плоскость вращения устанавливается при помощи кодов G17, G18 и G19. Центр вращения устанавливается относительно нулевой точки активной рабочей системы координат (G54 - G59). Угол вращения указывается при помощи R. Например: G17 G68 X0. Y0. R120.

Так же пробовал указывать G17, ради интереса и G18, и G19. В итоге тоже ничего не меняется.
Проверял на станке и в программе NC Corrector 
 


Сообщение отредактировал ViktorSwild: 05 Октябрь 2021 - 15:48

  • 0

#9 OFFLINE   prod

prod

    Студент

  • Пользователи+
  • PipPip
  • 32 сообщений
  • Пол:Мужчина
  • Из:СПб

Отправлено 05 Октябрь 2021 - 15:45

G52X267.1347Y487.6575Z0.0000

G68X0.0Y0.0R45.0000

M98 P0002

G69

G52X0.0000Y0.0000Z0.0000

 

А так ?


Сообщение отредактировал prod: 05 Октябрь 2021 - 15:46

  • 1

#10 OFFLINE   ViktorSwild

ViktorSwild

    Абитуриент

  • Пользователи+
  • Pip
  • 7 сообщений
  • Пол:Мужчина
  • Из:Пятигорск

Отправлено 05 Октябрь 2021 - 15:48

G52X267.1347Y487.6575Z0.0000

G68X0.0Y0.0R45.0000

M98 P0002

G69

G52X0.0000Y0.0000Z0.0000

 

А так ?

Вот именно так и работает)))
 

Сейчас у станка все проверял и получилось как вы предложили)
 

G52 X205.000 Y147.700 Z0.000       (Локальная система координат G52 для позиционирования подпрограммы)
G68 X0.000 Y0.000 R0.000              (Поворот оси в лск G68)
M98 P0210                                        (вызов пп M98 (уже работает в лск и повороте))
G52 X0.000 Y0.000 Z0.000               (Возврат лск в нормальный ноль G52 0)
G54 G69                                            (Переход в стандартный 0 G54 и отмена поворота G69)

  • 0




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных