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

Определение N кадра


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

Как в подпрограмме определить N кадра основной программы из которого она (подпрограмма) была вызвана?

Это нужно для подготовки следующего инструмента автоматически по тексту основной программы.

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


Как в подпрограмме определить N кадра основной программы из которого она (подпрограмма) была вызвана?

Это нужно для подготовки следующего инструмента автоматически по тексту основной программы.

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

А не проще через параметр явно передать номер следующего инструмента? Программы, бывает, правятся и перенумеровываются.

Если в программе явно передавать номер следующего инструмента, то при изменении

в программе последовательности инструментов необходимо будет вручную исправлять номера

подготавливаемых инструментов.

Я хочу, чтоба программа "читала" свой текст, находила номер следующего инструмента, и

заранее его подготавливала.

Тогда возможно будет, например, менять местами части текста программы, и не заботиться об

исправлениях в подготовке инструмента.

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

Если в программе явно передавать номер следующего инструмента, то при изменении

в программе последовательности инструментов необходимо будет вручную исправлять номера

подготавливаемых инструментов.

Я хочу, чтоба программа "читала" свой текст, находила номер следующего инструмента, и

заранее его подготавливала.

Тогда возможно будет, например, менять местами части текста программы, и не заботиться об

исправлениях в подготовке инструмента.

Т.е. если я правильно понял: есть УП состоящая из трех кусков-подпрограмм, к примеру

A

B

C

причем A - обрабатывается инструментом 1, B - инструментом 2, C - инструментом 3, причем подготовка инструмента для обработки след куска осуществляется в предыдущем - в подпрограмме A готовится инструмент для B, а в B - для C. Делаем след. вещь - меняем последовательность подпрограмм B и C, а А не изменяем никак. Вопрос: как должна быть организована подпрограмма A, чтобы теперь в ней готовился инструмент не для B а для C.

По-моему это нереализуемо.

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

Т.е. если я правильно понял: есть УП состоящая из трех кусков-подпрограмм, к примеру

A

B

C

причем A - обрабатывается инструментом 1, B - инструментом 2, C - инструментом 3, причем подготовка инструмента для обработки след куска осуществляется в предыдущем - в подпрограмме A готовится инструмент для B, а в B - для C. Делаем след. вещь - меняем последовательность подпрограмм B и C, а А не изменяем никак. Вопрос: как должна быть организована подпрограмма A, чтобы теперь в ней готовился инструмент не для B а для C.

По-моему это нереализуемо.

Это вполне реализуемо.

Программа состоит не из подпрограмм, а, как обычно, из кусков

A

B

C,

которые являются частями основной программы.

Некоторые СЧПУ, как и Sinumerik позволяют системе читать текст УП и считать в переменную

номер/название инструмента стоящего в начале куска B. И сделать его подготовку, пока

происходит обработка куска A. Это вполне реально.

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

Это вполне реализуемо.

Программа состоит не из подпрограмм, а, как обычно, из кусков

A

B

C,

которые являются частями основной программы.

Некоторые СЧПУ, как и Sinumerik позволяют системе читать текст УП и считать в переменную

номер/название инструмента стоящего в начале куска B. И сделать его подготовку, пока

происходит обработка куска A. Это вполне реально.

Что-то больно замуторно....И по моему уж совсеем от великой лени придумано :) А можно пример (только упаси Боже не всей программы и подпрограмм), а структурный? И что откуда должно браться

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

Что-то больно замуторно....И по моему уж совсеем от великой лени придумано :) А можно пример (только упаси Боже не всей программы и подпрограмм), а структурный? И что откуда должно браться

A:

N10 T="MT"; Подготовка инструмента "MT"

N20 ;..... Работа инструментом "A1"

N30 М6; Смена инструмента

B:

N40 T="A50"; Подготовка инструмента "A50"

N50 ;..... Работа инструментом "MT"

;.....

N200 M30

Это обычная структура УП.

Если в процессе отладки программы потребуется работать вместо инструмента "MT"

инструментом "A10" то необходимо изменять подготовку его в кадре N10.

Это неудобно, т.к. куски программы при этом зависимы друг от друга.

Альтернатива этому способу - независимость кусков программы друг от друга: можно

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

кадров подготовки инструмента. При больших программах это очень удобно, и дело

даже не в великой лени, а в экономии времени при отладке программы.

Реализуется это заменой кадров N10,N50,... вызовом подпрограммы Tool_Prep, которая

