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

Программирование Макро


Viktor2004

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

Здравствуйте. В этой теме я буду задавать некоторые глупые вопросы по макропрограммированию, так как сталкиваюсь с ним редко. Буду благодарен за ответы

 

В макропеременной #3011 хранится текущая дата. Как написать программу что бы разделяла эту дату на 3 части и записать каждую в отдельную переменную, например

#500 - год

#501 - месяц

#502 - день

???

IMG_20210207_200031_4.jpg

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


UnPinned posts

@Viktor2004 Использовал этот код немного для других задач, но должно работать.

#3011=20270431
#500=FIX[#3011/10000.] (YEAR)
#501=FIX[[#3011-#500*10000.]/100] (MOUNTH)
#502=FIX[#3011-#501*100.-#500*10000.] (DAY)

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

но должно работать.

Спасибо. Работает

 

IMG_20210207_203510_9.jpg

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

Уважаемые коллеги, еще одна задачка

В макропеременных 950-959 находятся ASCII значения цифр

Нужно в переменную 960 записать то число которое там написано

Например. В результате обработки тех значений что на фото должно в #960 быть записано число

3571672902

 

HDCPY001.JPG

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

Уважаемые коллеги, еще одна задачка

В макропеременных 950-959 находятся ASCII значения цифр

Нужно в переменную 960 записать то число которое там написано

Например. В результате обработки тех значений что на фото должно в #960 быть записано число

3571672902

#1=959(VARIABLE NUMBER)
#2=1(MULTIPLIER)
#960=0(RESULT)

