MKFirmware / MK4duo

MK4duo Firmware Printers 3D for Arduino and Arduino due
http://www.marlinkimbra.it
GNU General Public License v3.0
206 stars 117 forks source link

Print in the wrong place on print bed #667

Closed Buddycarpenter closed 5 years ago

Buddycarpenter commented 5 years ago

I'm having the same issue with V4.3.7 and V4.3.8. Both versions of firmware are not printing in the right location on the print bed. V4.3.6 works great. My printer is a custom printer using arduino due and a modified ramps board. After installing the new version of Nextion firmware and MK4Duo V4.3.8, the printer homes correctly and performs bed leveling correctly. After the final bed leveling position, the X axis continues to its max position. I can reset the arduino Due and start the print job again, then the print starts near center of the bed, even though I have chose the front left corner to start the job in my slicer (Simplify3D).

I used the online configurator to generate the firmware. I imported the configuration_overall from the working firmware V4.3.6.

Configuration_overall file from V4.3.8 is listed below

/**

/**

/***

define CONFIGURATION_OVERALL

/***

/*****

/***

/*****

/****

/* Below you will find the configuration string, that created with Configurator tool online marlinkimbra.it ========== Start configuration string ========== { "printer": "custom", "processor": 1, "serial": 0, "baudrates": 250000, "serial2": -2, "baudrates2": 250000, "customname": "William Carpenter", "customconfig": "V01", "machineuuid": "abc4ee28-d769-26f2-4af7-856029517705", "killMethod": 0, "notimeouts": 1000, "advancedok": "0", "emergencyparser": "0", "fastergcodeparser": "0", "fastergcodeexecute": "0", "motherboards": "BOARD_RAMPS_SMART_HFB", "mechanism": 0, "power": 0, "defaultpower": "0", "delayafterpower": 5, "powertimeout": 30, "extruders": 2, "driverextruders": 2, "tempunitsupport": "0", "bed": "1", "chamber": "0", "cooler": "0", "dhtsupport": "0", "tempsensor0": "1", "tempsensor1": "0", "tempsensor2": "0", "tempsensor3": "0", "tempsensorbed": "1", "tempsensorchamber": "0", "tempsensorcooler": "0", "seriesrs": 4700, "t9name": "User sensor", "t9r25": 100000, "t9betak": 4036, "ad595offset": 0, "ad595gain": 1, "dummy998": 25, "dummy999": 25, "maxtemp0": 275, "maxtemp1": 275, "maxtemp2": 275, "maxtemp3": 275, "maxtempbed": 150, "maxtempchamber": 150, "maxtempcooler": 150, "mintemp0": 5, "mintemp1": 5, "mintemp2": 5, "mintemp3": 5, "mintempbed": 5, "mintempchamber": 5, "mintempcooler": 5, "preheat1label": "PLA", "preheat1hotendtemp": 190, "preheat1bedtemp": 60, "preheat1fanspeed": 255, "preheat2label": "ABS", "preheat2hotendtemp": 240, "preheat2bedtemp": 100, "preheat2fanspeed": 255, "preheat3label": "GUM", "preheat3hotendtemp": 230, "preheat3bedtemp": 60, "preheat3fanspeed": 255, "autotemp": "1", "autotempoldweight": 0.98, "pidtemp": "1", "pidmax": 255, "piddrivemin": 40, "piddrivemax": 230, "pidfunctionalrange": 10, "pidautotunemenu": "1", "pidextrusionrate": "0", "lpqmaxlen": 50, "pidkp0": 40, "pidki0": 7, "pidkd0": 60, "pidkc0": 100, "pidkp1": 40, "pidki1": 7, "pidkd1": 60, "pidkc1": 100, "pidkp2": 40, "pidki2": 7, "pidkd2": 60, "pidkc2": 100, "pidkp3": 40, "pidki3": 7, "pidkd3": 60, "pidkc3": 100, "pidbedtemp": "1", "maxbedpower": 255, "pidbedkp": 10, "pidbedki": 1, "pidbedkd": 305, "pidchambertemp": "0", "maxchamberpower": 255, "pidchamberkp": 10, "pidchamberki": 1, "pidchamberkd": 305, "pidcoolertemp": "0", "maxcoolerpower": 255, "pidcoolerkp": 10, "pidcoolerki": 1, "pidcoolerkd": 305, "invertedheaterpins": "0", "invertedbedpin": "0", "invertedchamberpin": "0", "invertedcoolerpin": "0", "thermalprotectionhotend": "0", "thermalprotectionbed": "0", "thermalprotectionchamber": "0", "thermalprotectioncooler": "0", "thermalprotectionperiod": 40, "thermalprotectionhysteresis": 4, "watchtempperiod": 20, "watchtempincrease": 2, "watchbedtempperiod": 60, "watchbedtempincrease": 2, "watchchambertempperiod": 60, "watchchambertempincrease": 2, "watchcoolertempperiod": 60, "watchcoolertempincrease": 2, "adaptivefanspeed": "0", "uiprintername": "Excell", "endstopinterrupt": "0", "Xminendstop": "2", "Xmaxendstop": "0", "Yminendstop": "2", "Ymaxendstop": "0", "Zminendstop": "0", "Zmaxendstop": "2", "X2minendstop": "0", "X2maxendstop": "0", "Y2minendstop": "0", "Y2maxendstop": "0", "Z2minendstop": "0", "Z2maxendstop": "0", "Z3minendstop": "0", "Z3maxendstop": "0", "Zprobeendstop": "0", "Xhoming": 0, "Yhoming": 0, "Zhoming": 0, "Ehoming": 0, "Xinvertenable": 0, "Yinvertenable": 0, "Zinvertenable": 0, "Einvertenable": 0, "Xinvertstep": "0", "Yinvertstep": "0", "Zinvertstep": "0", "Einvertstep": "0", "Xinvertdir": "1", "Yinvertdir": "0", "Zinvertdir": "1", "E0invertdir": "0", "E1invertdir": "0", "E2invertdir": "0", "E3invertdir": "0", "E4invertdir": "0", "E5invertdir": "0", "disableX": "1", "disableY": "1", "disableZ": "1", "disableE": "1", "Xmaxpos": 463, "Xminpos": 0, "Ymaxpos": 315, "Yminpos": 0, "Zmaxpos": 271, "Zminpos": 0, "Zsafehoming": "0", "ZsafehomingX": 100, "ZsafehomingY": 100, "Zminheightbeforehoming": 0, "Zprobetype": "4", "Zprobesledoffset": 5, "Xprobeoffset": 0, "Yprobeoffset": 0, "Zprobeoffset": -1, "xyprobespeed": 8000, "zprobespeedfast": 200, "zprobespeedslow": 100, "zprobingrepeat": "0", "Zproberepetitions": 1, "Zraiseprobedeploystow": 15, "Zraisebetweenprobe": 10, "Zraiseafterprobe": 0, "Zprobelowpoint": -2, "lcdbedlevel": "0", "lcdzstep": 0.025, "lcdprobezrange": 4, "levelingfadeheight": "0", "bedlevel": 4, "meshinset": 10, "meshg28rest": "0", "maxgridpointX": 3, "maxgridpointY": 3, "leftprobe": 20, "rightprobe": 435, "backprobe": 288, "frontprobe": 20, "Xprobe1": 15, "Yprobe1": 180, "Xprobe2": 15, "Yprobe2": 15, "Xprobe3": 180, "Yprobe3": 15, "manualhomepos": "0", "bedcenter00": "0", "Xhomepos": 0, "Yhomepos": 0, "Zhomepos": 0, "Xstepspermm": 160, "Ystepspermm": 160, "Zstepspermm": 320, "E0stepspermm": 625, "E1stepspermm": 625, "E2stepspermm": 625, "E3stepspermm": 625, "E4stepspermm": 625, "E5stepspermm": 625, "Xmaxspeed": 150, "Ymaxspeed": 300, "Zmaxspeed": 20, "E0maxspeed": 100, "E1maxspeed": 100, "E2maxspeed": 100, "E3maxspeed": 100, "E4maxspeed": 100, "E5maxspeed": 100, "Xmanualspeed": 100, "Ymanualspeed": 100, "Zmanualspeed": 20, "Emanualspeed": 10, "minimumspeed": 0, "minimumtravelspeed": 0, "minimumplannerspeed": 0.05, "Xmaxacceleration": 1500, "Ymaxacceleration": 3000, "Zmaxacceleration": 50, "E0maxacceleration": 3000, "E1maxacceleration": 3000, "E2maxacceleration": 3000, "E3maxacceleration": 3000, "E4maxacceleration": 3000, "E5maxacceleration": 3000, "E0retractacceleration": 10000, "E1retractacceleration": 10000, "E2retractacceleration": 10000, "E3retractacceleration": 10000, "E4retractacceleration": 10000, "E5retractacceleration": 10000, "defaultacceleration": 1500, "defaulttravelacceleration": 1500, "maxXjerk": 10, "maxYjerk": 10, "maxZjerk": 0.4, "maxE0jerk": 5, "maxE1jerk": 5, "maxE2jerk": 5, "maxE3jerk": 5, "maxE4jerk": 5, "maxE5jerk": 5, "Xhomingspeed": 50, "Yhomingspeed": 50, "Zhomingspeed": 20, "XbumpMM": 5, "YbumpMM": 5, "ZbumpMM": 2, "Xbumpdivisor": 5, "Ybumpdivisor": 5, "Zbumpdivisor": 2, "hotendoffsetXE1": 0, "hotendoffsetXE2": 0, "hotendoffsetXE3": 0, "hotendoffsetYE1": 0, "hotendoffsetYE2": 0, "hotendoffsetYE3": 0, "hotendoffsetZE1": 0, "hotendoffsetZE2": 0, "hotendoffsetZE3": 0, "hysteresis": "0", "hysteresisXmm": 0, "hysteresisYmm": 0, "hysteresisZmm": 0, "hysteresiscorrection": 1, "deltasegmentpersecond": 200, "deltasegmentperline": 20, "deltadiagonalrod": 220, "deltasmoothrodoffset": 145, "deltaeffectoroffset": 20, "deltacarriageoffset": 20, "deltaprinterradius": 70, "deltaheight": 210, "towerAendstop": 0, "towerBendstop": 0, "towerCendstop": 0, "towerAangle": 0, "towerBangle": 0, "towerCangle": 0, "towerAradius": 0, "towerBradius": 0, "towerCradius": 0, "towerAdiagonalrod": 0, "towerBdiagonalrod": 0, "towerCdiagonalrod": 0, "deltaautoprecision": 0.1, "deltaautogrid": 7, "deltaXdeploystart": 0, "deltaYdeploystart": 0, "deltaZdeploystart": 30, "deltaXdeployend": 0, "deltaYdeployend": 0, "deltaZdeployend": 30, "deltaXretractstart": 0, "deltaYretractstart": 0, "deltaZretractstart": 30, "deltaXretractend": 0, "deltaYretractend": 0, "deltaZretractend": 0, "deltaautocalibration": 0, "deltahomesafezone": "1", "deltahomeonpower": "0", "disableddoublequadstepping": "1", "junctiondeviation": "0", "junctiondeviationfactor": 0.02, "bezierjerk": "1", "stepperpulse": 10, "stepperrate": 150000, "directiondelay": 5000, "stepsmoothing": "0", "Xtwostepper": "0", "X2vsXdir": "0", "Xtwoendstop": "0", "Ytwostepper": "0", "Y2vsYdir": "0", "Ytwoendstop": "0", "Ztwostepper": "0", "Z2vsZdir": "0", "Ztwoendstop": "0", "Zthreestepper": "0", "Z3vsZdir": "0", "Zthreeendstop": "0", "extencoder": "0", "extencodererrorstep": 500, "extencoderminstep": 10, "Xmicrostep": 16, "Ymicrostep": 16, "Zmicrostep": 16, "E0microstep": 16, "E1microstep": 16, "E2microstep": 16, "E3microstep": 16, "E4microstep": 16, "E5microstep": 16, "Xcurrent": 800, "Ycurrent": 800, "Zcurrent": 800, "E0current": 800, "E1current": 800, "E2current": 800, "E3current": 800, "E4current": 800, "E5current": 800, "Xdrivertype": "TB6600", "Ydrivertype": "TB6600", "Zdrivertype": "TB6600", "X2drivertype": "A4988", "Y2drivertype": "A4988", "Z2drivertype": "A4988", "Z3drivertype": "A4988", "E0drivertype": "TB6600", "E1drivertype": "TB6600", "E2drivertype": "A4988", "E3drivertype": "A4988", "E4drivertype": "A4988", "E5drivertype": "A4988", "softpwmspeed": 0, "fanminpwm": 0, "fanmaxpwm": 255, "fanpwmfreq": 250, "fankickstarttime": 0, "autofan0": -1, "autofan1": 0, "autofan2": -1, "autofan3": -1, "autofan4": -1, "autofan5": -1, "Ecoolertemp": 50, "Ecoolerspeed": 255, "Ecoolerminspeed": 0, "controllerfansec": 60, "controllerfanspeed": 255, "controllerfanminspeed": 0, "defaultfilamentdia": 1.75, "dangerousextrude": "1", "extrudemintemp": 170, "lengthextrude": "1", "extrudemaxlenght": 400, "singlenozzle": "1", "baricuda": "0", "colormixingextruder": "0", "mixingsteppers": "2", "virtualtools": 16, "mkr4": "0", "invertrelepin": "0", "E0E1pin": -1, "E0E2pin": -1, "E1E3pin": -1, "mkr6": "0", "mkr12": "0", "EX1pin": -1, "EX2pin": -1, "dondolo": "0", "dondolodualmotor": "0", "dondoloservo": 0, "dondoloservoe0": 120, "dondoloservoe1": 10, "dondolodelay": 1000, "workspace": "0", "softwareminendstop": "1", "softwaremaxendstop": "1", "endstoponlyforhome": "1", "abortendstophit": "0", "abortendstophitinit": "1", "servos": "0", "numservos": 0, "Zservo": -1, "angleextendservosZ": 0, "angleretractservosZ": 0, "servodeactivate": "0", "servodeactivatedelay": 300, "quickhome": "0", "homeYbeforeX": "0", "homeXYbeforeZ": "0", "babystepping": "0", "babysteppingXY": "0", "babysteppingZprobe": "0", "babysteppingdoubleclick": "0", "filamentsensor": "0", "filamentsensorextruder": 0, "filamentsensormaxdia": 2, "filamentsensormindia": 1.35, "filamentsensordia": 1.75, "filamentsensorlcd": "0", "filamentrunout": "0", "filamentrunoutdav": "0", "filamentrunoutpininverting": "0", "filamentrunoutpullup": "1", "filamentrunoutscript": "M600", "powerconsumption": "0", "dooropen": "0", "doorendstop": "0", "powercheck": "0", "powercheckendstop": "0", "caselight": "0", "caselightinvert": "0", "caselightdefault": "0", "caselightbrightness": 255, "eeprom": "1", "eepromsd": "0", "eepromchitchat": "1", "sdsupport": "1", "sdspeed": 1, "sddisableddetect": "1", "sddetectinverted": "0", "sdrestart": "0", "sdrestarttime": 1, "lcdlanguages": "en", "encoderpulsesstep": 5, "encoderstepmenu": 1, "invertclickbutton": "0", "invertbackbutton": "0", "invertrotaryswitch": "0", "invertmenudirection": "0", "displays": 12, "nextion_model": 13, "nextion_port": 2, "nextionGFX": "0", "lcdprogressbar": 0, "lcdprogressbarbartime": 3, "lcdprogressbarmsgtime": 1, "lcdprogressbarmsgexpire": 0, "laserbeam": "0", "lasercontrol": 1, "laserfocus": "0", "laserraster": "0", "rfidmodule": "0", "rfidserial": 1, "rgbled": "0", "rgbwled": "0", "pca9632": "0", "neopixelled": "0", "neopixeltype": "NEO_GRB", "neopixelpixels": 16, "eventled": "0", "jsonoutput": "0", "testmode": "0", "inchmodesupport": "0", "blockbuffersize": 32, "bufsize": 8, "nozzlecleanfeature": "0", "nozzlecleanstrokes": 12, "nozzlecleantriangle": 3, "nozzlecleanstart_x": 30, "nozzlecleanstart_y": 30, "nozzlecleanstart_z": 1, "nozzlecleanend_x": 100, "nozzlecleanend_y": 60, "nozzlecleanend_z": 1, "nozzlecleangoback": "1", "nozzleparkfeature": "0", "nozzleparkXpos": 10, "nozzleparkYpos": 10, "nozzleparkZpos": 20, "nozzleparkXYfr": 100, "nozzleparkZfr": 5, "filamentchangeenable": "0", "filamentchangeretract": 5, "filamentchangeretractfr": 20, "filamentchangeunload": 100, "filamentchangeunloadfr": 50, "filamentchangeslowload": 5, "filamentchangeslowloadfr": 6, "filamentchangefastload": 100, "filamentchangefastloadfr": 50, "filamentchangeextrude": 50, "filamentchangeextrudefr": 5, "filamentchangeunloadretract": 10, "filamentchangeunloadretractdelay": 5000, "filamentchangeunloadretractpurge": 8, "filamentchangenozzletimeout": 45, "filamentchangeprinteroff": 5, "filamentchangenumberbeep": 5, "filamentchangenosteppertimeout": "1", "filamentchangeparkheadonpause": "0", "filamentchangehomebefore": "0", "filamentchangegcodes": "0", "filamentchangeallextruder": "0", "Xmotor": { "name": "X motor", "step": "ORIG_X_STEP_PIN", "dir": "ORIG_X_DIR_PIN", "enable": "ORIG_X_ENABLE_PIN" }, "Ymotor": { "name": "Y motor", "step": "ORIG_Y_STEP_PIN", "dir": "ORIG_Y_DIR_PIN", "enable": "ORIG_Y_ENABLE_PIN" }, "Zmotor": { "name": "Z motor", "step": "ORIG_Z_STEP_PIN", "dir": "ORIG_Z_DIR_PIN", "enable": "ORIG_Z_ENABLE_PIN" }, "X2motor": { "name": "Extruder 1", "step": "ORIG_E1_STEP_PIN", "dir": "ORIG_E1_DIR_PIN", "enable": "ORIG_E1_ENABLE_PIN" }, "Y2motor": { "name": "Extruder 1", "step": "ORIG_E1_STEP_PIN", "dir": "ORIG_E1_DIR_PIN", "enable": "ORIG_E1_ENABLE_PIN" }, "Z2motor": { "name": "Extruder 1", "step": "ORIG_E1_STEP_PIN", "dir": "ORIG_E1_DIR_PIN", "enable": "ORIG_E1_ENABLE_PIN" }, "Z3motor": { "name": "Extruder 2", "step": "ORIG_E2_STEP_PIN", "dir": "ORIG_E2_DIR_PIN", "enable": "ORIG_E2_ENABLE_PIN" }, "E0motor": { "name": "Extruder 0", "step": "ORIG_E0_STEP_PIN", "dir": "ORIG_E0_DIR_PIN", "enable": "ORIG_E0_ENABLE_PIN" }, "E1motor": { "name": "Extruder 1", "step": "ORIG_E1_STEP_PIN", "dir": "ORIG_E1_DIR_PIN", "enable": "ORIG_E1_ENABLE_PIN" }, "E2motor": { "name": "Extruder 2", "step": "ORIG_E2_STEP_PIN", "dir": "ORIG_E2_DIR_PIN", "enable": "ORIG_E2_ENABLE_PIN" }, "E3motor": { "name": "Extruder 3", "step": "ORIG_E3_STEP_PIN", "dir": "ORIG_E3_DIR_PIN", "enable": "ORIG_E3_ENABLE_PIN" }, "E4motor": { "name": "Extruder 4", "step": "ORIG_E4_STEP_PIN", "dir": "ORIG_E4_DIR_PIN", "enable": "ORIG_E4_ENABLE_PIN" }, "E5motor": { "name": "Extruder 5", "step": "ORIG_E5_STEP_PIN", "dir": "ORIG_E5_DIR_PIN", "enable": "ORIG_E5_ENABLE_PIN" }, "heater0pin": "ORIG_HEATER_0_PIN", "heater1pin": "ORIG_HEATER_1_PIN", "heater2pin": "ORIG_HEATER_2_PIN", "heater3pin": "ORIG_HEATER_3_PIN", "heaterbedpin": "ORIG_HEATER_BED_PIN", "heaterchamberpin": "NoPin", "heatercoolerpin": "NoPin", "temp0pin": "ORIG_TEMP_0_PIN", "temp1pin": "ORIG_TEMP_1_PIN", "temp2pin": "ORIG_TEMP_2_PIN", "temp3pin": "ORIG_TEMP_3_PIN", "tempbedpin": "ORIG_TEMP_BED_PIN", "tempchamberpin": "NoPin", "tempcoolerpin": "NoPin", "Xminpin": "ORIG_X_MIN_PIN", "Xmaxpin": "ORIG_X_MAX_PIN", "Yminpin": "ORIG_Y_MIN_PIN", "Ymaxpin": "ORIG_Y_MAX_PIN", "Zminpin": "ORIG_Z_MIN_PIN", "Zmaxpin": "ORIG_Z_MAX_PIN", "X2minpin": "NoPin", "X2maxpin": "NoPin", "Y2minpin": "NoPin", "Y2maxpin": "NoPin", "Z2minpin": "NoPin", "Z3minpin": "NoPin", "Z2maxpin": "NoPin", "Z3maxpin": "NoPin", "Zprobepin": "ORIG_Z_MIN_PIN", "Xcspin": "NoPin", "Ycspin": "NoPin", "Zcspin": "NoPin", "X2cspin": "NoPin", "Y2cspin": "NoPin", "Z2cspin": "NoPin", "Z3cspin": "ORIG_E2_CS_PIN", "E0cspin": "NoPin", "E1cspin": "NoPin", "E2cspin": "NoPin", "E3cspin": "NoPin", "E4cspin": "NoPin", "E5cspin": "NoPin", "fanpin": "ORIG_FAN0_PIN", "fan1pin": "ORIG_FAN1_PIN", "fan2pin": "ORIG_FAN2_PIN", "fan3pin": "ORIG_FAN3_PIN", "fan4pin": "ORIG_FAN4_PIN", "fan5pin": "ORIG_FAN5_PIN", "PSONpin": "ORIG_PS_ON_PIN", "beeperpin": "ORIG_BEEPER_PIN", "E0encoderpin": "NoPin", "E1encoderpin": "NoPin", "E2encoderpin": "NoPin", "E3encoderpin": "NoPin", "E4encoderpin": "NoPin", "E5encoderpin": "NoPin", "filamentsensorpin": "NoPin", "flowmeterpin": "NoPin", "filrunoutdavpin": "NoPin", "filrunoutpin": "NoPin", "filrunoutpin1": "NoPin", "filrunoutpin2": "NoPin", "filrunoutpin3": "NoPin", "filrunoutpin4": "NoPin", "filrunoutpin5": "NoPin", "laserpwrpin": "ORIG_LASER_PWR_PIN", "laserpwmpin": "ORIG_LASER_PWM_PIN", "laserperipheralspin": "NoPin", "laserperipheralsstatuspin": "NoPin", "cncrouterpin": "NoPin", "powerconsumptionpin": "NoPin", "doorpin": "NoPin", "powercheckpin": "NoPin", "caselightpin": "NoPin", "rgbledRpin": "NoPin", "rgbledGpin": "NoPin", "rgbledBpin": "NoPin", "rgbledWpin": "NoPin", "neopixelpin": "NoPin", "dhtdatapin": "NoPin", "tacho0pin": "NoPin", "tacho1pin": "NoPin", "tacho2pin": "NoPin", "tacho3pin": "NoPin", "tacho4pin": "NoPin", "tacho5pin": "NoPin", "END_DATA": 0, "plahotendtemp": 190, "plabedtemp": 60, "plafanspeed": 255, "abshotendtemp": 240, "absbedtemp": 100, "absfanspeed": 255, "gumhotendtemp": 230, "gumbedtemp": 60, "gumfanspeed": 255, "heaterpwmspeed": 0, "fastpwmcooler": "0", "thermalprotectionbedperiod": 20, "thermalprotectionbedhysteresis": 2, "thermalprotectionchamberperiod": 20, "thermalprotectionchamberhysteresis": 2, "thermalprotectioncoolerperiod": 20, "thermalprotectioncoolerhysteresis": 2, "zprobespeed": 3600, "X2microstep": 16, "Y2microstep": 16, "Z2microstep": 16, "X2current": 800, "Y2current": 800, "Z2current": 800, "fanpwmspeed": 0, "sdslow": "0", "sdextraslow": "0", "sdsetting": "0", "sdsettingtime": 300, "deltafeedratescaling": "0", "Zprobe": "0" } ========== End configuration string ========== */

Thanks, Willaim

Buddycarpenter commented 5 years ago

Only has issues after bi linear bed leveling (G28, G29). If I store the probe data and recall at start of print, then everything runs normal.

William