читает текст основной УП и производит подготовку нужного инструмента:

A:

N10 Tool_Prep; Подготовка инструмента

N20 ;..... Работа инструментом "A1"

B:

N30 T="MT" М6; Смена инструмента

N40 Tool_Prep; Подготовка инструмента

N50 ;..... Работа инструментом "MT"

C:

N60 T="A50" М6; Смена инструмента

N70 Tool_Prep; Подготовка инструмента

N80 ;..... Работа инструментом "A50"

;.....

N200 M30

Tool_Prep

; Определяется номер строки, откуда произведен вызов

; Читается ближайшая нижняя строка с M6

; Делается подготовка инструмента в фоновом режиме

M17

Теперь можно просто менять местами куски B и C - программа будет правильно работать и

правильно подготавливать следующий инструмент.

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

Как в подпрограмме определить N кадра основной программы из которого она (подпрограмма) была вызвана?

Это нужно для подготовки следующего инструмента автоматически по тексту основной программы.

Tool_Prep

; Определяется номер строки, откуда произведен вызов

; Читается ближайшая нижняя строка с M6

; Делается подготовка инструмента в фоновом режиме

M17

Отличный ответ)))))

NickyWizard не упрощай жизнь ((цитата: только упаси Боже не всей программы и подпрограмм)), а то мы ответа не дождёмся )))

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

Отличный ответ)))))

NickyWizard не упрощай жизнь ((цитата: только упаси Боже не всей программы и подпрограмм)), а то мы ответа не дождёмся )))

не сочтите за пиар, но я просто в эту тему зашел вот после этой - <noindex>http://fsapr2000.ru/index.php?showtopic=35120</noindex> потому и просьбу таку дал :)

А по сабжу, я все-равно ничего не понял... Как номер кадра с номером инструмента связан?

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

А по сабжу, я все-равно ничего не понял... Как номер кадра с номером инструмента связан?

Номер инструмента (следующего) находится в программе после номера кадра с Toolprep.

И Toolprep нужно читать текст УП ниже кадра из которого была вызвана.

Для этого и надо в ней (подпрограмме) определить N кадра или N строки основной программы из которого она была вызвана. Об этом и спрашиваю.

Нужна как бы системная переменная, в которой

записан номер текущего кадра основной программы. Увы, я такой переменной не нашёл.

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

Те надеемся, что препроцессор бежит впереди обработки и пишет в некую переменную номер инструмента, которым надо производить обработку след сегмента УП, после этого он встает и ждет, пока обработка не дойдет до этого места. Ну чтож, если полагаем что опережение препроцессора является достаточным делаем так:

в теле основной программы там где готовим инструмент пишем

R123=номер_следующего_инструмента

STOPRE

а в программе tool_prep

T=R123

НО!!! Все это будет работать только если опережение препроцессора не меньше чем число кадров от вызова tool_prep до записи в параметр 123, который в данном случае будет хранить номер след инструмента.

ИМХО - дичайший изврат. Переносимость кода вызывает сомнения, никто другой с первого раза это не поймет, где нибудь что-то пойдет не так - замучаешься искать ошибку.

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

Те надеемся, что препроцессор бежит впереди обработки и пишет в некую переменную номер инструмента, которым надо производить обработку след сегмента УП, после этого он встает и ждет, пока обработка не дойдет до этого места. Ну чтож, если полагаем что опережение препроцессора является достаточным делаем так:

в теле основной программы там где готовим инструмент пишем

R123=номер_следующего_инструмента

STOPRE

а в программе tool_prep

T=R123

НО!!! Все это будет работать только если опережение препроцессора не меньше чем число кадров от вызова tool_prep до записи в параметр 123, который в данном случае будет хранить номер след инструмента.

ИМХО - дичайший изврат. Переносимость кода вызывает сомнения, никто другой с первого раза это не поймет, где нибудь что-то пойдет не так - замучаешься искать ошибку.

Если я правильно понял, Вы говорите о "буферном чтении" текста УП. Согласен, что

в этом случае ход программы будет непредсказуем - неизвестно попадёт или нет

строка R123=... в участок "заглатывания" препроцессора.

Поясню, когда я писал "программа читает свой текст" я подразумевал использование

команды Read() в теле подпрограммы Tool_Prep. При этом число кадров от подготовки

инструмента до его смены - не имеет значения, система будет читать до конца файла

