Перейти к публикации

Модальный вызов макроса (G66) и системные переменные


Рекомендованные сообщения

Здравствуйте, уважаемые коллеги, знатоки системы Fanuc.

Осваиваю сейчас написание макросов, которые можно вызывать в модальном режиме (G66/G67). Понятно, что для этого нужно запомнить состояние системы - ну там G90 или G91, G1 или G0 и так далее, а потом, в конце макроса восстановить это состояние. Ну и еще нужно запомнить позицию вызова макроса в системе координат заготовки и в конце макроса в нее вернуться. Вот тут то и возникает вопрос. Вот например координата Z в разных примерах (в том числе с этого форума, но не только) вычисляется по-разному: #5003 - конечная точка блока, #5043 - текущее положение в системе координат заготовки и даже (вот в этой теме http://cccp3d.ru/topic/45762-перевод-в-переменные/#entry419224) #5043 - #5083 (позиция Z в системе координат заготовки  - коррекция на инструмент). Вопрос - чем отличаются эти переменные, и почему в разных примерах по-разному? Не могут же все эти методы давать один и тот-же результат. Значит правильный метод один - а остальные не работают - так? 

И вдогонку еще вопрос - в мануале написано, "Локальные переменные (аргументы) можно задать только в блоках G66. Обратите внимание на то, что каждый раз при выполнении модального вызова локальные переменные заново не устанавливаются.", но что-то я видел в примерах, чтобы запоминали значения аргументов в какие-то другие переменные, и в конце восстанавливали значения (надеюсь, что профессионалы понимают о чем я говорю). Что это - мне просто подобные примеры не попадались, или я не так понимаю мануал?

Поделитесь опытом написания модальных макросов, пожалуйста. 

 

Ссылка на сообщение
Поделиться на других сайтах


Вначале и в конце макроса G0Z333, в конце отмена всех трансформаций и никаких запоминаний не надо  - ведь и так известно откуда вызывался и чем кончается макрос, и что будет дальше.

Разве одинаковые координаты забитые в блоке и текущие на дисплее?

Координаты Z на дисплее, инструмента с корректором и без, одинаковые?

Если неизвестно, смотреть первую строчку.

Изменено пользователем Ander
Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, Bastion сказал:

Значит правильный метод один - а остальные не работают - так? 

Правильный результат-один, а правильных методов-много.

 

3 часа назад, Bastion сказал:

Обратите внимание на то, что каждый раз при выполнении модального вызова локальные переменные заново не устанавливаются."

Автоматически не устанавливаются, т.е не обновляются, а сами Вы можете устанавливать.

 -  Локальная переменная (#1-#33)
Локальная  переменная - это  переменная,  которая  локально
используется  в  макросе.  То  есть,  локальная  переменная #i,
используемая макросом, вызванным в один момент, отличается от
переменой, используемой макросом, вызванным в другой момент,
несмотря  на  то,  что  макросы  идентичны.  Следовательно,
например,  если  макрос A вызывает  макрос B в  режиме
многократных вызовов или другим подобным образом, макрос B
не  может  исказить  локальную  переменную,  используемую
макросом A в результате ошибочного использования переменной.
Локальные переменные используются для передачи аргументов.
Информацию о соответствии между аргументами и адресами, см.
в разделе о командах вызова макропрограмм. Исходное значение
локальной  переменной,  к  которой  не  приписаны  аргументы,
<нулевое>,  и  пользователь  может  свободно  использовать
переменную.  Для  локальной  переменной  активирован  атрибут
ЧТЕНИЕ/ЗАПИСЬ.
 -  Общая переменная (#100-#199, #500-#999)
Общая переменная доступна для главной программы, подпрограмм,
вызываемых главной программой, и макропрограмм, в то время как
локальная переменная используется локально в макросе. То есть, #i,
используемая  одним  макросом,  та  же  самая,  что  и  для  другой
макропрограммы.  Следовательно,  результирующая  общая
переменная,  полученная  при  использовании  одной
макропрограммы,  может  использоваться  другим  макросом.  Для
общей  переменной  обычно  активирован  атрибут
ЧТЕНИЕ/ЗАПИСЬ.  Однако  общая  переменная  может  быть
защищена (ей  устанавливается  атрибут  только  ЧТЕНИЕ)  путем
задания ее номера переменной с использованием параметров ном.
6031  и  ном. 6032. Пользователь  может  свободно  использовать
общую  переменную,  даже  если  ее  использование  не  определено
системой. Число общих переменных можно задавать путем выбора
одной из следующих опций.
(a) 100  общих  переменных  з(адается  только  опцией
пользовательской макропрограммы)
  Могут использоваться общие переменные от #100 до #149 и
от #500 до #549. Переменные от #100 до #149 стираются при
отключении  питания,  а  переменные  от #500 до #549
сохраняются при отключении питания.

Ссылка на сообщение
Поделиться на других сайтах

@andre_77 Спасибо. По поводу локальных переменных я имел ввиду следующее. Вот код в главной программе:

G66 P1000 A100. B150. 

X100.

Y100.

G67

 

Вот код в программе О1000

#1=#1+100

#2=#2+100

...

дальше что-то делаем и выходим из макроса

М99

 

Вопрос - при повторном вызове макроса из основной программы в кадре Y100.  переменные 1 и 2 будут равны 100 и 150 или уже 200 и 250 (в результате исполнения #1=#1+100 #2=#2+100 внутри макроса). Вот в чем вопрос был. 

16 минут назад, andre_77 сказал:

Правильный результат-один, а правильных методов-много.

Согласен, но в данном случае результат работы этих методов не может быть одинаков. 

Изменено пользователем Bastion
Ссылка на сообщение
Поделиться на других сайтах

Вы же сами пишите.

4 часа назад, Bastion сказал:

в мануале написано, "Локальные переменные (аргументы) можно задать только в блоках G66. Обратите внимание на то, что каждый раз при выполнении модального вызова локальные переменные заново не устанавливаются."

 

Ссылка на сообщение
Поделиться на других сайтах

@andre_77 Понятно. Ну я решил на всякий случай уточнить ))) Первый вопрос не снимается. И да, если кто-то может, то поделитесь макросом, который может работать по G66. 

