Методика работы с NC-подпрограммами

В существующих системах ЧПУ приняты различные способы оформления подпрограмм в управляющей программе (УП), однако по критерию расположения текста подпрограмм относительно строк основной программы можно выделить несколько типичных случаев:

  • Подпрограммы выводятся в УП до вывода основной программы;

  • Подпрограммы выводятся в УП после вывода основной программы;

  • Подпрограммы выводятся в УП в месте первого вызова;

  • Подпрограммы не поддерживаются, и текст подпрограммы выводится при каждом вызове.

Рассмотрим, каким образом можно реализовать каждый из указанных случаев.

Подпрограммы выводятся в УП до вывода основной программы

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

Для вывода подпрограмм в самом начале, следует вставить соответствующий код в процедуру обработки технологической команды <PARTNO>, которая выполняется первой. Вид процедуры показан ниже.

PROGRAM PARTNO

! Инициализация переменных

! Вывод строк, идентифицирующих начало секции подпрограмм

NCSub.Output ! Вывод всех имеющихся подпрограмм

! Вывод строк, идентифицирующих конец секции подпрограмм и

! начало секции основной программы

! Инициализация переменных

END

С целью формирования строк управляющей программы, идентифицирующих начало, конец и вызов NC-подпрограммы, следует написать процедуру – обработчик технологических команд <PPFUN STARTSUB(50)>, <PPFUN ENDSUB(51)> и <PPFUN CALLSUB(52)> как показано ниже.

program PPFun

if CLD[1]=50 then begin ! Команда StartSub

! Вывод строки, идентифицирующей начало

! подпрограммы (здесь "oИмяПодпрограммы"):

Output "o"+NCSub.Name(CLD[2])

! Присвоение начальной метке текущего

! значения из регистра номера кадра:

NCSub.StartLabel(CLD[2]) = Str(BlockN)

end

else if CLD[1]=51 then begin ! Команда EndSub

! Вывод строки, идентифицирующей конец подпрограммы (здесь

! "Nxx M99", где Nxx - номер кадра):

FormBlock

Output OutStr$ + " M99"

! Присвоение конечной метке значения из регистра номера кадра:

NCSub.EndLabel(CLD[2]) = Str(BlockN)

end

else if CLD[1]=52 then begin ! Команда CallSub

! Вывод строки вызова подпрограммы вида "Nxx M98 Nbb,Nee", где

! Nxx - текущий кадр,

! Nbb - кадр начала подпр.,

! Nee - кадр конца подпрограммы:

FormBlock

Output OutStr$+" M98 "+

NCSub.StartLabel(CLD[2])+","+

NCSub.EndLabel(CLD[2])

NCSub.Output(CLD[2],0) ! Холостой прогон подпрограммы

end

end

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

В операторе вывода NC-подпрограммы <NCSUB.OUTPUT> указан режим 0, однако, т.к. все подпрограммы уже выведены в управляющую программу ранее, можно не указывать данный параметр, что будет означать вывод в режиме 1 ("только в первый раз").

Подпрограммы выводятся в УП после вывода основной программы

Предполагается, что текст основной УП вместе со строками вызова NC-подпрограмм располагается перед кодом самих подпрограмм. В этом случае оператор вывода NC-подпрограмм помещается в процедуру обработки технологической команды, которая обрабатывается последней – <FINI>. Общий вид процедуры представлен ниже:

program Fini

! Вывод строк, идентифицирующих конец секции основной программы и

! начало секции подпрограмм

! Инициализация переменных

NCSub.Output ! Вывод всех имеющихся подпрограмм

! Вывод строк, идентифицирующих конец секции подпрограмм

end

Пример обработчика для технологических команд начала, конца и вызова подпрограмм (<PPFUN STARTSUB(50)>, <PPFUN ENDSUB(51)> и <PPFUN CALLSUB(52)>) в сравнении с предыдущим случаем не изменяется. Величины, возвращаемые функциями работы с метками (<NCSUB.STARTLABEL> и <NCSUB.ENDLABEL>), до момента окончания трансляции имеют значения по умолчанию вида <SLabelNxxx> и <ELabelNxxx>, где <xxx> – номер NC-подпрограммы, т.к. реальные значения меток на момент запроса еще не определены. Реальные значения меток подставляются лишь после окончания трансляции управляющей программы в целом.

Подпрограммы выводятся в УП в месте первого вызова

В данном случае подпрограмма является частью основной программы, обращение к которой может быть произведено повторно, указанием, например, начального и конечного кадров. Таким образом, подпрограмма выводится при первом вызове как часть основного кода, а при последующих – как вызов существующего кода. Весь код, отвечающий за NC-подпрограммы, помещается в процедуру обработки технологических команд начала, конца и вызова подпрограмм (<PPFUN STARTSUB(50)>, <PPFUN ENDSUB(51)> и <PPFUN CALLSUB(52)>).

program PPFun

if CLD[1]=50 then begin ! Команда StartSub

! Присвоение начальной метке текущего значения из регистра

! номера кадра:

NCSub.StartLabel(CLD[2]) = Str(BlockN)

end

else if CLD[1]=51 then begin ! Команда EndSub

! Присвоение конечной метке значения из регистра номера кадра

NCSub.EndLabel(CLD[2]) = Str(BlockN)

end

else if CLD[1]=52 then begin ! Команда CallSub

if NCSub.Output(CLD[2])=0 then begin ! Если вывод подпрограммы был

! Вывод строки вызова подпрограммы вида "Nxx M98 Nbb,Nee", где

! Nxx - текущий кадр,

! Nbb - кадр начала подпрограммы,

! Nee - кадр конца подпрограммы

FormBlock

Output OutStr$+" M98 "+

NCSub.StartLabel(CLD[2])+","+

NCSub.EndLabel(CLD[2])

end

end

end

В приведенном примере первый вызов оператора <NCSUB.OUTPUT(CLD[2])> для каждой подпрограммы осуществит вывод NC-подпрограммы в управляющую программу и вернет значение 1. При каждом последующем вызове, будет осуществлен "холостой прогон" и будет возвращено значение 0, а в управляющую программу будет добавлена строка вызова соответствующей подпрограммы.

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

Подпрограммы не поддерживаются

В тех случаях, когда система ЧПУ не поддерживает использование подпрограмм, а последовательность технологических команд содержит NC-подпрограммы и их вызов, то можно осуществить своеобразное "развертывание" NC-подпрограмм, т.е. во всех местах вызова подпрограммы следует вставить вместо строки вызова саму подпрограмму. Для этого в процедуру обработки команды вызова подпрограммы <PPFUN CALLSUB(52)> следует вставить код следующего вида:

program PPFun

if CLD[1]=52 then begin ! Команда CallSub

NCSub.Output(CLD[2], 2) ! Вывод подпрограммы в любом случае

end ! (режим 2)

end

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

Сопутствующие ссылки:

Операторы работы с NC-подпрограммами

Оператор вывода NC-подпрограммы <NCSUB.OUTPUT>

Оператор определения имени NC-подпрограммы <NCSUB.NAME>

Оператор определения начальной метки NC-подпрограммы <NCSUB.STARTLABEL>

Оператор определения конечной метки NC-подпрограммы <NCSUB.ENDLABEL>