Jump to content

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


Viktor2004

Recommended Posts

Viktor2004

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

 

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

#500 - год

#501 - месяц

#502 - день

???

IMG_20210207_200031_4.jpg

Link to post
Share on other sites


UnPinned posts
mr_Voden

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

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

  • Чемпион 1
Link to post
Share on other sites
Viktor2004
7 минут назад, mr_Voden сказал:

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

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

 

IMG_20210207_203510_9.jpg

Edited by Viktor2004
Link to post
Share on other sites
Viktor2004

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

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

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

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

3571672902

 

HDCPY001.JPG

Edited by Viktor2004
Link to post
Share on other sites
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
 

  • Нравится 2
Link to post
Share on other sites
mr_Voden

@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

 

  • Нравится 2
Link to post
Share on other sites
Viktor2004

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

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

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

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

Link to post
Share on other sites
Viktor2004

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

IF[ #501 NE 152 && #500 NE 21 ]THEN  /* нажато либо 152 INPUT либо 21 SOFT KEY 1
Link to post
Share on other sites
Viktor2004

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

G65 P8004

M98 P8004

Link to post
Share on other sites
21 минуту назад, Viktor2004 сказал:

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

G65 P8004

M98 P8004

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

Link to post
Share on other sites
Viktor2004
1 минуту назад, A_1 сказал:

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites
Viktor2004

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

#1 = 1

#2 = 2

M98 P9008

 

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

Link to post
Share on other sites

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

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

Edited by A_1
Link to post
Share on other sites
Viktor2004
54 минуты назад, A_1 сказал:

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

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

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

Link to post
Share on other sites
  • 3 weeks later...
Viktor2004

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

#[8500]

и

#8500

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

Edited by Viktor2004
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.



×
×
  • Create New...