Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }