Интерфейс интерпретатора

INCT_Interpreter - интерфейс, который должен быть реализован в программной библиотеке интерпретатора. Библиотека интерпретатора возвращает SprutCAM объект, реализующий интерфейс в качестве результата при вызове функции NCT_GetInterface . Через этот интерфейс SprutCAM взаимодействует с интерпретатором на всех этапах интерпретации текста управляющей программы.

Описание методов интерфейса:

Метод

Описание метода

Описание использования

GetIdentifier

Функция должна возвратить SprutCAM строку с идентификатором библиотеки интерпретатора.

Входных параметров нет.

При загрузке интерпретатора в память SprutCAM вызывает функцию GetIdentifier и ожидает получить идентификатор программной библиотеки. Затем SprutCAM сравнивает его с идентификатором библиотеки файла настроек интерпретатора, если идентификаторы совпали, продолжает процесс загрузки.

GetRegisters

Функция должна возвратить SprutCAM интерфейс INCT_RegisterList , который реализует список регистров интерпретатора.

Входных параметров нет.

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

SetInterface

Метод должен получить и, если это необходимо интерпретатору, сохранить передаваемые от SprutCAM интерфейсы для последующего использования. Метод будет вызван несколько раз: по числу передаваемых интерфейсов.

Входной параметр: Intf (интерфейс IUnknown)

Выходных параметров нет.

При инициализации интерпретатора SprutCAM последовательно передаёт библиотеке интерпретатора свои интерфейсы посредством метода SetInterface. Передаваемые интерфейсы могут использоваться при интерпретации текста управляющей программы и обеспечивают доступ к:

  • сформированному списку регистров INCT_SysState ;

  • управлению настройками анализа текста управляющей программы INCT_Analyzer ;

  • списку объектов для интерпретации INCT_BlockExecArray ;

  • настройкам оборудования INCT_Equipment ;

  • формирователю траектории движения инструментов в осях станка INCT_CLData ;

  • формирователю траектории движения инструментов в геометрических осях INCT_GeomCLData ;

  • взаимодействию с ядром SprutCAM, обслуживающим интерпретатор INCT_Kernel ;

  • интерпретатору-родителю INCT_Interpreter.

Initialize

Метод информирует интерпретатор об окончании передачи всех интерфейсов SprutCAM и возможности выполнения инициализации интерпретатора.

Входных параметров нет.

Выходных параметров нет.

При завершении инициализации интерпретатора SprutCAM вызывает метод Initialize. Вызов метода информирует интерпретатор о том, что все интерфейсы SprutCAM переданы, интерпретатор может выполнить необходимые действия для инициализации (например, получить номера осей станка).

NextOperation

Метод информирует интерпретатор о начале интерпретации следующей операции.

Входных параметров нет.

Выходных параметров нет.

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

TransLine

Метод передаёт интерпретатору кадр управляющей программы (или часть кадра, в зависимости от текущей итерации трансляции кадра) для попытки чтения лексемы или смысловой конструкции из его начала. В случае, если интерпретатор распознал лексему или конструкцию, он должен вернуть количество символов с начала строки, которые составляет распознанная лексема или конструкция. В ином случае возвращает количество равное 0.

Входные параметры: CurrentLine (строка) - передаваемый кадр или часть кадра.

Выходные параметры:

  • ProcessedChars (целое число), количество символов с начала строки, которые удалось распознать интерпретатору (SprutCAM не выполняет анализ этих символов). 0 - если лексема или смысловая конструкция не распознана.

  • NextLine (логическое), после трансляции текущего кадра перейти к трансляции следующего кадра управляющей программы без интерпретации текущего. Все объекты INCT_BlockExecArray текущего кадра будут сохранены и обработаны вместе с объектами следующего кадра единым блоком.

  • BreakLine (логическое), прервать трансляцию текущего кадра с сохранением позиции в кадре и перейти к интерпретации сформированного INCT_BlockExecArray. Следующая трансляция начнётся с сохранённой позиции текущего кадра.

В процессе трансляции кадра управляющей программы SprutCAM даёт возможность интерпретатору распознать лексему или смысловую конструкцию из начала текущего кадра. Для этого SprutCAM вызывает метод TransLine интерпретатора, передаёт ему в качестве входного параметра CurrentLine текущий кадр. В ответ в параметре ProccessedChars интерпретатор должен вернуть количество символов от начала переданной строки, составляющих лексему или смысловую конструкцию, если она распознана. Иначе, если лексема или конструкция не распознаны, интерпретатор возвращает значение, равное 0.

