Повторение куска кода

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Loituma
Мастер
Сообщения: 512
Зарегистрирован: 28 ноя 2011, 21:45
Репутация: 57
Контактная информация:

Повторение куска кода

Сообщение Loituma »

Здравствуйте, Уважаемые.

И так, запускаю очередной станок и тут возник вопрос, а как сделать повторение кода?

Например:

Код: Выделить всё

S3979

g0x775.y470.5
m3
g1z-10.5F30
g0z4
g1z12.5f20
g0z0
M5

g0x27.5y470.5
m3
g1z-9.5F30
g0z4
g1z12f20
g0z0
M5

g0x20.y20.z0
 

M30
g0x27.5y470.5
m3
g1z-9.5F30
g0z4
g1z12f20
g0z0
M5


Вот этот кусок кода мне нужно повторить 10 раз друг за другом...

И второй вопрос, как этот кусок можно вызвать как подпрограмму: то есть я ставлю спец символ, а выполняется этот кусок кода...
Пример взял с сверлильного...
Мне пожалуйста прямо примером...
Буду признателен.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

Код: Выделить всё

o112 repeat [10]
g0x27.5y470.5
m3
g1z-9.5F30
g0z4
g1z12f20
g0z0
M5
o112 endrepeat
повтор 10 раз
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

Код: Выделить всё

O<name> sub
g0x27.5y470.5
m3
g1z-9.5F30
g0z4
g1z12f20
g0z0
M5
O<name> endsub
теперь можно сохранить этот код в файл name.ngc и положить в папку с программами (путь к ней прописан в ини файле
в строке PROGRAM_PREFIX =)
или просто этот кусок кода писать в своей программе (это будет подпрограммой)
вызывается :
O<name> call
можно в подпрограмме значения заменить на переменные - тогда при вызове можно каждый раз указывать разные значения
пример вызова с передачей значений переменных:
O<name> call [12] [2] [224]
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Повторение куска кода

Сообщение Nick »

А ты прямо одну и туже программу выполняешь несколько раз и без остановки и без сдвигов?
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Повторение куска кода

Сообщение ukr-sasha »

Еще зависит какая стойка.
В Мач и ЕМС будет работать такой код:

Код: Выделить всё

G21G90
M98P1234Q10 // 10 раз вызывается подпрограмма №1234
M30

O1234
g0x27.5y470.5
m3
g1z-9.5F30
g0z4
g1z12f20
g0z0
M5
M99
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Повторение куска кода

Сообщение Nick »

ukr-sasha писал(а):В Мач и ЕМС будет работать такой код:
А в доках по Gкодам linuxcnc почему-то M98 нет...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

ukr-sasha писал(а):и ЕМС будет работать такой код:
В емс такой код работать не будет:
Выделение(008).jpg (2217 просмотров) <a class='original' href='./download/file.php?id=12819&sid=376cb3e14275fdf1d1a2d42715beb322&mode=view' target=_blank>Загрузить оригинал (168.71 КБ)</a>
и подпрограммы в емс не так оформляются
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Повторение куска кода

Сообщение ukr-sasha »

Странно. В К-Флопе, а он основан на коде ЕМС, все работает.
Ок. Беру свои слова назад, в ЕМС не работает. :)
Посмотрел на скрины, там где название подпрограммы, очень похоже, что не О (буква), а 0 (ноль).
Вполне возможно, что из-за этого.
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Повторение куска кода

Сообщение Nick »

ноль пишется с точкой - скорее всего O, тем более ругается не на нее...

А в Mach O1234 CALL будет работать?
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

ukr-sasha писал(а):Посмотрел на скрины, там где название подпрограммы, очень похоже, что не О (буква), а 0 (ноль).
Вполне возможно, что из-за этого.
нет - с этим там все в порядке
просто такой М-код(М98) емс не поддерживает
Аватара пользователя
ukr-sasha
Мастер
Сообщения: 3401
Зарегистрирован: 21 мар 2011, 07:47
Репутация: 2180
Настоящее имя: Украинец Александр Григорьевич
Откуда: Киев, Украина
Контактная информация:

Re: Повторение куска кода

Сообщение ukr-sasha »

Nick писал(а):А в Mach O1234 CALL будет работать?
Да.
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Повторение куска кода

Сообщение Rafiq »

А как с передачей параметров в подпрограмму? Например, базовых координат, и с указанием координат во всех кадрах в подпрограмме относительно базовых, переданных как параметр.

Допустим, есть подпрограмма для вырезания шайб, ей передаются координаты центра шайбы, и мне надо вырезать 10 таких из одного листа, соответственно при каждом вызове будут новые параметры.

А может еще и условные переходы есть? ;) Xотя вроде как не нужны они в УП.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

Rafiq писал(а):А как с передачей параметров в подпрограмму?
выше писал,что при вызове подпрограммы передаются и параметры:
O<code> call [2] [32] [5.45]
здесь вызываем подпрограмму code и передаем ей три параметра
есть конструкции if - else и while
Аватара пользователя
Loituma
Мастер
Сообщения: 512
Зарегистрирован: 28 ноя 2011, 21:45
Репутация: 57
Контактная информация:

Re: Повторение куска кода

Сообщение Loituma »

Nick писал(а):А ты прямо одну и туже программу выполняешь несколько раз и без остановки и без сдвигов?
в бухте бывает 10000 метров проволки, изделие больше метра редко идет, а делаем тысячами :thinking: ...
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Повторение куска кода

Сообщение nkp »

если пользуешь емс - то можно и больше повторов задавать (не знаю как 1000 будет грузиться долго)
в Axis нужно будет отключать предпросмотр...
опять же если Axis...
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Повторение куска кода

Сообщение Rafiq »

nkp писал(а): O<code> call [2] [32] [5.45]
здесь вызываем подпрограмму code и передаем ей три параметра
Ок, а как в подпрограмме обратиться к этим аргументам? Например, как там написать что-то вроде G0 X<аргумент_X>+10 Y<аргумент_Y>+10?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Повторение куска кода

Сообщение Nick »

В подпрограмме эти аргументы будут #1, #2, ..., #30, т.о. передать можно до 30 аргументов. Все эти переменные будут локальными для подпрограммы.
Также можно использовать и глобальные переменные (все, что не входит в #1-30).
Аватара пользователя
Rafiq
Мастер
Сообщения: 1053
Зарегистрирован: 28 сен 2012, 18:11
Репутация: 6
Откуда: Tatarstan Respublikası, Yar Çallı şəhəre
Контактная информация:

Re: Повторение куска кода

Сообщение Rafiq »

Т.е. в подпрограмме надо писать

G0 X#1+10 Y#2+10

так?
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Повторение куска кода

Сообщение Nick »

Да, или #<x> = #1, ну и т.д. Но если простая подпрограмма, то лучше #1, а в комментах написать, что оно значит.
Ответить

Вернуться в «LinuxCNC»