Python 3D-принтер пост-процессор gcode ведет себя странно
Я написал небольшой почтовый процессор Gcode на Python, чтобы сделать некоторые дополнения к 3D-печати. Первоначальная проблема заключалась в том, что мне нужно было, чтобы мой 3D-принтер генерировал блок очистки каждый раз, когда он менял свою головку инструмента. Если не было смены инструмента, в этом слое все еще нужно было создать блок очистки, и конец слоя с любым инструментом был активен в конце слоя (поэтому башня продолжала набирать высоту без пропущенных слоев).
Извиняюсь, если это трудно изобразить, я добавил несколько картинок, чтобы оставить меньше для воображения:
Перед запуском процессора: https://i.imgur.com/nr1daQp.png
После запуска процессора: https://i.imgur.com/uGxWogc.png
Проблемная область https://i.imgur.com/eRaxopd.png
Проблема в том, что, когда он печатает только один цвет, он, кажется, строит только одну башню. Это можно увидеть по отсутствующему слою, а затем одна башня короче другой, так как последние 50 слоев или около того синие. Может кто-нибудь пролить свет на то, почему это происходит?
Обновление: я заметил, что в коде говорилось, что он уложил левый и правый слой башни, несмотря на то, что в модифицированном Gcode не было левого и правого. Это означало, что он должен поставить правую башню с помощью функции правописателя, а затем переписать ее с помощью функции левого писателя. Я не понимаю, почему это происходит, я вызвал функцию nextzvalue между вызовами функций записи, чтобы избежать этого. Мой обходной путь состоял в том, чтобы он напечатал немного кода, содержащего обе башни Gcode, с отдельной функцией, но я хотел бы знать, почему это происходит.
Код:
def main():
file = open("example.gcode","r")
lines = file.readlines()
file.close
oldzline = 320
tower1count = 0
tower2count = 0
layercount = 0
linecounter = 0
numberoflayers = layercounter(lines)
toollist=[]
while layercount < numberoflayers:
tower1count=0
tower2count=0
nextzline = nextzvalue(lines,oldzline)
print("layer count: ",layercount)
for line in lines:
linecounter +=1
if linecounter > oldzline and linecounter < nextzline:
if line.find("TOOL CHANGE") != -1:
if lines[linecounter+3].find("LAYER CHANGE") == -1:
if tower1count==0:
tower1count+=1
print("tower1 count 1: ",tower1count)
rightwriter(linecounter,lines)
elif tower1count==1:
tower2count+=1
print("tower2 count 1: ",tower2count)
if tower2count!= 2:
leftwriter(linecounter,lines)
if tower1count == 0 and tower2count == 0:
nextzline = nextzvalue(lines,oldzline)
tower2count+=1
tower1count+=1
print("tower1 count 2: ",tower1count)
print("tower2 count 2: ",tower2count)
rightwriter(nextzline-4,lines) <<<<<<right writer code being overwritten.
nextzline = nextzvalue(lines,oldzline)<<<<< I believe this bit is not working correctly.
leftwriter(nextzline-4,lines) <<<< causing this to overwrite the code added by the rightwriter function.
elif tower1count == 0:
nextzline = nextzvalue(lines,oldzline)
tower1count+=1
print("tower1 count 3: ",tower1count)
rightwriter(nextzline-4,lines)
elif tower2count == 0:
nextzline = nextzvalue(lines,oldzline)
tower2count+=1
print("tower2 count 3: ",tower2count)
leftwriter(nextzline-4,lines)
print("tower 1: ",tower1count)
print("tower 2: ",tower2count)
#if layercount == 121:
#print("sleepy time")
#time.sleep(100)
oldzline = nextzline
linecounter = 0
layercount+=1
def nextzvalue(lines,oldzvalue): # finds the nex Z value i.e. the end of the current layer/beggining of next.
linecount = 0
for line in lines:
linecount+=1
if linecount > oldzvalue:
if line.find("G1") != -1:
if line.find("Z") !=-1:
return(linecount)
def layercounter(lines): #counts the number of layers and returns them as a number
linecount=0
layercount=0
for line in lines:
linecount+=1
if line.find("G1") !=-1and line.find("Z") != -1:
layercount+=1
return(layercount)
def leftwriter(linecount,lines):
linecount = linecount+1
#print("making a T1 layer")
lines[linecount] = "some gcode to draw a layer of left tower here"
with open('Example.gcode','w') as file:
file.writelines(lines)
def rightwriter(linecount,lines):
linecount = linecount+1
#print("making a T2 layer")
lines[linecount] ="some gcode to draw a layer of right tower here"
with open('Example.gcode','w') as file:
file.writelines(lines)
Извиняюсь за длину этого поста.