Интерфейс интерпретатора
INCT_Interpreter - интерфейс, который должен быть реализован в программной библиотеке интерпретатора. Библиотека интерпретатора возвращает SprutCAM объект, реализующий интерфейс в качестве результата при вызове функции NCT_GetInterface . Через этот интерфейс SprutCAM взаимодействует с интерпретатором на всех этапах интерпретации текста управляющей программы.
Описание методов интерфейса:
Метод |
Описание метода |
Описание использования |
GetIdentifier |
Функция должна возвратить SprutCAM строку с идентификатором библиотеки интерпретатора. Входных параметров нет. |
При загрузке интерпретатора в память SprutCAM вызывает функцию GetIdentifier и ожидает получить идентификатор программной библиотеки. Затем SprutCAM сравнивает его с идентификатором библиотеки файла настроек интерпретатора, если идентификаторы совпали, продолжает процесс загрузки. |
GetRegisters |
Функция должна возвратить SprutCAM интерфейс INCT_RegisterList , который реализует список регистров интерпретатора. Входных параметров нет. |
При загрузке интерпретатора в память SprutCAM вызывает функцию GetRegisters и ожидает получить список регистров интерпретатора, затем вызывает эту функцию для родителей интерпретатора. В результате SprutCAM формирует общий список регистров с учётом наследования. |
SetInterface |
Метод должен получить и, если это необходимо интерпретатору, сохранить передаваемые от SprutCAM интерфейсы для последующего использования. Метод будет вызван несколько раз: по числу передаваемых интерфейсов. Входной параметр: Intf (интерфейс IUnknown) Выходных параметров нет. |
При инициализации интерпретатора SprutCAM последовательно передаёт библиотеке интерпретатора свои интерфейсы посредством метода SetInterface. Передаваемые интерфейсы могут использоваться при интерпретации текста управляющей программы и обеспечивают доступ к:
|
Initialize |
Метод информирует интерпретатор об окончании передачи всех интерфейсов SprutCAM и возможности выполнения инициализации интерпретатора. Входных параметров нет. Выходных параметров нет. |
При завершении инициализации интерпретатора SprutCAM вызывает метод Initialize. Вызов метода информирует интерпретатор о том, что все интерфейсы SprutCAM переданы, интерпретатор может выполнить необходимые действия для инициализации (например, получить номера осей станка). |
NextOperation |
Метод информирует интерпретатор о начале интерпретации следующей операции. Входных параметров нет. Выходных параметров нет. |
Перед началом интерпретации очередной операции SprutCAM вызывает этот метод. Интерпретатор может выполнить необходимые действия (например, инициализировать внутренние переменные, установить порядок обработки управляющих программ операции). |
TransLine |
Метод передаёт интерпретатору кадр управляющей программы (или часть кадра, в зависимости от текущей итерации трансляции кадра) для попытки чтения лексемы или смысловой конструкции из его начала. В случае, если интерпретатор распознал лексему или конструкцию, он должен вернуть количество символов с начала строки, которые составляет распознанная лексема или конструкция. В ином случае возвращает количество равное 0. Входные параметры: CurrentLine (строка) - передаваемый кадр или часть кадра. Выходные параметры:
|
В процессе трансляции кадра управляющей программы 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. Если функция возвращает значение Истина, то интерпретация текущего кадра и трансляция последующего текста управляющей программы прекращаются. |