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

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


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 пользователей

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




  • Сообщения

    • alek77
      Да, спасибо, я уже из интереса ее нашел. Еще раз повторю, чтобы не выхватить, сам я такими методами указния размеров не пользуюсь, это самая вредная практика из всех, что встречал. В свое время имел много проблем в автокаде, корректируя чужие чертежи. Но там и отртогональные линии под углом в 0,001 градуса были в норме, и миллион линий одна поверх другой, и незамкнутые отрезки и много всего, от чего волосы дыбом. В солиде, думал, не столкнусь с таким, наивный. Поэтому искал и нашел макрос который косяки размеров подсвечивает. Он вполне рабочий, но не стабильный. В чем причина не разбирался, так как со своей задачей он справляется. Причем отрабатывает и галочки, и замену текста в размере. Хорошо, что @malvi.dp нашел время и что-то корректирует, спасибо отдельное ему за это. Макрос достаточно полезный при работе с чужими документами. И если удастся сохранить все начальные функции этого макроса против изощренных методов вредительства - будет офигенно.
    • Kelny
      Если этой ссылки достаточно для отображения материала и материал уже есть в обозначенной модели, то возможно подойдёт TabBuilder: https://help.solidworks.com/2023/russian/SolidWorks/SWHelp_List.html?id=e68c1877b4fa431483f8c751bd9fcc78&_gl=1*lby1j3*_up*MQ..*_ga*NTEyNjA5NDQ3LjE3MTQxMTU3MzA.*_ga_XQJPQWHZHH*MTcxNDExNTcyOS4xLjEuMTcxNDExNTczNy4wLjAuMA..#Pg0   В старых версиях при написанни ссылок такого радо в некоторых случаях можно было не писать имя файла, а достаточно было вместо имени файла модели оставить ПРОБЕЛ.SLDPRT и имя после этого подставлялось само. Пробовать надо.   Так же можете глянуть макрос по изменению свойств файла (методы и функции там устаревшие, но возможно даже будет работать и можно поковыряться в коде): https://kelnyproject.ucoz.ru/load/6-1-0-8 по програмированию так же есть справка (версию в ссылке поменяйте на свою, что бы справка была актуальна для вашей версии): https://help.solidworks.com/SearchEx.aspx?query=get custom property&version=2010&lang=english,enu&prod=api
    • gudstartup
      только перед обновлением обязательно выполните  все что написано в руководстве и касается сохранения состояния станка и чпу. и обязательно сделайте образ диска и помните что слишком новые версии могут не заработать на вашем чпу относительно безопасно ставить только сервиспаки
    • NordCom
      Большое спасибо! Через это меню удалось зайти в меню. 95148->MOD
    • Danil89nur
      Доброе время суток. Столкнулся с проблемой на новой работе. Много деталей у который в свойствах отсутствует раздел "Материал" и приходится каждый раз вручную заходить туда, создавать раздел и выбирать там ""SW-Material@Name.SLDPRT". Возможно кто-то знает, либо сможет помочь с написанием простенького макроса, при нажатии на который в свойствах детали будет создаваться необходимый раздел и в нем сразу написан выбранный материал (желательно, чтоб там было указано сразу наименование материала, а не формула для его получения ""SW-Material@Name.SLDPRT"). Пытался самостоятельно через ChatGPT, но так как в програмировании я 0, то ничего не получилось)
    • Bot
      Коллеги, Благодарю вас за интерес к проекту электронной энциклопедии в области инженерного программного обеспечения PLMpedia, который более 15 лет развивался группой компаний ЛЕДАС. Представленный ниже скриншот передаёт содержание и структуру базы данных энциклопедии, накопленной за эти годы: именно такую начальную страницу, можно было до сегодняшнего дня увидеть, придя по адресу https://plmpedia.ru/ В последние несколько лет ЛЕДАС особенно интенсивно и результативно вкладывает все ресурсы в развитие своего основного бизнеса: см. ниже «О компании ЛЕДАС». Сегодня я с некоторым сожалением констатирую, что у компании ЛЕДАС более нет возможности отвлекать ресурсы своих сотрудников на некоммерческий (фактически волонтерский) проект PLMpedia. Вся база данных ресурса может быть безвозмездно передана любому юридическому или физическому лицу с единственным условием: наш преемник должен будет публично объявить о состоявшейся передаче и взятии на себя [...] View the full article
    • gudstartup
      @NordCom  у вас наверное это так происходит читайте этот раздел itnc_530.pdf
    • fenics555
      интересный индус. А нового то чего?
    • gudstartup
      откудова качаете мне интересно?
    • ДОБРЯК
      Совсем забыл про собственные вектора       собственный тон частота           0.013                        1   Расчет собственных форм и частот   1         1   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   1         2   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00       собственный тон частота       15910.75                         2   Расчет собственных форм и частот   1         1   7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   1         2  -7.0711E-01   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00   0.0000E+00        
×
×
  • Создать...