Синтаксис данных в профиле

Для возможности учета индивидуальных особенностей, станка, или программы, выполняющей G-код, была реализована возможность влиять на формируемый G-код.
Данные из которых генерируется G-код, представляют собой список отрезков, в каждом отрезке храниться список точек.
Количество создаваемых профилей не ограничено, все профили представляют собой текстовые файлы, хранящиеся в каталоге “profiles” в том каталоге, где расположена сама программа.

Текст профиля имеет следующую структуру:

 "начальный текст"

LINES
{

 "текст до начала отрезка"

 POINTS
 {
   "текст в конкретной точке отрезка"
 }

 "текcт после окончания отрезка"
 
}

"конечный текст"

Для траектории прямоугольника (1 отрезок с 5-ю точками), мы получаем вот такой результат:

 начальный текст
 текст до начала отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текcт после окончания отрезка
 конечный текст

В тексте профиля есть операторы “LINES”, POINT” которые означают, что весь текст обрамленный фигурными скобками { и } будет выполнен столько раз, сколько есть отрезков.

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

Доступные переменные в начале и конце текста:
minX,minY,maxX,maxY – содержат минимальные и максимальные значения всей траектории.

Следующее содержимое:

"начальный текст"
"minX= " [minX] " maxX= " [maxX]

LINES
{

 "текст до начала отрезка"

 POINTS
 {
   "текст в конкретной точке отрезка"
 }

 "текcт после окончания отрезка"
 
}

"конечный текст"

Даст следующий результат:

 начальный текст
 minX= 8.417969   maxX= 16.97266
 текст до начала отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текст в конкретной точке отрезка
 текcт после окончания отрезка
 конечный текст

Доступные параметры в начале и конце отрезка:

minX,minY,maxX,maxY – содержат минимальные и максимальные значения всей траектории.
X,Y – содержат координаты первой/последней точки, того отрезка, по которому будет выполняться цикл по точкам.
Имея следующее содержание:

"начальный текст"
"minX= " [minX] " maxX= " [maxX]
LINES
{
 "X" [X] "Y"[Y]
 POINTS
 {
    "X" [X] "Y"[Y]
 }
  "X" [X] "Y"[Y] 
}
"конечный текст"

Получаем:

 начальный текст
 minX= 8.417969   maxX= 16.97266
 X16.97266  Y18.20312
 X16.97266  Y18.20312
 X8.417969  Y18.20312
 X8.417969  Y22.34375
 X16.97266  Y22.34375
 X16.97266  Y18.20312
 X16.97266  Y18.20312
 конечный текст

Можем заметить что первые 2 координаты, и последние 2 координаты, одинаковые, это связано с тем что в профиле мы выводим значения точек не только в цикле по точкам, но и до цикла, и после цикла.
Данная особенность реализована, для возможности генерации G-кода, когда нужно выполнить движение в холостом режиме, до первой точки отрезка.
Но часто оказавшись в этой точке, ещё до цикла по точкам, уже нет необходимости выводить первую точку в самом цикле, и для этого есть следующая команда: [SKIP_FIRST_POINT] – которая означает пропустить в цикле первую точку. Данный параметр работает только в пределах цикла по точкам!

После изменения текста в профиле, к такому виду:

"X0 Y0 Z10"
LINES
{
 "X" [X] "Y"[Y] "Z10"
 "Z0"
 POINTS
 {
   [SKIP_FIRST_POINT]
    "X" [X] "Y"[Y]
 }
  "X" [X] "Y"[Y] "Z10" 
}
"X0 Y0 Z10"

Мы получим такой результат:

 X0 Y0 Z10
 X16.97266  Y18.20312  Z10
 Z0
 X8.417969  Y18.20312
 X8.417969  Y22.34375
 X16.97266  Y22.34375
 X16.97266  Y18.20312
 X16.97266  Y18.20312  Z10
 X0 Y0 Z10

Где в начале перед циклом по отрезкам, выполниться если необходимо движение в точку (0,0,10) …. п.с. подразумевается что в скобках (X,Y,Z) значения.
После, в цикле по отрезкам (для примера всего один отрезок) выполниться движение в первую точку отрезка, по координатам X и Y, на высоте Z равной 10, после достижения необходимой точки, будет выполнено движение по оси Z в ноль, далее попадаем в цикл по точкам, но мы находимся уже в начальной точке, поэтому нет смысла повторно в текст G-кода, писать координаты первой точки, для этого команда “[SKIP_FIRST_POINT]” пропустит первую точку.
Далее в цикле по точкам выводим координаты по которым необходимо двигаться.
После цикла по точкам у меня в примере еть такой текст: “X” [X] “Y”[Y] “Z10” который выполняет движение вверх по оси Z, в данном случае текст можно упростить до: “Z10”, т.к. координаты XY, не менялись.
После окончания цикла по отрезкам, команда “X0 Y0 Z10” выполняет движение в начальную точку.

