Трансляция и интерпретация текста управляющей программы

Интерпретация текста управляющей программы.

До тех пор, пока кадры управляющей программы не закончатся или библиотека интерпретатора не выставит признак окончания программы (метод INCT_Interpreter.EndOfProgram), SprutCAM будет считывать кадры управляющей программы и для каждого кадра выполнять следующие шаги:

  • Трансляцию кадра управляющей программы (анализ кадра на предмет знакомых конструкций - объектов для интерпретации);

  • Если трансляция кадра привела к появлению хоть одного объекта в списке объектов текущего кадра для интерпретации (т.е. список объектов для интерпретации INCT_BlockExecArray не пуст), выполняется последовательная интерпретация каждого объекта из списка INCT_BlockExecArray;

  • Список объектов текущего кадра для интерпретации очищается.


Трансляция кадра управляющей программы.

До тех пор, пока символы кадра не закончились, SprutCAM выполняет следующие шаги:

  • Передача библиотеке интерпретатора необработанной части кадра (то есть, на первом шаге будет передан весь кадр). В ответ SprutCAM ожидает получить количество символов с начала переданной строки, которые интерпретатор распознал как отдельное слово или другую понятную интерпретатору конструкцию (метод INCT_Interpreter.TransLine). Распознанные символы признаются обработанными и удаляются из кадра. Этот шаг будет повторяться, пока интерпретатор распознаёт смысловые конструкции (слова) в начале оставшегося кадра, т.е. возвращает в SprutCAM количество распознанных символов больше нуля, или кадр не закончится.

  • Как только интерпретатор не смог распознать смысловую конструкцию с начала оставшегося кадра, SprutCAM пытается определить регистр и его значение по описанному в этой статье алгоритму.

  • Если регистр был определён, он будет добавлен в конец списка объектов для интерпретации текущего кадра (INCT_BlockExecArray, с признаком регистр). В ином случае считанная и нераспознанная часть кадра будет пропущена, но она так же будет считаться обработанной и удалена из начала оставшегося кадра;


Примечание.

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


Примечание.

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


Интерпретация объектов списка для интерпретации состоит из следующих шагов:

  • Перед интерпретацией списка объектов вызывается метод INCT_Interpreter.BeforeInterprete, он информирует интерпретатор о начале процесса интерпретации текущего блока;

  • Для каждого элемента списка, если у него не установлен признак IsUsed и не установлен признак окончания трансляции (INCT_Interpreter.EndOfProgram), выполняется метод INCT_Interpreter.Interprete. Затем сынтерпретированному элементу списка устанавливается признак IsUsed;

  • После интерпретации всего списка объектов вызывается метод INCT_Interpreter.AfterInterprete, он информирует интерпретатор о завершении процесса интерпретации текущего блока;


Примечание.

При выполнении метода INCT_Interpreter.Interprete, по переданному объекту интерпретатор должен определить его тип и добавить в список команд CLDATA соответствующую команду.

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