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

Программирование с переменными


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

В 02.06.2019 в 02:08, Alexandr128 сказал:

Здравствуйте. Прошу помощи. Нужна программа для обработки одинаковых деталей, чтобы можно было менять количество деталей

Вот самая простая программа по кол. деталей через смену нулевых точек

#1=4(Kolicestvo detalei)
#2=54
#3=0
N1
IF[#3EQ#1]GOTO2
G#2
(--------)
OBRABOTKA
(--------)

#3=#3+1
GOTO1
N2
M30

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


В 03.06.2019 в 11:19, Guhl сказал:

вам нужно организовать подсчет деталей в теле программы?

то есть у вас нет ни аппаратного счетчика, ни программного?

Есть переменные в системе для количества деталей (счётчики), смотрите документацию к стойке!

Зачем придумывать колесо!

Актуально для 16, 18:

5cf6854770989_16-18MBRUB-63534RU_02_061113.jpg.be8e96867b39bbea7340870ca1108afc.jpg

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

Есть переменные в системе для количества деталей (счётчики), смотрите документацию к стойке!

Зачем придумывать колесо!

Актуально для 16, 18:

5cf6854770989_16-18MBRUB-63534RU_02_061113.jpg.be8e96867b39bbea7340870ca1108afc.jpg

а я-то тут при чем?

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

а я-то тут при чем?

Пардон! Может вопрошающий увидит!

В 28.12.2014 в 04:21, nomed сказал:

ну наверное как то так

 

%
8888
(VYBORKA-GRIBKOM)
T1M6
G17G40G80
G0G90G54G43H1Z200.S800M3F100
X0Y0
Z-200.
#1=200(START-PO-Z)
#2=302.(STOP-PO-Z)
#3=4.(SHAG-PO-Z)
#4=16 (B-FREZY)
#5=0.
#7=#4+#1
N10Z-#7
G0G90X-41.738Y-125.228
G1G41D1X-67.034Y-201.123F40
G3X-201.123Y-67.034R-212.F100
G1G40X-125.228Y-41.738F500
G0X-41.738Y-125.228
#7=#7+#3
IF[#7LE#2]GOTO10
#5=#2-#7
#7=#7+#5
IF[#6NE0.]GOTO20
#6=1.
IF[#7GE#2]GOTO10
N20M5
M30
%

Не понятно зачем IF вообще использовать, можно и WHILE (тем более производитель рекомендует)!

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

Пардон! Может вопрошающий увидит!

Не понятно зачем IF вообще использовать, можно и WHILE (тем более производитель рекомендует)!

while только на винтовой интерполяции использую, а вообще каждый точит как он хочет,  да и мне кажется GOTO удобнее читать со стойки, не так кучкуется как while 1 2 3 

 

 

 

 

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

while только на винтовой интерполяции использую, а вообще каждый точит как он хочет,  да и мне кажется GOTO удобнее читать со стойки, не так кучкуется как while 1 2 3 

Я хоть и не пишу программы для станка, но вставлю свои 5 копеек.

У любых программистов считается плохим тоном использовать команду GO TO или подобную команду безусловного перехода.

Она часто путает весь порядок вещей.

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

Я хоть и не пишу программы для станка, но вставлю свои 5 копеек.

У любых программистов считается плохим тоном использовать команду GO TO или подобную команду безусловного перехода.

Она часто путает весь порядок вещей.

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

попробуйте взять со станка любую программу с 9ххх номером или от renishaw, переделать ее под WHILE, а получится ли?

while ограничен телом цикла 

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

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

попробуйте взять со станка любую программу с 9ххх номером или от renishaw, переделать ее под WHILE, а получится ли?

while ограничен телом цикла 

IF Используется в основном, в подпрограммах потому-что необходима проверка выполнения условий. Сами разработчики рекомендуют использовать WHILE, а не IF, при IF - (GOTO) выполняется проверка всей программы, если условие выполнено (если программа очень длинная и переход в конце, и где-то рядом сам номер перехода (N) стойка начнёт проверку сначала программы, скорей всего станок остановиться), WHILE это маркер проверка не выполняется и излишняя память и время на проверку не требуется . При написании своего цикла, тоже использую IF для проверки ввода значений оператора примерно так:

G145 A20 B30 (программа)

подпрограмма

IF[#1EQ#0]GOTO9005 (проверка указано ли значение А, если нет возникает ошибка)

WHILE...(тело программы)

N9005#3000=101(NE UKAZANO ZNACHENIE A) (отображение на экране ошибки)

М30

Ваша программа проверки условий не требует.

Вот через WHILE:

% O8888
(VYBORKA-GRIBKOM)
G54 

T1 M6
S800 M3 F100


#1=-216 (PERVII.PROFOD.PO.Z)
#2=-302 (KONECHNAY.GLUBINA.PO.Z)
#3=4 (SHAG.PO.Z.VSEGDA.POLOGITELNII)


G0 X-41.738 Y-125.228
G43 H1 Z20 
WHILE[#1GT#2]DO1
G0 X-41.738 Y-125.228
Z#1
G1 G41 D1 X-67.034 Y-201.123 F40
G3 X-201.123 Y-67.034 R-212. F100
G1 G40 X-125.228 Y-41.738 F500
G0 X-41.738 Y-125.228
#1=#1-#3
END1
G0 X-41.738 Y-125.228
Z#2
G1 G41 D1 X-67.034 Y-201.123 F40
G3 X-201.123 Y-67.034 R-212. F100
G1 G40 X-125.228 Y-41.738 F500
G0 Z400
M5
M30
%

Можно еще сократить, после END1 проход не писать, в этом примере сделано для лентяев, кому не охота пересчет по Z делать, в данном случае программа в любом случае сделает Z-302 даже, если шаг будет 1,234 или 0,777. Можно написать #1=100 и #2=0 и также программа отработает от Z100 до Z0.

Уберем проход после END1 в WHILE вместо GT поставим GE (сделаем пересчёт) 302-216=86/4=21,5 не доделает до Z-302. Хорошо найдём 302-214=22/4=22 вот четное число проходов, значит #1=-214 шаг 4, или #1=-218 (при шаге 2: #1=-214, 216, 218 и т.д., при шаге 3: #1=-218, 215).

В 16.06.2015 в 01:03, lexa345 сказал:

Вопрос, кто нибудь пробовал записывать свою макро программу как модальный G код ?

Через G66 работает всё как надо


G21
G0 G17 G40 G49 G80 G90
T7 M6 
G0 G90 G54 X25. Y25. B0. C0. S5000 M3
G43 H7 Z10
M8
G66 P8010 A0. D15. Z-5. R5. Q1. F600.
X25. Y25.
X-25. Y25.
X-25. Y-25.
X25. Y-25.
X0 Y0
G67
M9
M5
G91 G30 Z0.
G30 X0. Y0.
M30
%

Захотелось сделать упростить и вызывать так


G21
G0 G17 G40 G49 G80 G90
T7 M6 
G0 G90 G54 X25. Y25. B0. C0. S5000 M3
G43 H7 Z10
M8
G810 A0. D15. Z-5. R5. Q1. F600.
X25. Y25.
X-25. Y25.
X-25. Y-25.
X25. Y-25.
X0 Y0
G67
M9
M5
G91 G30 Z0.
G30 X0. Y0.
M30
%

Сделал всё по описанию из документации: записал программу 8010 под номером 9010

в параметр 6050 -810 отрицательное значение.

Программа вызывается через G810 но работает только в 1ой точке,остальные пропускает, что может быть не так? возможно ещё какие то параметры менять надо?

post-26977-0-42858000-1434394684_thumb.png

 

 

При создании своего цикла G (знак минуса не ставиться) через параметры (О9010 - О9019) используется G65 после отработке М99 и возврате в программу переменные обнуляются, то есть необходимо постоянно прописывать:

G810 X25 Y25 A0 D15 Z-5 Q1 F600

G810 X-25 Y25 A0 D15 Z-5 Q1 F600

G810 X-25 Y-25 A0 D15 Z-5 Q1 F600

G67 не ставиться

G66 работает немного по другому в конце необходимо G67.

Ссылка на сообщение
Поделиться на других сайтах
В 23.09.2015 в 14:27, kla2 сказал:

проблема программисткая, не станочная: никогда не жди равенства чего-либо. И проблема то ли фанука, то ли G-кода: мне не удавалось сравнить параметр с константой, параметр с параметром - на ура.

Перепиши так:

 

#10=10

WHILE[#2LE#10] DO1

или

WHILE[#2GE#10] DO1

или

WHILE[#2LT#10] DO1

или

WHILE[#2GT#10] DO1

 

из этих 4 вариантов я не пытаюсь выбрать до пробы. От станка к станку, от реализации до реализации фанука рез-т различается. Я пробую по воздуху и выбираю. Или корректирую по типу #10=10,05 или #10=9,95

Может новичкам пригодится, NE и EQ в основном используются для специфических задач (как пример сравнения с нулём или #0 IF[#1EQ#0] GOTO 5 или IF[#1NE#2] THEN #3=10). Используйте GT, GE, LT, LE. В этом примере используйте LE, WHILE[#2LE10] (если #2 меньше или равна 10, то цикл выполняется), при LT (меньше) должен выполнить до 9,9 и и остановиться. Не забывайте про пересчет (чётность).

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

При создании своего цикла G (знак минуса не ставиться) через параметры (О9010 - О9019) используется G65 после отработке М99 и возврате в программу переменные обнуляются, то есть необходимо постоянно прописывать:

G810 X25 Y25 A0 D15 Z-5 Q1 F600

G810 X-25 Y25 A0 D15 Z-5 Q1 F600

G810 X-25 Y-25 A0 D15 Z-5 Q1 F600

G67 не ставиться

G66 работает немного по другому в конце необходимо G67.

 

То что вы привели в своём примере - не упрощает задачу...

Речь шла о задании модального G кода - эквивалентному G66, как это описывалось в документации, тогда ни какие манипуляции с заданием минуса в параметре или в основной программе (в Gкоде) не к чему не привели.

С использованием G66 и G67 всё работало и работает. 

 

Скрины  

0.thumb.png.3535bb3b7c357baf3d04c471d1e9dc03.png

 

01.png.e1f06ac1b60b0eaeac6573572bdc85b2.png

Hide  

 

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

 

То что вы привели в своём примере - не упрощает задачу...

Речь шла о задании модального G кода - эквивалентному G66, как это описывалось в документации, тогда ни какие манипуляции с заданием минуса в параметре или в основной программе (в Gкоде) не к чему не привели.

С использованием G66 и G67 всё работало и работает. 

 

Скрины

0.thumb.png.3535bb3b7c357baf3d04c471d1e9dc03.png

 

01.png.e1f06ac1b60b0eaeac6573572bdc85b2.png

Hide

 

У Вас стойка какая и к какой стойке документация. Вот к 16 и 18:

обратите внимание выделенной строчки не существует. Кроме G66 нет кода, для такого вывода, может в новых стойках ввели.

нач.jpg

кон.jpg

Только что, Dron123 сказал:

У Вас стойка какая и к какой стойке документация. Вот к 16 и 18:

обратите внимание выделенной строчки не существует. Кроме G66 нет кода, для такого вывода, может в новых стойках ввели.

нач.jpg

кон.jpg

Можете через копирование размножать цикл и изменять нужное.

7 минут назад, Dron123 сказал:

У Вас стойка какая и к какой стойке документация. Вот к 16 и 18:

обратите внимание выделенной строчки не существует. Кроме G66 нет кода, для такого вывода, может в новых стойках ввели.

нач.jpg

кон.jpg

Можете через копирование размножать цикл и изменять нужное.

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

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

У Вас стойка какая и к какой стойке документация. Вот к 16 и 18:

обратите внимание выделенной строчки не существует.

Пробовал на нулевых стойках MD, MC и документация от них.

1 час назад, Dron123 сказал:

Можете через копирование размножать цикл и изменять нужное.

Зачем, если вся задумка была создать что то подобное циклу сверления, хотя меня и через G66 всё устраивало, просто число символов хотел уменьшить в строке.

 

 По поводу сокращения. возможно кому нибудь пригодится

Когда изменяется или вставляется макро слово, то первые две или более буквы могут заменять целое слово.


WHILE →  WH  

GOTO  →  GO    

XOR    →  XO        

AND    →  AN                       

SIN     →  SI

ASIN   →  AS

COS    →  CO

ACOS  →  AC 
TAN    →  TA      

ATAN  →  AT        

SQRT  →  SQ        

ABS    →  AB                                

BCD   →  BC        

BIN   →  BI        

FIX  →  FI        

FUP  →  FU                              

ROUND  →  RO      

END  →  EN        

EXP  →  EX        

THEN  →  TH                       

POPEN  →  PO      

BPRNT  →  BP      

DPRNT  →  DP      

PCLOS   →  PC 

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

@Dron123  , все верно. в моем случае станок от оператора if не зависает , да и за годы работы просто привык на его основе строить алгоритмы. 

 

@lexa345  тоже думал написать свой G'ы код на сверление, а потом полазил по симке и не нашел как в нее добавить прорисовку своих G'ы кодов, в итоге от идеи отказался , а то мало ли кто нибудь случайно этот код куда то вставит  и не увидит 

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

Пробовал на нулевых стойках MD, MC и документация от них.

Зачем, если вся задумка была создать что то подобное циклу сверления, хотя меня и через G66 всё устраивало, просто число символов хотел уменьшить в строке.

 

 По поводу сокращения. возможно кому нибудь пригодится

Когда изменяется или вставляется макро слово, то первые две или более буквы могут заменять целое слово.


WHILE →  WH  

GOTO  →  GO    

XOR    →  XO        

AND    →  AN                       

SIN     →  SI

ASIN   →  AS

COS    →  CO

ACOS  →  AC 
TAN    →  TA      

ATAN  →  AT        

SQRT  →  SQ        

ABS    →  AB                                

BCD   →  BC        

BIN   →  BI        

FIX  →  FI        

FUP  →  FU                              

ROUND  →  RO      

END  →  EN        

EXP  →  EX        

THEN  →  TH                       

POPEN  →  PO      

BPRNT  →  BP      

DPRNT  →  DP      

PCLOS   →  PC 

Попробовал в параметр минус поставить, станок сразу послал, что и ожидалось, так что вариант один G66, но он может не на всех станках работать!

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

@Dron123  , все верно. в моем случае станок от оператора if не зависает , да и за годы работы просто привык на его основе строить алгоритмы. 

 

@lexa345  тоже думал написать свой G'ы код на сверление, а потом полазил по симке и не нашел как в нее добавить прорисовку своих G'ы кодов, в итоге от идеи отказался , а то мало ли кто нибудь случайно этот код куда то вставит  и не увидит 

Он и не будет зависать, пока программа маленькая.

Симке все просто:

% О2525
G0 X0 Y0
Z10
G65 P5454 A100 B50 C-10
M30

 

O5454

G1 Z#3
X#1 Y#2
G0 Z10
M99

На станке вместо G65 P5454 пишете свой G код и по документации присвоете программе О5454 нужный номер. Почитайте выше для сверловки цикл не эффективен, опять же, чем стандартные циклы сверловки (G81, G83 и т.д.) не устраивают там вроде бы всё учтено, зачем колесо изобретать! А так, ну если сильно хочется, лучше использовать G66, примерно так:

%
G0 X0 Y0
Z200

G66 P5454 Z-20 A10 D100 (вызов подпрограммы 5454)
X100 Y50 
X-100 Y-40
X50
G67 (прерывание G66, указывать обязательно)
M30

 

O5454 (подпрограмма)

G0 Z#1
G1 #26
G0 Z#7
M99

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

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

 

а со сверловкой , полный выход сверла часто и не нужен , надо чтобы внутри сверло поднялось относительно на 1мм и дальше продолжило сверлить

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

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

 

а со сверловкой , полный выход сверла часто и не нужен , надо чтобы внутри сверло поднялось относительно на 1мм и дальше продолжило сверлить

Вы плохо понимаете дзен цикла, создавайте программу цикла (например расфрезеровки отверстий: G155 X20 Y70 A40 D20 Q5 Z-20 V-5 R2 E3 F100) Отрабатываете на станке. На листочке записываете, какая буква за что отвечает и раздаёте операторам, и радуетесь жизни! Никакая симка не требуется (для этого и нужен цикл) или вы G81, тоже в симке пишите?

Кстати, есть такой фрезерный цикл, G73 X300 Y-10 Z-60 R2 Q15 F120, в параметре 5114 задается длина отскока (могу ошибиться номером параметра и это для 16, 18 стойки)

А по симке спросите в соответствующей теме, может помогут!

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

@Dron123 увы такое с нашими операторами не работает ) в первый же день куда-то не туда воткнуться или просто не будут пользоваться , потому что сложно ) 

Ссылка на сообщение
Поделиться на других сайтах
В 02.06.2019 в 01:08, Alexandr128 сказал:

Здравствуйте. Прошу помощи. Нужна программа для обработки одинаковых деталей, чтобы можно было менять количество деталей

Вопрос непонятен. Есть групповое приспособление на обработку нескольких одинаковых деталей?

В 06.06.2019 в 16:31, nomed сказал:

 вот если бы G код или подпрограмму можно было куда-то в симку встроить, чтобы при прорисовке она ее подгружала, это другое дело .

Я загружаю УП и ПП в одно окно в Симке заподряд и всё работает.

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

Доброго времени суток! После отработки  цикла while, программа не переходит к блоку после end. Выдает ошибку missing end statement. Стойка LNC.

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

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

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

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

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

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

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

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

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

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

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




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