Ссылка на сообщение
Поделиться на других сайтах

зайдите в меню да и гляньте чему там оне равны 100 и 150 , что б мануал проверить и себе надежнее

а что конкретно надо от макроса - суть задачи то бишь??????

Ссылка на сообщение
Поделиться на других сайтах

 В О8501 макрос 9019 вызывается как G9999 (как прописать читать в жёлтой книжке)

как соотносятся буквы и # читать жёлтую книжку


O8501(SPIRAL G9999)
(A NACALO,B SHAG+,C KONEC) 
(I RADIUS,J OTSKOK+,K R INSTRUM) 
(Z PODJOM V KONCE) 
S2222F333M3
X100.Y50.
G9999A0B1.2C-2.I20.J1.K2.Z200. 
M30
%

 


O8502(SPIRAL G66)
S2222F2222M3 
#1=150.
#2=100.
G66P9019A0B1.2C-2.I20.J1.K2.Z200.
X#1Y#2 
X#1Y-#2
X-#1Y-#2 
X-#1Y#2
G67
M30
%

 

 

Программы на девятку закрыты для редактора, как открыть читать жёлтую книжку


O9019(SPIRAL G9999)
(1-NAC,2-SHAG+,3-KONEC)
(4-RADIUS,5-OTSKOK PO X V KONCE) 
(6-RADIUS INSTRUMENTA) 
#4=#4-#6 
#11=#1-#2
#12=#1-#3
Z[#1+2.] 
Z#1
G91X#4 
IF[#1EQ#3]GOTO999
IF[#12LT#2]GOTO99
N5G3Z-#2I-#4J0 
IF[#11EQ#3]GOTO999 
#11=#11-#2 
IF[#11GE#3]GOTO5 
#11=[#11-#3+#2]
G3Z-#11I-#4J0
N88GOTO999 
N99G3Z-#12I-#4J0 
N999G3I-#4J0 
G1X-#5 
G0G90Z#26
M99
%

Ссылка на сообщение
Поделиться на других сайтах
1 час назад, z90 сказал:

вопрос - почему именно G66 ? а не обычным 65.  из за смещения????????

Да просто так удобнее со стойки редактировать-меньше лишних телодвижений)) Макрос может быть для чего угодно - главное понять суть.

Ссылка на сообщение
Поделиться на других сайтах

лично по мне - подальше запрячешь - поближе возьмешь. в смысле очень много криворуких но переоценивающих  потенциальные возможности своего МОСКА  операторов. потому все прячу и паролю. меня беспокоит безопасность станка а не их (операторов таких)  удобство в редактировании . могет и жестко написано - но много их развелось. наладчик с сервиса был недавно.  10 лет работает - рассчитывается вот как раз по этой причине. он конечно все матом это дело  высказал насчет криворукости и всего остального.

Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, z90 сказал:

лично по мне - подальше запрячешь - поближе возьмешь. в смысле очень много криворуких но переоценивающих  потенциальные возможности своего МОСКА  операторов. потому все прячу и паролю. меня беспокоит безопасность станка а не их (операторов таких)  удобство в редактировании . 

Все правильно написано, но, во-первых - не все такие, во-вторых - пишется это не только (и не столько) ради удобства операторов, сколько ради удобства меня ))) 

 

