Преобразование файлов g-кода в легко читаемый файл X,Y,Z для lego mindstorms ev3

Я пытаюсь найти способ конвертировать любой файл g-кода в файл значений только для строки, используя Python!

Я новичок, использующий любой тип языка программирования!


ВВЕДЕНИЕ

Я собрал свой собственный 3d-принтер с набором lego mindstorms ev3, но его язык программирования имеет очень плохие параметры обработки файлов:

  • Он читает всю строку целиком, поэтому файл должен иметь только числовое значение за строкой.
  • У него нет опций манипулирования файлами, таких как разделение или замена.
  • Нет нескольких строк одновременно, только одна строка за раз.

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


ФАЙЛ

Как мне нужен новый файл, чтобы выглядеть?

  • Он должен иметь только значения X,Y и Z без букв в начале каждого значения. Все остальные цифры, текст и информация должны быть удалены.
  • Это должно быть написано в определенном порядке. Как только значение X было красным, оно должно записать его в новый файл в новой строке. Затем перейдите к чтению и записи следующего значения Y в следующей строке, прочитайте следующий Z и запишите его в другой строке, прочитайте следующее значение X... и так далее.
  • Если значение не появляется в первый раз, оно должно написать "0".
  • Если значение не отображается, следует записать предыдущее значение X,Y или Z, пока не появится новое.

Пример файла g-кода: https://hastebin.com/raw/tocamabevo


КОД

with open('original.gcode', 'r') as original:
    with open('ev3.rtf', 'w') as ev3:
        for line in original:
            if 'X' in line or 'Y' in line or 'Z' in line:
                line = line.replace('G1 ', '')
#                if ';' in line:
#                    line = line.replace(';'[0:], '') (Replace from ';' to end of line)
                ev3.write(line)

Я уже начал кодировать эту программу, используя Python, и мне удалось открыть файл для чтения построчно, проверяя любые X,Y,Z, а затем заменяя некоторый текст и записывая эти строки некоторым замененным текстом в новом файле.


ДЕЛА, КОТОРЫЕ НЕОБХОДИМО СДЕЛАТЬ

Но есть некоторые комментарии, которые начинаются с ';' и другие значения в той же строке значений X,Y и Z, которые я не знаю, как не скопировать в новый файл.

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

Я здесь новенький. Если это не то место, где просить об этом, где мне это делать?


Спасибо! Я надеюсь, что кто-то может мне помочь:)



РЕДАКТИРОВАТЬ



Я немного кодировал, и мне удалось записать в новый файл только значения после символов X,Y или Z, а затем пробел, поэтому новый файл выглядит намного лучше!

Я определяю, стоит ли писать X,Y или Z, и это хорошо работает. Проблема возникает, когда значение не установлено и должно быть установлено на "0". Есть 3 основных условия, чтобы проверить X,Y или Z поворот. Каждый из них имеет еще 2 условия, чтобы проверить, совпадает ли 'match.group(1)', то есть X,Y или Z перед значениями, с 'x_y_z', ходом.

Если это условие выполняется, оно записывает это значение в файл. Если он не выполняется (иначе), он должен записать '0' в X,Y или Z, в зависимости от переменной 'x_y_z', и проблема возникает сейчас:

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

import re
pattern = re.compile(r'([X])(\d+\.?[\d+]?)')
# I need to display the full decimals after the '.' and it only shows the firs one.

last_x = 0
last_y = 0
last_z = 0

x_y_z = 'X'

with open('original.gcode', 'r') as original:
    with open('ev3.rtf', 'w') as ev3:
        continguts = original.read()
        coincidencies = pattern.finditer(continguts)
        for match in coincidencies:
            if x_y_z == 'X':
                if match.group(1) == x_y_z:
                    ev3.write(x_y_z + ': ' + match.group(1) + match.group(2) + '\n')
                    last_x = match.group(2)
                else:
                    ev3.write('Invented value ' + x_y_z + ': ' + match.group(1) + str(last_x) + '\n')
                    # GO TO NEXT IF to check if 'match.group(1)' equals to 'Y'
                x_y_z = 'Y'

            if x_y_z == 'Y':
                if match.group(1) == x_y_z:
                    ev3.write(x_y_z + ': ' + match.group(1) + match.group(2) + '\n')
                    last_y = match.group(2)
                else:
                    ev3.write('Invented value ' + x_y_z + ': ' + match.group(1) + str(last_y) + '\n')
                    # GO TO NEXT IF to check if 'match.group(1)' equals to 'Z'
                x_y_z = 'Z'

            if x_y_z == 'Z':
                if match.group(1) == x_y_z:
                    ev3.write(x_y_z + ': ' + match.group(1) + match.group(2) + '\n')
                    last_z = match.group(2)
                else:
                    ev3.write('Invented value ' + x_y_z + ': ' + match.group(1) + str(last_z) + '\n')
                x_y_z = 'X'

0 ответов

Другие вопросы по тегам