Так-же в тексте профиля в первой строке указывается наименование профиля выбираемого на 10-й странице, в выпадающем списке. Используется весь текст в пределах символов #, в том числе и пробелы, в начале или конце строки.2016-11-27_233012

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

# проверка математики 3#
$.$
"X0 Y0 Z10"
LINES
{
 "X" [X] "Y"[Y] "Z10"
 "Z0"
 POINTS
 {
 [SKIP_FIRST_POINT]
    "X" [X] "Y"[Y]
 }
  "Z10" 
}
"X0 Y0 Z10"

А вот пример если нужен разделитель запятая, а не точка

# проверка математики 3#
$,$
"X0 Y0 Z10"
LINES
{
 "X" [X] "Y"[Y] "Z10"
 "Z0"
 POINTS
 {
 [SKIP_FIRST_POINT]
    "X" [X] "Y"[Y]
 }
  "Z10" 
}
"X0 Y0 Z10"

И сам результат:

 X0 Y0 Z10
 X16,97266  Y18,20312  Z10
 Z0
 X8,417969  Y18,20312
 X8,417969  Y22,34375
 X16,97266  Y22,34375
 X16,97266  Y18,20312
 Z10
 X0 Y0 Z10

А теперь опишу о дополнительных фишках, в приводимых примерах, значения чисел, после запятой, получаются ну очень длинные…… Но их можно форматировать, и делается это следующим образом, в квадратных скобках в примерах я делал так: [X], но можно сделать так: [X’#0.##’]
В итоге получаем вот такой результат:

 X0 Y0 Z10
 X16.97  Y18.2  Z10
 Z0
 X8.42  Y18.2
 X8.42  Y22.34
 X16.97  Y22.34
 X16.97  Y18.2
 Z10
 X0 Y0 Z10

Шаблон форматирования, обрамляется одинарными кавычками, шаблон может состоять из символов # 0 и точка.

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

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

Символ точка – Определяет расположение разделителя целой и дробной частей в результирующей строке.

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

В результате вот такого текста в профиле:

# проверка математики 3#
$.$
"X0 Y0 Z10"
LINES
{
 "X" [X] "Y"[Y] "Z10"
 "Z0"
 POINTS
 {
 [SKIP_FIRST_POINT]
    "X" [X*2'#0.##'] "Y"[Y/2'#0.##']
 }
  "Z10" 
}
"X0 Y0 Z10"

Получаем результат:
 X0 Y0 Z10
 X16.97266  Y18.20312  Z10
 Z0
 X16.84  Y9.1
 X16.84  Y11.17
 X33.95  Y11.17
 X33.95  Y9.1
 Z10
 X0 Y0 Z10

В выражениях в квадратных скобках, можно использовать математические операции из нескольких переменных, например так: [X – minX].

При использовании лазерного выжигания, в профиле можно ещё дополнительно использовать, переменную “P”, в пределах цикла по точкам. И дополнительно к LINES и POINT, можно добавить TOLEFT,TORIGHT,FROMLEFT,FROMRIGHT.
Вот текст профиля:

# Настройка для лазерного выжигателя P - вариант #
$.$
//команды до цикла по отрезкам
LINES
{
   TOLEFT
   {
      // команды выполняемые при начале движения влево
   }
   TORIGHT
   {
      // команды выполняемые при начале движения в право
   }   
   //команды выполняемые перед циклом по точкам
   POINTS
   {
      // команды выполняемые в цикле по точкам
      "X"[X] "Y"[Y] "P"[P]
   }	
   FROMLEFT
   {
      // команды выполняемые после движения влево
   }
   FROMRIGHT
   {
      // команды выполняемые после движения в право
   }
 // тут команды, выполняемые после движения	
}
// команды после цикла по отрезкам

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

Один комментарий

  • Евгений

    Подскажите, как задать пределы мощностей? и у меня невыводится график настройки профиля Bright и я не понял какая цифра за что отвечает. для примера мне надо задать белый 40 , самый черный 200. и что бы вычисления шли в этих пределах и не выходили за них.спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Protected with IP Blacklist CloudIP Blacklist Cloud