Если интерпретатор распознал лексему или смысловую конструкцию, то она удаляется из текущей строки CurrentLine, и строка вновь передаётся интерпретатору для попытки чтения следующей лексемы или смысловой конструкции, посредством вызова метода TransLine.

Если интерпретатор не распознал лексему или смысловую конструкцию, то SprutCAM пытается определить регистр и его значение по описанному в этой статье алгоритму. После чего все считанные символы удаляются из строки CurrentLine, и строка передаётся интерпретатору для попытки чтения следующей лексемы или смысловой конструкции, посредством вызова метода TransLine.

Процесс продолжается до завершения строки или, если параметр BreakLine принял значение Истина.

Если после вызова TransLine выходной параметр Break Line принимает значение Истина, то трансляция текущего кадра останавливается и SprutCAM выполняет процесс интерпретации оттранслированной части кадра. То есть, сформированный к этому моменту INCT_BlockExecArray будет сынтерпретирован.

Если после вызова TransLine выходной параметр NextLine имеет значение Истина, то после завершения трансляции текущего кадра, SprutCAM считывает и транслирует следующий кадр управляющей программы, без интерпретации текущего кадра. Сформированный по результатам трансляции текущего кадра INCT_BlockExecArray не очищается, и дополняется объектами созданными в процессе интерпретации следующего кадра. После завершения трансляции следующей строки и, если параметр NextLine вновь не принимает значение Истина, производится интерпретация накопленного в результате трансляции двух кадров INCT_BlockExecArray. Если же параметр NextLine снова Истина, то после завершения трансляции второго кадра, SprutCAM считывает и транслирует третий кадр и т.д.

DefineRegister

Функция должна выполнить поиск регистра по адресу, возвратить результат поиска и индекс найденного регистра.

Входной параметр: Addr (строка) - адрес регистра.

Выходной параметр: Index (целое число) - индекс найденного регистра.

При чтении лексемы SprutCAM пытается определить регистр в считанном из кадра управляющей программы наборе символов. Для этого SprutCAM вызывает функцию DefineRegister интерфейса интерпретатора, куда в качестве адреса регистра Addr передаёт считанный набор символов. При положительном ответе интерпретатора, регистр считается определённым и его индекс содержится в выходном параметре Index. При отрицательном ответе интерпретатора SprutCAM пытается найти регистр по адресу в списке регистров.

При реализации функции (INCT_Interpreter.DefineRegister) рекомендуется выполнять поиск и определение только тех регистров, которые не могут быть определены ядром SprutCAM однозначно. В остальных случаях поиск не выполнять, возвращать отрицательный результат.

BeforeInterprete

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

Входных параметров нет.

Выходных параметров нет.

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

Interprete

Метод передаёт интерпретатору номер элемента из списка объектов для интерпретации текущего кадра. Интерпретатор должен сынтерпретировать переданный объект, т.е. по номеру объекта определить его тип и, по необходимости, добавить команду по формированию элемента(-ов) траектории движения инструмента в INCT_CLData.

Входной параметр: ExecNum (целое число) - номер элемента списка объектов для интерпретации (INCT_BlockExecArray).

Выходных параметров нет.

В процессе интерпретации текущего кадра управляющей программы, если список INCT_BlockExecArray не пуст, SprutCAM последовательно выполняет метод Interprete, для каждого из объектов списка. Метод предназначен для интерпретации объекта из списка, т.е. для формирования элемента траектории движения инструмента по оттранслированному ранее объекту.

Пример для стойки Fanuc. Если переданный объект является регистром с адресом F(подача), то для изменения подачи текущей траектории движения инструмента, необходимо выполнить метод INCT_CLData.OutFeed. В качестве параметра подачи передать значение регистра.

AfterInterprete

Метод информирует интерпретатор об окончании интерпретации текущего кадра.

Входных параметров нет.

Выходных параметров нет.

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

EndOfProgram

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

Входных параметров нет.

Перед выполнением очередного метода Interprete, SprutCAM вызывает функцию EndOfProgram. Если функция возвращает значение Истина, то интерпретация текущего кадра и трансляция последующего текста управляющей программы прекращаются.