все кадры, пока не наткнется на "... M6" (STOPRE в этом случае - не действует).

Каким бы не был файл большим, я думаю, это будет происходить почти мгновенно,

за счет высокого быстродействия системы.

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

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

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

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

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

Если забивать название инструмента вручную - то потребуется правка этих кадров

при изменении последовательности обработки.

Попробую объяснить ещё раз идею автоматической подготовки инструмента.

У нас есть УП, в которой обработка происходит несколькими инструментами.

Эта УП работает правильно, по завершении обработки одним инструментом

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

Ждать процесс смены инструмента не хочется уже на этапе обкатки первых деталей.

Поэтому приходится вставлять в текст УП кадры подготовки инструмента. Так?

Мы СМОТРИМ имя следующего инструмента и вписываем его вызов заранее.

Это - монотонная работа, повторяющаяся не раз при отладке программы.

Идея в том, чтобы подпрограмма Tool_Prep сама СМОТРЕЛА текст УП и вызывала

следующий инструмент (заранее).

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

Если я правильно понял, Вы говорите о "буферном чтении" текста УП. Согласен, что

в этом случае ход программы будет непредсказуем - неизвестно попадёт или нет

строка R123=... в участок "заглатывания" препроцессора.

Поясню, когда я писал "программа читает свой текст" я подразумевал использование

команды Read() в теле подпрограммы Tool_Prep. При этом число кадров от подготовки

инструмента до его смены - не имеет значения, система будет читать до конца файла

все кадры, пока не наткнется на "... M6" (STOPRE в этом случае - не действует).

Каким бы не был файл большим, я думаю, это будет происходить почти мгновенно,

за счет высокого быстродействия системы.

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

Пардон за грубость в предыдущем посте. Не подозревал о существовании такой ф-ции. В таком случае, вы же знаете индекс строки в которой встретилось T123, сохраняйте его в параметре и при следующем вызове Tool_Prep читайте от него.
Ссылка на сообщение
Поделиться на других сайтах
  • 1 месяц спустя...

А если в начале программы задавать последовательность обработки например через переменные R:

R1=12;первый инструмент

R2=3; второй

R3=6; третий

итд

R60=1.0; "обнуляем" счетчик

В самой программе T нужно будет написать только один раз при смене на первый инструмент:

T=R1

M6

На следующих - только M6 так как выбор будет уже произведён в подпрограмме.

А в подпрограмме вставить счетчик смены инстр.(вызовов подпрограммы):

R60=R60+1; счетчик

EXECSTRING("T=R"<<R60); предварительный выбор след. инстр.

M17

Можно будет как угодно менять местами части программы, главное чтобы в начале было T=R1

Усложняется основная программа, но всё же как вариант...

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

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

Интересно, а функцию EXECSTRING я не нашёл ни в расширенном программировании, ни в основах. Смысл её ясен из названия, а будет ли она работать на 840D?

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

У меня на 802D sl работает, думаю и на 840 тоже будет работать. Где её нашёл уже и не помню.

Если уж так часто приходится менять последовательность обработки то лучше основную программу сделать подпрограммой и расставить в ней метки. А основная программа будет состоять из последовательности вызовов этой подпрограммы с передачей параметра-метки. Поменять местами строчки или переписать параметры-метки мне кажется проще, чем менять местами куски программы. Хотя придется попариться с написанием подпрограммы, да ещё её придётся прописывать в файлах COV.com и UC.com так как с передачей параметров. Кстати и номера инструментов тоже можно параметром передавать.

А можно в начале программы задавать через переменные типа string последовательность обработки:

DEF STRING[8] OBR1, OBR2, OBR3.....

OBR1="FREZER"

OBR2="SVERL"

OBR3="REZBA"

R1=0.0

STRT:

R1=R1+1.0

IF R1==1.0

EXECSTRING("GOTOF "<<OBR1)

ENDIF

IF R1==2.0

EXECSTRING("GOTOF "<<OBR2)

ENDIF

IF R1==3.0

.....

ELSE

GOTOF ENDPRG

а в самой программе ставить метки:

FREZER:

....обработка-фрезерование

GOTOB STRT

SVERL:

...обработка-сверление

GOTOB STRT

итд

ENDPRG:

M2

В этом случае менять придётся только значения переменных OBR1, OBR2...

А с предварительным выбором опять вопрос - надо подумать :)

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

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

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

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

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

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

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

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

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

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

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



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