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

Модальный вызов макроса (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 пользователей

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



  • Сообщения

    • Рамон
      Можно в тексте вставить ссылку- свойство документа - последнее изменение с датой и временем.  
    • Павлуха
      Солиду не нравится несколько сопряжений, которые одинаково позиционируют деталь.
    • al0ner
      Это весьма удивило, когда заходишь в бутлодере в меню просмотра файлов, то файлы на цф видны, возможно при начале чтения или записи по дефолту стоит проверка уровня на wp.
    • advocut
      У нас чертежи версионируются, но бывает так, что внесли мелкое исправление, а версию не завели, потому как придётся натужно бегать и менять всё везде в системах учёта. Конструктору-то всё равно, а вот когда приходит программисту на исполнение один чертёж, оператору дают второй, а потом выясняется, что вообще нужно было по третьему — становится грустно. Решением проблемы вижу поле с датой и временем сохранения (хоть в привычных нам гггг-мм-дд:ч-м-с, хоть одним числом в UNIX ticks), чтобы знать, что эти два чертежа были сохранены в разное время и значит являются разными ревизиями и требуют тщательного изучения всех мелочей. Добавить в общий шаблон чертежа и забыть о проблеме. Есть идеи, как это можно сделать? На зарубежных чертежах поле Revision встречал.
    • Ninja
      зачем? у тебя же только диаметр отв. изменился и добавилась фаска. Вот их отдельно пересчитай. А остальное не трогай, оно же не изменялось! Выше показали как несколько проектов в одном можно сделать. Будет два проекта в одном. А в среднем остатке - то что нужно )))  
    • Madmax70
      раз форматирует карту, то шлейф рабочий, также программы с  cf нормально сбрасываются на стойку. под аналогичным я имею станок с такой же стойкой, такой же фирмы поставленный в одно и тоже время бутлоадер тоже такой же, начинка немного отличается, так как в этом станке сервоусилитель шпинделя и мотор fanuc на других реализовано управления мотор-шпинделем через частотный преобразователь сохранение файлов через system data save я не проверял карточка cf 2 гигабайта
    • lowboard
      Добрый день! Отлично, настроил. Спасибо, удобно  
    • rigrou
      Разобрался сам спустя время. В итоге для того, чтобы отображались исполнения 10 и более: 1. Нам нужно открыть меню настройка спецификаций и в количество исполнений прописать нужное количество исполнений. Нужно учесть, что -00 (нулевое) исполнение также учитывается и если нам необходимо нулевое+34 исполнений, то число исполнений в настройке спецификации нужно указать 35. 2. Даже если мы укажем количество исполнений более 10, то они сразу не будут отображаться. Чтобы они отображались нужно выбрать любой из разделов(документация/сборочные единицы/детали/стандартные...) в которых прописывается значение для "количество на исполнение" и перейти к его редактированию. В зависимости от количества исполнений, которые мы прописали в настройке спецификации, нам будет доступно 2 или более строк, в которые можно вписать значение для "количество на исполнение". Изначально первые 9 исполнений и нулевое исполнение отображаются, а чтобы отобразилось 10 исполнение или выше, нужно в поле (количества на исполнение) вписать любое значение для нужного нам исполнения.  Также нюанс, если исполнений много и мы не заполним значение в целой строке ни в одном из разделов, то это исполнениями не будут отображаться. (К примеру мы прописали значения для исполнений 0-9 и 21-34, а 10-20 оставили пустыми; исполнение с 10 по 20 не отобразятся). Достаточно указать значение лишь в одной из ячеек в строке, тогда будет отображаться весь блок исполнений данной строки. К примеру если исполнений не более 20, будут активны 2 строки; количество исполнение не более 30, то будет активно 3 строки. При этом если количество исполнений будет меньше, чем количество клеток в строке, лишние клетки будут закрыты для редактирования. Если непонятно в ячейки какого исполнения мы находимся, то снизу слева отображается название исполнения при редактировании значения этой ячейки.
    • Artas28
      Что значит ручками пересчитывать? так же  по новой все контура выбирать? опять проект с нуля?
    • sokolikkostya
      Разумеется. Полный ваш пакет макросов. Думаете дело не в шаблоне детали и в заданных для него свойствах? кстати, строку "Материал (сортамент)" уже заменил на просто "Материал", но увы, из за этого материал не стал ровнее работать в ОН.
×
×
  • Создать...