def genTempTable(printer): baseTemp = MatProfile.getHotendBaseTemp() area04 = pow(0.4, 2)*math.pi/4 extrusionLow = MatProfile.getBaseExtrusionRate() * (NozzleProfile.getArea() / area04) f = MatProfile.getAutoTempFactor() mmpermm3 = 1 / MatProfile.getMatArea() spm = PrinterProfile.getStepsPerMM(A_AXIS) of = open("/tmp/temptable0.txt", "w") of.write("# xxx mat, nozzle, settings...\n") of.write("# basetemp: %d, autoTempFactor: %f\n" % (baseTemp, f)) of.write("# temp rate steprate timer\n") print "TempTable (basetemp: %d):" % baseTemp table = [] for i in range(NExtrusionLimit): t = baseTemp + i*2 dspeed = i*2 / f speed = extrusionLow + dspeed steprate = speed * mmpermm3 * spm tvs = 1.0/steprate timerValue = int(fTimer / steprate) print " Temp: %d, max extrusion: %.1f mm³/s, steps/s: %d, steprate: %d us, timervalue: %d" % (t, speed, int(steprate), int(tvs*1000000), timerValue) table.append(timerValue) of.write("%d %4.1f %d %d\n" % (t, speed, int(steprate), timerValue)) of.close() return (baseTemp, table)
def streamMoves(self, moves, finish = False): if debugMoves: print "Streaming %d moves..." % len(moves) if debugPlot and not self.plotfile: self.plottime = 0 self.plotfile=open("/tmp/accel_%d.plt" % moves[0].moveNumber, "w") self.plotfile.write("set grid\n") self.plotfile.write("set label 2 at graph 0.01, graph 0.95 'Note: Trapez top not included, e-only moves green.'\n") self.plotfile.write('plot "-" using 1:2:3 with linespoints lc variable\n') ################################################################################# # Backwards move planning self.joinMovesBwd(moves) ################################################################################# for move in moves: # move.pprint("sanicheck") move.sanityCheck(self.jerk) self.planAcceleration(move) self.planSteps(move) # # Collect some statistics # if move.isHeadMove(): self.pathData.maxExtrusionRate.stat(move) # # Collect moves if AutoTemp # if UseExtrusionAutoTemp: if move.isExtrudingMove(util.A_AXIS): # Collect moves and sum up path time self.pathData.time += move.getTime() # Sum extrusion volume self.pathData.extrusionAmount += move.getAdjustedExtrusionVolume(util.A_AXIS, NozzleProfile, MatProfile) self.pathData.atMoves.append(move) else: self.streamMove(move) move.streamed = True # Help garbage collection move.lastMove = errorMove move.nextMove = errorMove if UseExtrusionAutoTemp: if self.pathData.time >= ATInterval or finish: if self.pathData.time > 0: # Compute temperature for this segment and add tempcommand into the stream # Average speed: avgSpeed = self.pathData.extrusionAmount / self.pathData.time # UseAutoTemp: Adjust temp between Tbase and HotendMaxTemp, if speed is greater than 20 mm/s # UseExtrusionAutoTemp: Adjust temp between Tbase and HotendMaxTemp, if speed is greater than 5 mm³/s newTemp = MatProfile.getHotendBaseTemp() # Extruder 1 temp # extrusionLow = self.ExtrusionAmountLow * pow(NozzleProfile.getSize(), 2) if avgSpeed > self.ExtrusionAmountLow: f = MatProfile.getAutoTempFactor() # newTemp += min((avgSpeed - self.ExtrusionAmountLow * pow(NozzleProfile.getSize(), 2)) * f, ATMaxTempIncrease) newTemp += (avgSpeed - self.ExtrusionAmountLow) * f # newTemp *= 1.15 # xxx sync withtemp-speed-adjust newTemp = min(newTemp, MatProfile.getHotendMaxTemp()) if debugAutoTemp: print "AutoTemp: collected %d moves with %.2f s duration." % (len(self.pathData.atMoves), self.pathData.time) print "AutoTemp: amount: %.2f, avg extrusion rate: %.2f mm³/s." % (self.pathData.extrusionAmount, avgSpeed) print "AutoTemp: new temp: %.2f." % (newTemp) self.pathData.maxExtrusionRate.avgStat(avgSpeed) if newTemp != self.pathData.lastTemp and self.args.mode != "pre": # Schedule target temp command self.printer.sendCommandParamV( CmdSyncTargetTemp, [packedvalue.uint8_t(HeaterEx1), packedvalue.uint16_t(newTemp)]) self.pathData.lastTemp = newTemp for move in self.pathData.atMoves: self.streamMove(move) self.pathData.atMoves = [] self.pathData.time = self.pathData.extrusionAmount = 0 # Reset path time