WHILE[#1GE950]DO1
#960=#960+[#[#1]-48]*#2
#1=#1-1
#2=#2*10
END1
 

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

@Viktor2004Двигался в другом направлении, относительно решения @A_1

#1=0 (START)
#960=0 (NUM)
#4=1000000000
WHILE[#1LT10]DO1
#2=#[950+#1]-48
#960=#960+#2*#4
#4=#4/10.
#1=#1+1
END1

 

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

Итак, товарищи, я продолжаю тупить

Преобразовываю программу под себя. Удаляю из нее все лишнее, добавляю свое и пытаюсь понять принцип ее работы.

Тут надо пояснить две команды

O8002
       #500 = #8501
       #503 = 0
       #950 = 176
       #951 = 176
       #952 = 176
       #953 = 176
       #954 = 176
       #955 = 176
       #956 = 176
       #957 = 176

N21    G240  P3  C0  
       G243  X2  Y0  A1  B0   (MACHINE PASSWORD INPUT SCREEN) 
       G240  P6  C0  
       G243  X7  Y[4 + 1]   (PASSWORD) 

N30    G240  P7  C0  
 
       G243  X5  Y26  A1  B0   (INPUT) 
	   #506 = 8
N100   #500 = #8501
       #501 = #8549
       IF[ #501 EQ #502 ]THEN  #501 = 0
       #502 = #8549
       IF[ #501 NE 152 && #500 NE 21 ]THEN  /* нажато либо 152 INPUT либо 21 SOFT KEY 1
              IF[ #501 EQ 134 || #501 EQ 137 ]THEN      /* нажато либо 134 CAN либо  137 стрелка влево
                     IF[ #503 GE 1 ]THEN  #503 = #503 - 1
                     #[950 + #503] = 176
       
              ENDIF
              IF[ #501 NE 0 && #503 LE [#506-1] && #501 GE 48 && #501 LE 90 ]THEN  /* нажата цифра пароля
                     #[950 + #503] = #501
                     #503 = #503 + 1
              ENDIF
N300          G240  P7  C0  
              #10 = 0
              WHILE[ #10 LT #506 ]DO1
                     G243  X[#10 + 18]  Y[4 + 1]  A1  B0  C#[950 + #10]  
                     #10 = #10 + 1
              END1

             GOTO 999
			   
       ENDIF
N400		    #504=950 + #506 - 1 (VARIABLE NUMBER)
				#505=1(MULTIPLIER)
				#960=0(RESULT)
				WHILE[#504 GE 950]DO1
					#960=#960+[#[#504]-48]*#505
					#504=#504-1
					#505=#505*10
					END1
				
N800   IF[ #503 NE #506 ]GOTO 891
       
       GOTO 889
N880   #950 = 176
       #951 = 176
       #952 = 176
       #953 = 176
       #954 = 176
       #955 = 176
       #956 = 176
       #957 = 176

       #503 = 0
       GOTO 999
N889   G240  P7  C0  
       G243  X2  Y23  A1  B0   ('PASSWORD INPUT WAS ACCEPTED!!!                 ') 
       GOTO 880
N890   G240  P7  C0  
       G243  X2  Y23  A1  B0   (                                               ) 
       GOTO 999
N891   G240  P1  C0  
       G243  X2  Y23  A1  B0   ('PASSWORD ERROR!!!                              ') 
       G240  P7  C0  
       GOTO 880
N990   M99  
N999   
N9999  M99  P100

G240 это установка цвета и фона выводимого символа

G243 это вывод текста по координатам пикселей

Программа зациклена. В конце стоит M99 P100 что означает бесконечный цикл со строки N100

Мне непонятно почему в блоке N300 команда GOTO 999. Пробовал ее удалять, без нее не работает. Не дает вводить пароль и не реагирует ни на какую кнопку.  А с ней работает. Почему бесконечный цикл без этой команды прерывается?

 

 

HDCPY000.JPG

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

Все я разобрался. Криво написана программа. Следующую строчку надо через WHILE переписать

IF[ #501 NE 152 && #500 NE 21 ]THEN  /* нажато либо 152 INPUT либо 21 SOFT KEY 1
Ссылка на сообщение
Поделиться на других сайтах

Господа, подскажите, в чем разница между следующими двумя командами

G65 P8004

M98 P8004

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

Господа, подскажите, в чем разница между следующими двумя командами

G65 P8004

M98 P8004

При вызове с помощью G65 подпрограмме можно передать параметры, а через M98 - нет. В этом примере разницы между командами нет.

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

При вызове с помощью G65 подпрограмме можно передать параметры, а через M98 - нет. В этом примере разницы между командами нет.

спасибо. Значит ли это что G65 без параметров и M98 это одно и то же?

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

А если я наберу так

#1 = 1

#2 = 2

M98 P9008

 

Эти значения 1 и 2 у меня в подпрограмме обнулятся или будут актуальны?

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

Эти переменные получат соответствующие значения. Они будут доступны и в вызывающей программе и в подпрограмме (да, будут актуальны). При G65 же создаётся новый набор локальных переменных #1-#33, и #1 вызывающей подпрограммы и #1 подпрограммы - это разные переменные. Сделано это для того чтобы при программировании макропрограммы можно было иметь независимый набор переменных, изменение которых не приводило бы к изменениям переменных вызывающей программы.

При M98 новый набор локальных переменных не создаётся. 

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

При G65 же создаётся новый набор локальных переменных

При M98 новый набор локальных переменных не создаётся. 

Спасибо. Значит вот оно главное различие

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

Подскажите пожалуйста

#[8500]

и

#8500

это одно и то же или нет?

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

Уважаемые коллеги.

Написал тут код который не имеет смысла. Хочу проверить как программа оптимизации не портит ли его.

Первый код это до оптимизации, второй после оптимизации.

Скажите, команда IF THEN ENDIF  будут давать тот же результат? Ну, условия будут по тем же законам обрабатываться или все же эти два кода не идентичны?

 

O8000
N0300IF [D2493.3 EQ1 && #8 EQ 8]GOTO 345	
     IF [#1 LT 21] GOTO 500		;
     IF [#2 GT 25] GOTO 500		;
     IF [#3 EQ 6] GOTO 345			;
     IF [#4 EQ 7] GOTO 345			;
     #11 = 5
N0310
     GOTO 500					;
N0320IF [#6 NE 4] GOTO 345			;
     IF [D2493.5 EQ 1] GOTO 340			
     IF [D2493.3 EQ 1] GOTO 340			
     GOTO 500					;
N0330		;
     GOTO 500					;
N0340 #15 = #14
N0345 #15 = #14	
N0365IF [#7 NE 24] GOTO 370		;
     #17=#10					;
     IF [#17 LT 0] GOTO 397			;
     IF [#17 GT 99] GOTO 397			;
     G310 D2442 L2 Q#17			;
     GOTO 500
N0370 M99
N0397 M99
N0500 M99	

а это после оптимизации

O8000  
       N300  IF[ D2493.3 EQ 1 && #8 EQ 8 ]GOTO 345
       IF[ #1 GE 21 && #2 LE 25 ]THEN
              IF[ #3 NE 6 && #4 NE 7 ]THEN
                     #11 = 5
N310  
                     GOTO 500
N320                 IF[ #6 NE 4 ]GOTO 345
                     IF[ D2493.5 NE 1 && D2493.3 NE 1 ]THEN
                            GOTO 500
N330  
                            GOTO 500
                     ENDIF
N340                 #15 = #14
              ENDIF
N345          #15 = #14
N365          IF[ #7 NE 24 ]GOTO 370
              #17 = #10
              IF[ #17 GE 0 && #17 LE 99 ]THEN
                     G310  D2442  L2  Q#17  
                     GOTO 500
N370                 M99  
              ENDIF
N397          M99  
       ENDIF
N500   M99 

 

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

Скажите, команда IF THEN ENDIF  будут давать тот же результат?

В руководстве по эксплуатации FANUC не нашёл слово ENDIF

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

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

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

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

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

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

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

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

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

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

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




  • Сообщения

    • ДОБРЯК
      Для того, чтобы получить правильные высшие) формы при виртуальном эксперименте, нужно сделать грамотную КЭ модель. От разговора на эту тему вы постоянно уклоняетесь.  То нет компьютера под рукой, сделать простейший тест, то теряете интерес. :=) Сходимости энергии деформации при расчетах статики, недостаточно для точного определения высших собственных форм и частот.  Для того, чтобы грамотно использовать метод конечных элементов, нужно сделать много-много тестов в статике, динамике и ... Одной кнопки и двух конечных элементов в 3Д программе недостаточно для определения высших собственных форм...  У вас в качестве инструмента всего два конечных элемента, шести узловая несовместная оболочка Тимошенко и десяти узловой тетраэдр. И еще контакты при решении задачи на собственные числа. Вам ли говорить про правильность определения высших собственных форм для сложных изделий... :=)    
    • vad0000
      Покажите схему с разрешением на движение
    • vad0000
      Вход, а не выход Вытащить Аналоговый вход и все, как будто туда ничего не подключено И если мы подключим сигнал к энкодеру оси Х, то он стнтет одинаковый с аналоговым входом, который не подключен?
    • Snake 60
      @waze4534  Посмотрите вверх и прочитайте текст на красной полоске...
    • kkk
      Я так понимаю, что предупреждение про "касательные" не просто так выскакивает. Если скруглить прямую стыковку отрезков эскиза (минимальным радиусом) то все работает даже без объединенной кривой, достаточно эскиза.
    • karlf
      Подскажите пожалуйста, может кто сталкивался. Станок DMU-50 на стойке TNC 530, перестал определяться ключ доступа. Сам ключ вроде работает, если переключать на нём режимы, то в шкафу на соответствующих блоках лампочки тоже переключаются. Но изначально был уровень доступа 4, а теперь уровни доступа не активны. Ключ только один, запасных нет. Есть какой-то старый бэкап, пробовал его накатить, но какой-то он непонятный - станок грузится, но почти в конце загрузки выдаёт какую-то ошибку по параметрам. Может кто знает в каком из разделов и в какой папке искать установленные драйверы ключа?
    • YuriySt54
      В данной конструкции можно сразу одним телом делать и обрезать. Но меня интересовало, можно ли сразу при построении массива ограничить лишнее.
    • Ветерок
      Сделать основание одним телом, массив другим телом. Тело массива обрезать как надо, потом объединить тела.
    • YuriySt54
      Можно ли при построении массива лишнее отсечь, как к примеру отсечено по длинной стороне. Делал начальный элемент бобышкой по траектории с выбранной функцией "выровнять с торцевыми поверхностями". Можно ли так сделать при построении массива? Или отдельно потом обрезать лишнее только?
    • waze4534
      Необходимо рассчитать предельную нагрузку на подвешенную емкость. Как провести анализ не ограничив геометрию емкости? 
×
×
  • Создать...