Все-таки никто не знает по поводу первого вопроса: как правильно вычислить позицию по Z перед вызовом макроса, куда должен вернуться инструмент после выполнения этого самого макроса:  #5003 - конечная точка блока, #5043 - текущее положение в системе координат заготовки и #5043 - #5083 - текущее положение минус коррекция на инструмент - какой из вариантов правильный? 

Ссылка на сообщение
Поделиться на других сайтах

Все-таки никто не знает по поводу первого вопроса: как правильно вычислить позицию по Z перед вызовом макроса, куда должен вернуться инструмент после выполнения этого самого макроса:  #5003 - конечная точка блока, #5043 - текущее положение в системе координат заготовки и #5043 - #5083 - текущее положение минус коррекция на инструмент - какой из вариантов правильный? 

я не говорил что все такие операторы. много просто. но по сути на оборонке меня приучили - что позволено Юпитеру - то не дозволено  Быку. оператор могет только коррекцию на износ внести - согласовав с наладчиком.

  да куда  вам удобнее туда и выведите  инструмент, вы же Управляющий  директор  стойки. на безопасную высоту главное если фрезер .

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

Ссылка на сообщение
Поделиться на других сайтах
9 часов назад, Bastion сказал:

 #5003 - конечная точка блока, #5043 - текущее положение в системе координат заготовки и #5043 - #5083 - текущее положение минус коррекция на инструмент - какой из вариантов правильный? 

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

Не могу утверждать с полной уверенностью, поскольку писал макросы на станок HAAS (программирование как у фанук, но с небольшими отличиями ) и уже довольно давно.

1 Если выход в НТ осуществляется в абсолютной системе отсчета и в подпрограмме нет смещений системы координат, то подойдет #5003 и #5043.

2 Независимо от выход в НТ с использования абсолютной системы отсчета или приращения, но без смещений системы координат в подпрограмме, подойдет #5043.

3 #5043 - #5083 -  тут сами попробуйте, я просто не видел макросов о которых вы говорите. Думаю это будет работать только при определенных условиях. Я бы не применял.

4 Можно попробовать использовать переменную в которой хранятся координаты станка, на HAAS такая есть, и выводить с этим значением по команде G0 G53 Z#...., думаю это должно сработать в любом случае.

Ссылка на сообщение
Поделиться на других сайтах
  • 3 года спустя...

Добрый день. При использовании вызова макропрограммы по G66 пытаюсь выполнить пересчет за счет импорта станочных координат в координаты G54, G55. Это должно позволить сохранить программирование в абсолютной СК в каждой из систем и не использовать относительную, все же абсолютная нагляднее.  Проблема в том что переменные подхватываются  только первый раз . При повторном вызове подпрограммы  перенос параметров не происходит. 

Собственно пример программы: 

%
O0010
G21
G40 G80 G49 G90 G54
T1 M6
G00 X0 Y0

S1000 M3
Z10 
G94 G01 Z5 F1000
G66 P2
X50 Y30
X20 Y-30
G67
G00 Z5
M5
M30
%

 


O0002
#501=#5021 (FROM X STAN TO BUFER)
#502=#5022 (FROM Y STAN TO BUFER)
#503=#5223 (FROM Z G54 TO BUFER)
G4 S3
#5241=#501 (FROM BUFER TO X G55)
#5242=#502 (FROM BUFER TO Y G55)
#5243=#503 (FROM BUFER TO Z G55)

G55
G01 F600 
X15 Y0
G02 X15 Y0 R15
G01 X-15

G54
M99
%

 

Добавлял ожидания после ввода каждого параметра в подпрограмме. пробовал использовать #31,32,33 - результат тот же. Пробовал работать без буфера то есть напрямую из станочной СК в СКG55 - параметры не изменяются. Стойка Fanuc. Oi-MODEL D

 

 

Ссылка на сообщение
Поделиться на других сайтах

@Metal_Cutter  Для того чтобы обрабатывать несколько одинаковых криволинейных контуров по разному расположенных на плите. Основная плоскость по G54 там же и расстояния для входа в "ноль " подпрограммы для обработки контура, в ней плоскость G55. Если координаты расположения  из G54 не передавать в G55 то станок поедет в ноль G54 и там выполнит работу по подпрограмме.  Как выход можно писать подпрограмму в относительной СК , не это мне лично неудобно, да и большинство САМ-систем работают в абсолютной СК.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...