public KinematicPolar(ToolHead toolhead, ConfigWrapper config) { // Setup axis steppers var stepper_bed = new PrinterStepper(config.getsection("stepper_bed")); var rail_arm = new PrinterRail(config.getsection("stepper_arm")); var rail_z = PrinterRail.LookupMultiRail(config.getsection("stepper_z")); stepper_bed.setup_itersolve(KinematicType.polar, new object[] { "a" }); rail_arm.setup_itersolve(KinematicType.polar, "r"); rail_z.setup_itersolve(KinematicType.cartesian, "z"); this.rails = new PrinterRail[] { rail_arm, rail_z }; this.steppers.Add(stepper_bed); this.steppers.AddRange(rail_arm.get_steppers()); this.steppers.AddRange(rail_z.get_steppers()); // Setup boundary checks var _tup_1 = toolhead.get_max_velocity(); var max_velocity = _tup_1.Item1; var max_accel = _tup_1.Item2; this.max_z_velocity = config.getfloat("max_z_velocity", max_velocity, above: 0.0, maxval: max_velocity); this.max_z_accel = config.getfloat("max_z_accel", max_accel, above: 0.0, maxval: max_accel); this.need_motor_enable = true; this.limit_z = new Vector2d(1, -1); this.limit_xy2 = -1.0; // Setup stepper max halt velocity var max_halt_velocity = toolhead.get_max_axis_halt(); stepper_bed.set_max_jerk(max_halt_velocity, max_accel); rail_arm.set_max_jerk(max_halt_velocity, max_accel); rail_z.set_max_jerk(max_halt_velocity, max_accel); }
public Extruder(ConfigWrapper config, object extruder_num) { this.printer = config.get_printer(); this.name = config.get_name(); var shared_heater = config.get("shared_heater", null); var pheater = this.printer.lookup_object <PrinterHeaters>("heater"); var gcode_id = $"T{extruder_num}"; if (shared_heater == null) { this.heater = pheater.setup_heater(config, gcode_id); } else { this.heater = pheater.lookup_heater(shared_heater); } this.stepper = new PrinterStepper(config); this.nozzle_diameter = config.getfloat("nozzle_diameter", above: 0.0); var filament_diameter = config.getfloat("filament_diameter", minval: this.nozzle_diameter); this.filament_area = Math.PI * Math.Pow(filament_diameter * 0.5, 2); var def_max_cross_section = 4.0 * Math.Pow(this.nozzle_diameter, 2); var def_max_extrude_ratio = def_max_cross_section / this.filament_area; var max_cross_section = config.getfloat("max_extrude_cross_section", def_max_cross_section, above: 0.0); this.max_extrude_ratio = max_cross_section / this.filament_area; logging.Info("Extruder max_extrude_ratio={0:0.0000}", this.max_extrude_ratio); var toolhead = this.printer.lookup_object <ToolHead>("toolhead"); var _tup_1 = toolhead.get_max_velocity(); var max_velocity = _tup_1.Item1; var max_accel = _tup_1.Item2; this.max_e_velocity = config.getfloat("max_extrude_only_velocity", max_velocity * def_max_extrude_ratio, above: 0.0); this.max_e_accel = config.getfloat("max_extrude_only_accel", max_accel * def_max_extrude_ratio, above: 0.0); this.stepper.set_max_jerk(9999999.9, 9999999.9); this.max_e_dist = config.getfloat("max_extrude_only_distance", 50.0, minval: 0.0); this.activate_gcode = config.get("activate_gcode", ""); this.deactivate_gcode = config.get("deactivate_gcode", ""); this.pressure_advance = config.getfloat("pressure_advance", 0.0, minval: 0.0); this.pressure_advance_lookahead_time = config.getfloat("pressure_advance_lookahead_time", 0.01, minval: 0.0); this.need_motor_enable = true; this.extrude_pos = 0.0; // Setup iterative solver this.cmove = new move(); this.stepper.setup_itersolve(KinematicType.extruder, null); // Setup SET_PRESSURE_ADVANCE command var gcode = this.printer.lookup_object <GCodeParser>("gcode"); if (new[] { "extruder", "extruder0" }.Contains(this.name)) { gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", null, this.cmd_default_SET_PRESSURE_ADVANCE, desc: cmd_SET_PRESSURE_ADVANCE_help); } gcode.register_mux_command("SET_PRESSURE_ADVANCE", "EXTRUDER", this.name, this.cmd_SET_PRESSURE_ADVANCE, desc: cmd_SET_PRESSURE_ADVANCE_help); }
public KinematicWinch(ToolHead toolhead, ConfigWrapper config) { // Setup steppers at each anchor this.steppers = new List <PrinterStepper>(); this.anchors = new List <Vector3d>(); for (int i = 0; i < 26; i++) { var name = "stepper_" + (char)('a' + i); if (i >= 3 && !config.has_section(name)) { break; } var stepper_config = config.getsection(name); var s = new PrinterStepper(stepper_config); this.steppers.Add(s); var anchor = new Vector3d( stepper_config.getfloat("anchor_x"), stepper_config.getfloat("anchor_y"), stepper_config.getfloat("anchor_z")); this.anchors.Add(anchor); s.setup_itersolve(KinematicType.winch, new object[] { anchor.X, anchor.Y, anchor.Z }); } // Setup stepper max halt velocity var _tup_1 = toolhead.get_max_velocity(); var max_velocity = _tup_1.Item1; var max_accel = _tup_1.Item2; var max_halt_velocity = toolhead.get_max_axis_halt(); foreach (var s in this.steppers) { s.set_max_jerk(max_halt_velocity, max_accel); } // Setup boundary checks this.need_motor_enable = true; this.set_position(Vector3d.Zero, null); }