際排查)
最近整理電腦里的 3D 打印素材時(shí)我又把 BambuStudio 生成的 GCode 翻出來讀了一遍。說實(shí)話以前我也和大多數(shù)人一樣只在切片軟件的圖形界面里點(diǎn)來點(diǎn)去遇到奇怪現(xiàn)象就只能靠猜。直到有次打印機(jī)屏幕上彈出一個(gè)“未驗(yàn)證代碼”的警告我才下定決心把 BambuStudio 和 GCode 之間的關(guān)系徹底弄明白。這篇筆記就是那段時(shí)間折騰出來的結(jié)果主要寫給那些已經(jīng)會(huì)用 BambuStudio 切片但還沒系統(tǒng)讀過它生成的指令文件的玩家。學(xué)會(huì)之后你能自己定位很多“玄學(xué)”問題也能安全地改出適合自己機(jī)器的專屬 GCode而不是看著一堆 M 指令發(fā)懵。1. 項(xiàng)目概述BambuStudio 代碼到底和普通 GCode 有什么不同1.1 切片軟件其實(shí)是在做“翻譯”和“編譯”很多老玩家習(xí)慣把 GCode 理解成打印機(jī)的匯編語言這個(gè)類比挺貼切。切片軟件把三維模型拆成一層層的輪廓再把輪廓轉(zhuǎn)換成一行行文本指令每行都對(duì)應(yīng)一次移動(dòng)、一段加熱或一次風(fēng)扇調(diào)速。BambuStudio 本身是從 PrusaSlicer 這個(gè)開源項(xiàng)目分出來的所以它的代碼里還保留著大量 Slic3r 風(fēng)格的注釋和占位符比如;TYPE:WALL-OUTER、;MESH、;FILAMENT這些。注意這些行都不是真正的指令它們不參與執(zhí)行只是給人類和后處理腳本看的元信息。真正會(huì)被執(zhí)行的是那些以字母開頭的控制指令比如 G0/G1 代表直線移動(dòng)M104 代表設(shè)置噴嘴溫度。BambuStudio 和普通固件的最大區(qū)別在于它生成的代碼在發(fā)到打印機(jī)之前會(huì)先經(jīng)過一層“標(biāo)簽解釋”和指令轉(zhuǎn)換。它不會(huì)把一個(gè)簡單的 M104 直接硬塞給打印機(jī)而是會(huì)穿插很多機(jī)器相關(guān)的初始化宏和狀態(tài)判斷。這也是為什么同一份模型切片出來換一臺(tái)不同型號(hào)的 Bambu 打印機(jī)開頭那幾十行往往完全不一樣。另一個(gè)容易忽略的點(diǎn)是文件里的注釋比例。新手第一次用文本編輯器打開 .gcode 文件常常被幾百行注釋嚇到。其實(shí)這部分不用慌張你可以把它理解成編譯產(chǎn)物里的調(diào)試信息。真正有用的做法是先學(xué)會(huì)區(qū)分哪些是“給人看的”哪些是“給機(jī)器聽的”。1.2 為什么值得花時(shí)間讀 GCode我自己的體會(huì)是讀 GCode 不是一種“炫技”而是排查問題時(shí)的底層能力。舉個(gè)典型例子很多人第一次用 BambuStudio 打印時(shí)會(huì)發(fā)現(xiàn)模型第一層外面有一圈細(xì)細(xì)的單線看起來像拉絲但不掉渣。切片界面上能關(guān)掉它但如果想知道它到底做了什么、為什么存在還是得看 GCode。再比如你在網(wǎng)上找了一段“開啟自動(dòng)調(diào)平”的代碼直接貼進(jìn)機(jī)器起始 GCode結(jié)果打印機(jī)根本不執(zhí)行或者報(bào)錯(cuò)這時(shí)候光靠界面猜測完全沒用。讀 GCode 還能幫你做更精細(xì)的定制。比如我最近給一臺(tái)打印機(jī)增加了“打印開始前讓噴頭沿邊緣走一圈”的擦拭動(dòng)作順便把結(jié)束段改成噴頭自動(dòng)停到模型側(cè)面避免冷卻后滴料砸壞表面。這些操作聽起來不大但全部要落在正確的 GCode 段上。浪費(fèi)時(shí)間反復(fù)試錯(cuò)不如一次把基礎(chǔ)補(bǔ)上。這篇筆記不是教科書更像一份我在自己機(jī)器上驗(yàn)證過的實(shí)操記錄。適合已經(jīng)會(huì)用 BambuStudio 切片、想往更深一步走的人。接下來我會(huì)按一份 GCode 從生成到結(jié)束的順序把每個(gè)關(guān)鍵段落拆開講再補(bǔ)上指令速查和踩坑記錄。2. 一份標(biāo)準(zhǔn) GCode 的骨架起始、層切換和結(jié)束段里藏著什么2.1 起始段初始化、溫度和歸位都在這里隨便打開一個(gè) BambuStudio 生成的 .gcode 文件前 50 到 100 行基本就是整臺(tái)機(jī)器的“起床流程”。這段代碼長什么樣取決于你選的機(jī)型、噴頭數(shù)量和材料類型。整體來說它要完成幾件事切換到絕對(duì)坐標(biāo)模式、執(zhí)行歸位、設(shè)置噴嘴和熱床的目標(biāo)溫度、等待溫度到達(dá)、做一次擠出測試可能還會(huì)掃一下噴嘴邊緣的殘留??雌饋砗唵蔚@段有一點(diǎn)很值得注意BambuStudio 在很多機(jī)型上不會(huì)直接用最簡化的 M104/M109 命令去加熱噴嘴而是調(diào)用固件內(nèi)部的一套流程。代碼里會(huì)出現(xiàn)類似M1002 gcode_macro START_PRINT這樣的行。這個(gè) M1002 不是標(biāo)準(zhǔn) Marlin 指令而是 Bambu 固件自定義的宏入口作用是觸發(fā)一段預(yù)設(shè)的啟動(dòng)流程。這意味著網(wǎng)上很多寫給 Marlin 或 Klipper 的起始 GCode不能原樣照搬進(jìn)來因?yàn)榇蛴C(jī)固件的狀態(tài)機(jī)根本不認(rèn)。實(shí)際修改起始段時(shí)我建議記住下面幾個(gè)原則盡量使用模板占位符不要寫死具體溫度或材料名。在自定義動(dòng)作前后加上坐標(biāo)模式設(shè)置比如開頭先G90避免被前面的狀態(tài)污染。任何修改都先用小模型驗(yàn)證不要一上來就打大件。我見過有人在起始段里插了一段擦拭動(dòng)作結(jié)果因?yàn)闆]注意當(dāng)前是相對(duì)坐標(biāo)模式還是絕對(duì)坐標(biāo)模式噴嘴直接往熱床方向撞了下去。這類事故在 GCode 調(diào)試?yán)锓浅3R姾竺嫖視?huì)專門說。2.2 層切換代碼與那條“閃電線”切片預(yù)覽里經(jīng)常能看到一條快速掠過模型外圈的細(xì)線很多新手叫它“閃電線”也有人以為是 bug。實(shí)際上對(duì)應(yīng)到 GCode 里它通常是一段插入在層起始或?qū)咏Y(jié)束位置的快速空駛移動(dòng)。Bambu 機(jī)型上這段代碼還有更實(shí)際的用途維持噴嘴內(nèi)部材料的壓力狀態(tài)給壓力提前補(bǔ)償一個(gè)平穩(wěn)的速度過渡。直接刪掉這條線通常不會(huì)出大事故但有些機(jī)型會(huì)在下一次擠出時(shí)出現(xiàn)輕微拉絲或起點(diǎn)延滯。原因在于 Bambu 固件的擠出壓力控制跟運(yùn)動(dòng)隊(duì)列里的速度變化強(qiáng)相關(guān)突然從打印速度跳到高速空駛再突然降到打印速度狀態(tài)估計(jì)會(huì)出現(xiàn)偏差。保留這段小走線相當(dāng)于讓壓力控制有時(shí)間做緩沖。層切換位置的元標(biāo)簽也值得留意。切片后你會(huì)看到類似;LAYER_CHANGE和;Z_HEIGHT:0.3的注釋行。這些不是命令但它能幫你在后處理或排查時(shí)快速定位“這一層發(fā)生在哪里”。我之前寫過一個(gè)統(tǒng)計(jì)用料的腳本就是靠解析這些注釋來分層的非常方便。2.3 結(jié)束段避讓、冷卻和清理收尾 GCode 同樣包含一系列動(dòng)作關(guān)閉熱床、降低噴嘴溫度、退一點(diǎn)料、把噴頭移到安全高度和角落再關(guān)掉冷卻風(fēng)扇。Bambu 機(jī)型上可能還會(huì)加一些清噴嘴的殘留控制。結(jié)束段的坑主要集中在“噴頭避讓坐標(biāo)”上。很多人想把噴頭停在模型側(cè)面直接改 G1 的 X/Y 數(shù)值結(jié)果發(fā)現(xiàn)有時(shí)生效有時(shí)不生效。最大的可能原因就是你改的那段代碼執(zhí)行時(shí)機(jī)器正好處于相對(duì)坐標(biāo)模式 G91而不是絕對(duì)坐標(biāo)模式 G90。同一個(gè) G1 X20 Y20在兩種模式下含義完全不同一個(gè)表示“移動(dòng)到坐標(biāo)(20,20)”另一個(gè)表示“從當(dāng)前位置再平移20毫米”。改之前先確認(rèn)當(dāng)前模式是非?;A(chǔ)但極其重要的一步。3. 關(guān)鍵 GCode 指令與 Bambu 宏解讀3.1 常用 G/M 指令速查表在讀代碼的過程中你會(huì)反復(fù)見到下面這些指令。我把它們的通用含義和 Bambu 機(jī)器上的注意事項(xiàng)放在一起方便隨時(shí)查。指令含義Bambu 機(jī)器上的注意事項(xiàng)G0 / G1快速移動(dòng) / 線性打印移動(dòng)很多機(jī)型對(duì) G0 和 G1 不作嚴(yán)格區(qū)分但安全起見打印移動(dòng)還是用 G1G28回零可能觸發(fā)限位和噴嘴擦拭流程起始段里頻繁出現(xiàn)G29自動(dòng)調(diào)平部分 Bambu 固件有自己的入口直接貼 Marlin 版本不一定執(zhí)行G90 / G91絕對(duì)坐標(biāo) / 相對(duì)坐標(biāo)修改避讓坐標(biāo)前先確認(rèn)當(dāng)前是哪種模式G92設(shè)置當(dāng)前位置為指定值常用于擠出機(jī)歸零比如G92 E0M82 / M83擠出機(jī)絕對(duì) / 相對(duì)模式切換前要注意后續(xù) E 值的含義M104 / M109設(shè)置噴嘴溫度 / 設(shè)置并等待溫度Bambu 固件可能通過宏實(shí)現(xiàn)直接調(diào)用有概率被狀態(tài)機(jī)忽略M140 / M190熱床設(shè)置溫度 / 設(shè)置并等待同理確認(rèn)固件是否走宏流程M106 / M107冷卻風(fēng)扇開 / 關(guān)風(fēng)扇編號(hào)要注意Bambu 機(jī)型可能與 Marlin 默認(rèn)編號(hào)不同M220 / M221速度倍率 / 擠出倍率打印途中動(dòng)態(tài)調(diào)速常用M400等待所有移動(dòng)完成改起始 GCode 時(shí)非常有用強(qiáng)制同步M201 / M203加速度上限 / 速度上限某些固件版本對(duì)數(shù)值范圍有嚴(yán)格限制M204打印加速度 / 行程加速度表面波紋排查時(shí)重點(diǎn)看這里這個(gè)表不需要背只要遇到問題時(shí)知道往哪個(gè)方向查就行。我自己的習(xí)慣是遇到陌生指令就搜一下吃不準(zhǔn)的時(shí)候先在機(jī)器上手動(dòng)執(zhí)行一小段觀察行為再?zèng)Q定是否放進(jìn)正式代碼。3.2 讀懂固件宏和 M100x 系列指令BambuStudio 生成的起始和結(jié)束代碼里經(jīng)常能看到 M100x 這樣的自定義指令。比如M1002、M1005、M1024這些編號(hào)不是憑空來的它們是 Bambu 固件為了和切片軟件配合而增加的擴(kuò)展指令。具體到每個(gè)編號(hào)的含義不同固件版本可能有細(xì)微差別所以我不建議把它們背成死記硬背的信息。更重要的是理解它們的位置和作用。以我目前在機(jī)器上看到的為例M1002這類行通常出現(xiàn)在打印流程的狀態(tài)切換點(diǎn)它告訴固件“接下來要進(jìn)入哪一個(gè)大階段”比如開始打印、結(jié)束打印、暫停切換等。M1024則常用來清理運(yùn)動(dòng)緩沖區(qū)確保前面的移動(dòng)都執(zhí)行完了再做溫度或 IO 操作。如果你在代碼里看到它基本可以判斷下一個(gè)動(dòng)作對(duì)時(shí)序要求比較高。如果你用的機(jī)器刷了第三方固件比如 Klipper 或其他開源方案這些 M100x 指令很大概率不會(huì)被識(shí)別甚至?xí)划?dāng)成普通 M 指令處理。我在別人機(jī)器上遇到過代碼里殘留大量宏運(yùn)行時(shí)直接丟進(jìn)默認(rèn)分支的情況結(jié)果就是某些動(dòng)作沒執(zhí)行打印卻能正常跑。這種“看起來沒問題但功能缺失”的狀態(tài)最迷惑人。3.3 占位符機(jī)制模板變量如何變成真實(shí)參數(shù)BambuStudio 的自定義 GCode 模板里大量使用占位符常見的有{initial_tool}、{material_type}、{hotend_temp}、{heatbed_temp}、{max_layer_z}、{first_layer_print_min}等。切片時(shí)軟件會(huì)把它們替換成當(dāng)前項(xiàng)目里的實(shí)際值。這就帶來一個(gè)操作習(xí)慣盡量保留占位符不要手動(dòng)改成具體數(shù)值。比如你想讓噴嘴溫度變成 230與其在模板里寫死 230不如直接用{hotend_temp}然后在材料設(shè)置里改溫度。這樣換耗材時(shí)起始代碼不用動(dòng)也不會(huì)出現(xiàn)“代碼寫死 230但材料設(shè)置里明明是 210”的錯(cuò)亂情況。我第一次自己改模板時(shí)就是想當(dāng)然地把{heatbed_temp}替換成了 60結(jié)果換個(gè)材料打 ABS 時(shí)忘了改熱床溫度怎么都上不去。后來養(yǎng)成用占位符的習(xí)慣這種低級(jí)問題再?zèng)]出現(xiàn)過。3.4 速度、加速度與壓力補(bǔ)償相關(guān)代碼運(yùn)動(dòng)參數(shù)一般會(huì)在起始段末尾或打印中途以 M201、M203、M204 等指令出現(xiàn)。M204 里經(jīng)常有三個(gè)數(shù)值P 代表打印移動(dòng)加速度R 代表非打印移動(dòng)加速度T 代表一個(gè)周期內(nèi)的最大加速度。如果打印時(shí)出現(xiàn)表面波紋、邊角過沖很多人第一反應(yīng)是調(diào)回抽但我的經(jīng)驗(yàn)是先檢查這部分加速度數(shù)值是否合理尤其是打印加速度設(shè)得過高的時(shí)候角上特別容易出現(xiàn)“大象紋”。壓力提前補(bǔ)償在 Bambu 機(jī)器上也是通過特定指令配置不同固件版本寫法不太一樣。切片界面里的“壓力提前”設(shè)置最終會(huì)反映到 GCode 中你可以直接在文件里搜索壓力相關(guān)關(guān)鍵詞或者 PA 參數(shù)看到對(duì)應(yīng)數(shù)值。如果你直接在 GCode 里強(qiáng)行改了這個(gè)值相當(dāng)于繞過切片界面限制固件會(huì)照單執(zhí)行但它不會(huì)幫你校驗(yàn)是否超出能力范圍改太高可能造成堵頭或擠出不足。4. 實(shí)操讀懂并按需修改一份 BambuStudio GCode4.1 逐段標(biāo)注一份實(shí)際 GCode為了演示我放一個(gè)高度簡化的 GCode 片段注釋就是我平時(shí)排查時(shí)會(huì)在腦子里過的內(nèi)容。不同固件版本可能有差異但分析思路可以復(fù)用。; 片段的開頭 G90 ; 使用絕對(duì)坐標(biāo)避免坐標(biāo)漂移 M82 ; 擠出機(jī)用絕對(duì)模式或 M83 相對(duì)模式 M104 S210 ; 設(shè)置噴嘴溫度到 210但不等待 M140 S60 ; 設(shè)置熱床溫度到 60 G28 ; 回零讓機(jī)器知道當(dāng)前坐標(biāo) ; 等待熱床溫度到 60 并繼續(xù) M190 S60 ; 有的機(jī)型會(huì)在這里插入宏調(diào)用 M1002 gcode_macro START_PRINT M104 S215 ; 再次設(shè)置噴嘴溫度可能覆蓋前面的設(shè)置 ; 這一段用于切換工具或初始化 G21 ; 單位設(shè)置為毫米 G1 Z5 F300 ; 先抬升 Z 軸避免加熱時(shí)噴嘴平貼熱床 M400 ; 等待所有移動(dòng)完成看到M104 S210后面又出現(xiàn)M104 S215不要覺得奇怪。有些固件是先預(yù)熱到普通溫度再在啟動(dòng)宏里二次升溫到打印溫度這是為了減少等待時(shí)間。但如果溫度一直不對(duì)就要排查這種重復(fù)設(shè)置的后覆蓋。4.2 四個(gè)自定義 GCode 入口及適用場景BambuStudio 在打印機(jī)設(shè)置里提供幾個(gè)自定義 GCode 入口分別是機(jī)器起始 GCode、機(jī)器結(jié)束 GCode、層 GCode 和工具切換 GCode。每一個(gè)都有明確的執(zhí)行時(shí)機(jī)用錯(cuò)了地方就會(huì)出現(xiàn)“我明明寫了代碼但沒生效”的情況。機(jī)器起始 GCode 適合放所有打印開始前只需做一次的動(dòng)作比如自動(dòng)擦拭噴嘴軌跡、抽料確認(rèn)、低高度定位。機(jī)器結(jié)束 GCode 適合放冷卻、???、蜂鳴器提示這類收尾動(dòng)作。層 GCode 則有兩種一種是層切換時(shí)執(zhí)行另一種是特定 Z 高度執(zhí)行適合在打印完成到某一高度時(shí)插入暫?;蛘邩?biāo)記。工具切換 GCode 在多材料或多噴頭場景下使用切換前后可以分別插入清理和回抽指令。舉個(gè)我自己的例子。我把打印完成后的蜂鳴器提示放在結(jié)束 GCode 里用的是 M300 類的指令固件支持的話會(huì)響一聲。這個(gè)操作本身很簡單但如果放錯(cuò)到層 GCode 里就會(huì)變成每打印完一層響一次夜里打印能吵到懷疑人生。4.3 修改后打印機(jī)的校驗(yàn)和警告問題這是最容易踩坑的地方。BambuStudio 生成的打印文件里會(huì)帶有一些用于狀態(tài)識(shí)別和校驗(yàn)的信息你直接用文本編輯器改完文件再傳回打印機(jī)機(jī)器可能在屏幕上提示“未驗(yàn)證的代碼”或者干脆拒絕執(zhí)行。這不是打印機(jī)壞了而是它檢測到文件和切片軟件生成時(shí)的原始狀態(tài)不一致。解決方法有兩種。第一種是把改動(dòng)寫進(jìn) BambuStudio 的模板或后處理流程里讓切片軟件重新生成一份完整的文件這樣校驗(yàn)信息會(huì)一并更新。第二種是在打印機(jī)設(shè)置里關(guān)閉代碼校驗(yàn)或打開開發(fā)者模式但這么做會(huì)降低安全性只建議在自己完全可控、確定代碼沒有惡意內(nèi)容的機(jī)器上操作。我自己的做法是能用模板就不用文件替換。通過切片界面改參數(shù)、加自定義代碼讓軟件重新生成文件比直接改 .gcode 后再上傳要穩(wěn)得多。如果非要改文件也盡量保留原文件的注釋結(jié)構(gòu)不要隨手刪掉開頭的元信息否則后續(xù)排查會(huì)失去定位坐標(biāo)。5. 常見問題與排查技巧實(shí)錄5.1 異?,F(xiàn)象速查表下面這個(gè)表是我在折騰過程中整理出來的不一定覆蓋所有情況但能覆蓋大部分和 GCode 相關(guān)的入門問題?,F(xiàn)象可能原因GCode 層面怎么排查第一層外面總有一圈單線壓力測試或擦拭軌跡屬于切片軟件的正常輸出找;TYPE:Custom附近的 G1 移動(dòng)確認(rèn)軌跡范圍模型底部有一圈沉積起始段的擠出測試線速度或出料量不合理調(diào)低G1 E后的擠出量觀察首層起點(diǎn)是否改善上傳修改過的文件提示不安全文件校驗(yàn)信息被改動(dòng)回到 BambuStudio 里改模板重新切片生成文件打印完成時(shí)噴頭在模型正上方滴料結(jié)束段避讓坐標(biāo)不合適或等待時(shí)間不足檢查結(jié)束段 G90/G91 模式以及收尾移動(dòng)的位置噴頭初次接觸模型時(shí)起點(diǎn)有疙瘩噴嘴壓力沒有建立好檢查層切換前是否有一小段空駛回抽后有沒有補(bǔ)償溫度一直升不上去重復(fù)溫度指令被后執(zhí)行命令覆蓋全局搜索 M104/M109按順序查最后生效的是哪一行切面看起來正常但實(shí)際打歪修改層 GCode 時(shí)改變了坐標(biāo)系或 Z 高度檢查層切換前后是否有 G90/G91 或 G92 的意外插入表格里每一項(xiàng)展開都是個(gè)大坑但核心思想相同先看代碼再懷疑固件。5.2 我常用的三段排查思路排查 GCode 相關(guān)問題我基本遵循三步走。第一步把出問題的模型換成 20mm 的立方體重新切片生成一個(gè)最小化復(fù)現(xiàn)場景。小模型生成速度快代碼量小容易看到改動(dòng)前后的完整 diff。第二步在文本編輯器里全局搜索溫度指令 M104、M109、M140、M190把它們的出現(xiàn)順序和數(shù)值列出來溫度問題基本都能在這里找到答案。第三步如果問題牽扯到某個(gè)自定義動(dòng)作就注釋掉一半代碼確認(rèn)現(xiàn)象是否消失再注釋掉另一半用“二分法”縮小范圍。這個(gè)方法看起來很笨但比一遍遍猜有效得多。我還習(xí)慣保存一份“干凈版本”的 GCode 作為對(duì)照。每次改動(dòng)之前都備份一份尤其是改機(jī)器起始和結(jié)束段的時(shí)候。很多問題只要你回滾到上一次能正常打印的版本馬上就能確認(rèn)是不是自己改出來的。5.3 學(xué)習(xí)工具和后續(xù)擴(kuò)展方向讀 GCode 不需要很復(fù)雜的工具一個(gè)帶語法高亮的文本編輯器就夠用。我平時(shí)用 VS Code裝一個(gè) GCode 高亮插件代碼里的指令、注釋、坐標(biāo)一眼分開。偶爾會(huì)用在線 GCode 預(yù)覽器把文件加載進(jìn)去逐層看軌跡用來驗(yàn)證某個(gè)奇怪移動(dòng)到底發(fā)生在哪一層。后處理腳本也值得花點(diǎn)時(shí)間研究。BambuStudio 支持在切片完成后調(diào)用外部腳本你可以用 Python 腳本掃描生成的 .gcode按;LAYER_CHANGE注釋統(tǒng)計(jì)每層時(shí)間、用料或者批量插入自定義動(dòng)作。我之前寫了一個(gè)腳本自動(dòng)在溫度變化比較大的位置加一個(gè) M400減少由于運(yùn)動(dòng)隊(duì)列堆積導(dǎo)致的狀態(tài)不同步效果比手動(dòng)改文件穩(wěn)定得多。如果還想繼續(xù)深入建議去找官方固件 SDK 或開發(fā)文檔看看 M100x 這類擴(kuò)展指令的權(quán)威解釋。不過官方文檔更新不一定跟論壇和社區(qū)同步所以遇到細(xì)節(jié)問題我最推薦的方式還是自己控制變量做實(shí)驗(yàn)把單段 GCode 抽出來在機(jī)器上單獨(dú)執(zhí)行觀察動(dòng)作是否和預(yù)期一致。這種方法雖然慢但得到的經(jīng)驗(yàn)通常特別扎實(shí)。最后再分享一個(gè)我自己的小經(jīng)驗(yàn)讀 GCode 不是要跟切片界面作對(duì)而是給自己多一個(gè)觀察角度。我現(xiàn)在遇到任何奇怪的打印表現(xiàn)第一反應(yīng)就是在 .gcode 里搜相關(guān)關(guān)鍵詞而不是干瞪眼看屏幕。這個(gè)習(xí)慣一旦建立你會(huì)發(fā)現(xiàn)很多所謂的“玄學(xué)問題”最后都能落到某一行指令上變得有據(jù)可查。