Gcode命令【轉】

https://www.jianshu.com/p/f8a328457a45算法

簡述

      研究過3D打印機的朋友,都會用到G-code文件。要使用3D打印機打印東西要通過幾個步驟:        一、建立3D模型    二、切片軟件處理,生成3D打印機能識別的命令(保存在G-code文件中)   三、發送打印命令給3D打印機學習

        Gcode文件中的每一行都是3D打印機固件所能理解的命令。而這些命令,也被稱爲G-code命令,是3D打印機和電腦之間最重要的命令交互界面。測試

        既然全部3D打印機都使用G-code做爲對外聯繫的惟一信息交互方式,那麼這種「語言」的標準就很重要了。不幸的是,雖然全部的3D打印機,都使用G-code做爲與計算機的交互語言,但實際上每種3D打印機使用的G-code,都多多少少有些不一樣。這也能夠說,每種3D打印機都有本身的「方言」。咱們要研究G-code,就要從一種最多見的「方言」,也能夠說是「普通話」開始,先了解一種,而後再學習其餘相似的語言,相互對比,就很容易了。ui

基礎運動

既然G-code是計算機指揮3D打印機幹活用的一套語言,那麼其中最重要的就是運動類的指令。設計

G0/G1 直線移動

雖然從名字上看,G0叫作「快速直線移動」,而G1叫作「直線移動」,但實際上在Repetier-firmware裏面,G0和G1指令是徹底等價的,沒有任何區別。移動是否快速,徹底是靠參數F來決定的(下面會詳細介紹)。這條指令的做用也很簡單,就是將擠出頭線性移動到一個特定的位置。這條指令帶有很多參數,完整的形式是這樣的:調試

  G0 Xnnn Ynnn Znnn Ennn Fnnn Snnncode

或者orm

  G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn教程

使用時,不須要全部的參數所有存在,但至少要有一個參數。其中,接口

Xnnn表示X軸的移動位置;

Ynnn表示Y軸的移動位置;

Znnn表示Z軸的移動位置;

Ennn表示E軸(擠出頭步進電機)的移動位置;

Fnnn表示速度,單位是毫米/每分鐘;

Snnn表示是否檢查限位開關,S0不檢查,S1檢查,缺省值是S0;

舉例來講,

G1F1500G1X50Y25.3E22.4

這樣兩行G-code,表示了首先將速度設置爲1500mm/min,也就是25mm/s,而後將擠出頭移動至x=50mm, y=25.3mm的位置上,z軸高度不變,而且將擠出頭步進電機移動至22.4mm的位置上。這裏,速度、xyz位置都比較好理解,但擠出頭步進電機的位置怎麼理解呢?移動至22.4mm處,表明着擠出了多少耗材呢?實際上,這裏擠出頭的具體動做,要根據以前擠出頭步進電機所在的狀態(也就是位置)而定。好比在這兩條語句以前,擠出頭步進電機已經處於20mm的位置處,那麼這裏擠出頭步進電機只要再前進2.4mm就能夠了。

仔細想一想,其實擠出頭步進電機的工做方式,與xyz軸徹底同樣。xyz軸之因此比較好理解,是由於咱們清楚的知道原點(0, 0, 0)的位置在哪裏。而對於e軸來講原點的位置也會在打印開始處被初始化到0的位置。知道了原點的位置,就能夠正確理解擠出頭步進電機的工做方式了。實際上,擠出頭步進電機仍然是以原點爲基礎,只不過是在整個打印過程當中持續增長的。(思考:切片器的擠出頭回抽動做,對應了什麼樣的G-code代碼?)

再舉一例,

G1F1500G1X50Y25.3E22.4F3000

這個例子與上面的例子很是相似,惟一的區別,就是F參數了。而這兩條語句的意義,除了對XYZE的移動以外,還會將打印速度,從語句執行開始時的1500mm/min,提升到語句執行結束時的3000mm/min。這裏有兩點須要注意。

第一點,F參數與XYZE參數同樣,在語句執行的過程當中線性插值;

第二點,在預先知道第一點的前提下,F參數使得計算機對3D打印機的控制更加深刻和精準了。計算得當的狀況下,切片器能夠精確控制3D打印機的加速和減速過程,使得整個3D打印過程更加順滑。

G2/G3 圓弧移動

這兩條命令中,G2是順時針圓弧移動,G3是逆時針圓弧移動。命令的完整形式是:

G2 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn

或者

G3 Xnnn Ynnn Innn Jnnn Rnnn Ennn Fnnn

其中,

Xnnn表示移動目標點的X座標;

Ynnn表示移動目標點的Y座標;

Innn表示圓心位置,值是圓心距離當前位置的X份量;

Jnnn表示圓心位置,值是圓心距離當前位置的Y份量;

Rnnn表示圓形的半徑長度;

Ennn表示E軸(擠出頭步進電機)的移動位置;

Fnnn表示速度,單位是毫米/每分鐘;

根據勾股定理,R2 = I2 + J2。所以,若是提供了圓心位置參數,就不須要提供半徑參數了。反之,若是提供了半徑參數,也能夠根據當前點和目標點計算出圓心位置,就不須要提供I/J參數了。其餘幾個的參數用法,與G0/G1是徹底同樣的。

G2/G3命令面臨的最尷尬的問題,是經常使用的上位機切片器軟件,包括Slic3r以及Cura engine,並不會生成這兩條指令。全部3D模型中的圓弧,在STL文件中已經被轉化爲使用大量小線段擬合而成的曲線。這樣,切片器天然也不會把這些小線段當作圓弧處理。最終的G-code輸出結果,也只會存在G0/G1指令,而不會存在G2/G3指令。固然,據小編所知,若是你使用的是比較小衆的上位機軟件,好比artCAM等,由於這些軟件的輸入並非STL文件,所以它們的輸出G-code是頗有可能出現G2/G3命令的。

若是肯定了你的3D打印機只會接收到G0/G1直線移動命令,那麼咱們徹底能夠在3D打印機固件配置中,定義

#defineARC_SUPPORT 0

這樣,全部與G2/G3指令相關的代碼,就都不會編譯,也不會包含在最終的固件代碼中了。能夠節省一些固件的空間,同時並不會影響任何3D打印機的功能。

還有一個問題留給你們思考:在上位機切片軟件輸出G2/G3命令的狀況下,相比於上位機切片軟件輸出G0/G1命令的狀況,是否3D打印機打印圓形物體時會更圓呢?(答案是不會。)那麼其中的原理是什麼?

G4 暫停移動

這條命令讓擠出機在當前位置中止一段時間。可能的參數包括:

Pnnn表示中止移動的時間,以毫秒爲單位,1000毫秒等於1秒。

Snnn也表示中止移動的時間,以秒爲單位。

所以,G4 P2000命令與G4 S2命令是徹底等價的。

G10/G11 回抽/反回抽

這兩條命令使擠出頭執行一個回抽(G10)或者相反的動做(G11)。所謂回抽,就是讓E軸步進電機反轉一小段。而反回抽則讓E軸步進電機正轉一小段。參數只有一個:

Snnn表示回抽的距離。

S1表示長回抽,S0表示短回抽。

實際上,目前的切片器並不太依賴於G10/G11指令執行回抽動做,而是利用G1 Ennn命令直接命令擠出頭步進電機前進或倒退到某一個位置。所以,與G2/G3命令相似,G10/G11命令基本上是個擺設,除非將來有專門的切片器能夠生成這兩條指令,不然徹底能夠將這兩條指令關閉,節省內存空間。在固件配置中,定義

#defineFEATURE_RETRACTION 0

能夠關閉G10/G11功能,在編譯期去除這段相關的代碼。

G20/G21 設置距離單位

這兩條命令很是簡單,用於設置當前距離單位爲英寸(G20)或者毫米(G21)。沒有參數。

未設置時缺省值是毫米。

G28 歸零

這條命令使3D打印機XYZ軸以及擠出頭E軸歸零。參數包括:

X表示使X軸歸零

Y表示使Y軸歸零

Z表示使Z軸歸零

E表示重置E軸的位置爲0,與XYZ軸不一樣的是,若是使用了E參數,E軸步進電機並不運動,而是將當前的E軸位置直接設置爲0,這樣下面對E軸的運動指令,都會解釋爲相對0點的運動。

若是使用時沒有任何參數,直接使用G28,等價於G28 XYZ命令。這時並不會對E軸進行重置爲0的操做。

XYZ軸歸零的順序,由固件配置HOMEING_ORDER決定,好比定義爲

#defineHOMING_ORDER HOME_ORDER_XYZ

就表明着先歸零X軸,而後是Y軸,最後是Z軸。

T 設置當前擠出頭

對於擁有多個擠出頭的3D打印機來講,須要使用T命令選擇當前工做的擠出頭。這條命令有一個無名參數,參數值直接跟在T後面。例如:

T0表示選擇第一個擠出頭;

T1表示選擇第二個擠出頭;

參數是T命令最特殊的一點。這與其餘全部的G-code命令都不相同。

Z軸高度測試與自動調平

三角洲類型的3D打印機,因爲其打印速度更快,受到不少3D打印用戶的歡迎。與XYZ式3D打印機最大的一個不一樣,在於三角洲類型3D打印機的運動計算更加複雜,很難依賴人工調平達到較好的打印效果。所以,對Z軸的自動高度測試,以及自動調平相關的功能,就顯得更加劇要了。如下G-code命令,是Repetier-firmware對這方面進行支持的一組命令。固然,這些功能並不只限於三角洲類型的3D打印機。若是是包含了Z軸高度測試微動開關的XYZ式3D打印機,也一樣可使用這些功能。

G29 Z軸高度三點測試

這條命令測試打印平面上三個點的Z軸高度,並在串口上輸出結果。參數包括:

Snnn測試結果的處理方式。S1表示更新內存中的Z軸高度值(重置系統會丟失),S2表示更新內存以及EEPROM中的Z軸高度值(重置系統不會丟失)。

無參數時,G29命令表示只從串口上輸出結果,不更新內存或EEPROM中的Z軸高度值。

通常來講,只有使用高位限位開關(也就是說,Z軸的限位開關位於Z軸座標最大處),且在擠出頭上附帶有Z軸高度測試微動開關的機型,適合使用G29命令測試Z軸高度。其餘機械配置的機型,不適合使用G29命令。G29命令由固件配置

#defineFEATURE_Z_PROBE 1

決定是否開啓。若是這個配置項定義爲0,則編譯時會去除對G29命令的支持,節省內存的使用。

命令執行時,打印平面上的三個點,其XY座標由如下固件配置參數決定:

#defineZ_PROBE_X1 -52#defineZ_PROBE_Y1 -30#defineZ_PROBE_X2 52#defineZ_PROBE_Y2 -30#defineZ_PROBE_X3 0#defineZ_PROBE_Y3 60

命令執行的開始和結束,分別會執行一段預約義的G-code。缺省的固件配置定義爲:

#defineZ_PROBE_START_SCRIPT 「G28」#defineZ_PROBE_FINISHED_SCRIPT 「」

能夠看出,在缺省狀態下,開始執行G29時,系統會自動對擠出頭進行復位(G28命令)。結束執行G29時,沒有特殊的動做。

G29命令的Z軸高度測試,一般由一個微動開關控制觸發。這個開關的端口號,由Z_PROBE_PIN單獨指定。

G29命令的輸出,格式爲:

X:0.00Y:0.00Z:200.00E:0.00Z-probe:5.01X:-52.00Y:-30.00Z-probe:13.04X:52.00Y:-30.00Z-probe:12.77X:0.00Y:60.00X:0.00Y:60.00Z:-98.48E:0.00

從以上例子的輸出能夠看出,G29命令一共測試了三個座標點,分別在(-52, -30), (53, 30)以及(0, 60)的位置,造成一個正三角形。三個點的Z軸高度相差比較懸殊,在第一個點正好是5mm的狀況下,後兩個點分別是13.04mm以及12.77mm。第一行和最後一行,是測試開始時以及測試結束時的擠出頭座標位置。

G30 Z軸高度單點測試(單步)

這條命令做爲一個完整Z軸高度測試過程的一步,測試打印平面上一個點的Z軸高度,並在串口上輸出結果。這個完整的Z軸高度測試過程,一般是由3D打印機控制軟件連續發出的,經過參數控制G30的執行狀態。所以在手動工做方式下,G30命令只適合不帶參數運行(等價於G30 P3,見下面的參數說明)。

G30命令的參數包括:

Pnnn表示測試的狀態,P1表示當前這步是整個Z軸高度測試過程的第一步;P2表示當前這步是整個Z軸高度測試過程的最後一步;P3表示當前這步是Z軸高度測試過程的惟一一步,也就是說既是第一步也是最後一步;P0表示當前這步是Z軸高度測試過程當中的中間一步。無參數狀況下,P的缺省值是3。

與G29命令相似,G30命令一樣由固件配置

#defineFEATURE_Z_PROBE 1

決定是否開啓。

G30命令的輸出,與上面的G29輸出格式一致,但只有其中的一行,須要上位機軟件屢次發出G30命令,再綜合處理全部的輸出結果。

G31 輸出Z軸高度測試微動開關狀態

這條命令很是簡單,沒有參數。執行後會輸出當前Z軸高度測試微動開關的當前狀態:

Z-probestate:L

其中L表示微動開關沒有觸發。若是是處於觸發狀態,這裏會輸出H。

G29命令、G30命令、G31命令只進行Z軸的高度測試,並不進行自動調平。有些上位機3D打印機控制軟件,會經過這一組命令配合自動跳屏算法實現(上位機)熱牀自動調平功能。若是但願不經過上位機,只由3D打印機自身完成自動調平功能,須要使用G32命令。

G32 熱牀自動調平

這條命令在G29命令的基礎上,不只測試打印平面上三個點的Z軸高度,並且還會根據測試的結果,對3D打印機的機械參數進行調整,實現熱牀自動調平。G32命令使用的參數與G29命令是一致的:

Snnn測試結果的處理方式。S1表示更新內存中的相關參數值(重置系統會丟失),S2表示更新內存以及EEPROM中的相關參數值(重置系統不會丟失)。

G32命令執行完成時,不只Z軸高度參數發生了改變,並且還會根據3D打印機的硬件配置,對熱牀進行相應的調平處理。

若是熱牀自己是使用步進電機進行高度控制的,那麼程序會自動調整步進電機的位置,使熱牀自動調整爲平整的狀態;若是熱牀自己不能移動(這個應該是更常見的狀況),那麼G32命令會在3D打印機內存中構建一個轉換矩陣(Transformation matrix),讓將來3D打印機所處理的全部三維空間位置,都先通過這個矩陣的變換,保證在Z=0的狀況下,正好與熱牀平面徹底吻合。因爲這裏涉及到高深的計算機圖形學知識,咱們就不詳細介紹了。有修改這方面代碼需求的朋友,能夠直接與小編進行聯繫。

G32命令,由固件配置

#defineFEATURE_AUTOLEVEL 1

決定是否開啓。

G32命令的輸出,格式與G29命令相似:

X:0.00Y:0.00Z:200.00E:0.00Z-probe:5.00X:-52.00Y:-30.00Z-probe:12.97X:52.00Y:-30.00Z-probe:12.76X:0.00Y:60.00Info: 0.99709-0.00319-0.076280.000000.99912-0.41910.076340.0041790.99621Info:AutolevelingenabledX:7.32Y:64.08Z:-95.66E:0.00X:0.00Y:0.00Z:200.00E:0.00

除了與G29命令類似的測量信息以外,G32命令還輸出了計算獲得的自動調平矩陣,而且打開了自動調平功能。須要注意的一點是,G32命令雖然生成了自動調平矩陣,但並沒將其保存在EEPROM中,所以下次開機這個信息將會丟失。能夠配合M320 S1命令,將自動調平矩陣保存在EEPROM中。

M251 將當前Z軸位置保存爲Z軸高度值

這條命令能夠將當前的Z軸位置保存爲Z軸高度值,以使前面的Z軸高度手動/自動測量的結果起做用。一般,M251命令只工做在三角洲機型上,而且應該與G29命令聯合使用(自動測量Z軸高度)。這條命令沒有相關的參數。

當3D打印機打開EEPROM支持時,這條命令還會將Z軸高度值同時保存在EEPROM中。

只有當固件配置定義

#defineZ_HOME_DIR -1

也就是Z軸向正方向歸位,而且定義

#defineMAX_HARDWARE_ENDSTOP_Z true

也就是存在硬件的Z軸高位限位開關時,M251命令纔會在編譯中包含相關的代碼。

一般,只有三角洲類型的3D打印機才能知足這兩個條件限制。

M320/M321 開啓/關閉自動調平

開啓(M320)或者關閉(M321)自動調平功能,使自動調平轉換矩陣起做用或不起做用。命令參數爲

Snnn表示是否保存於EEPROM,沒有S參數或者S0表示不保存於EEPROM,S1表示保存於EEPROM,在關閉自動調平(M321)命令中S3表示將自動調平矩陣清零且保存於EEPROM中;

M320的輸出結果爲:

Info:Autolevelingenabled

表示自動調平已經打開。

M321的輸出結果爲:

Info:Autolevelingdisabled

表示自動調平已經關閉。

M322 清零自動調平轉換矩陣

清零(M322)自動調平轉換矩陣。顯然,清零這個動做的同時自動調平功能也關閉了。命令參數爲

Snnn表示是否保存於EEPROM,S0表示不保存於EEPROM,S1表示保存於EEPROM;

也就是說,

M321 S3

命令等價於

M322 S1

命令,二者都是清零自動調平矩陣,關閉自動調平功能,而且將這個設置保存於EEPROM之中。

以上三條命令,與G32命令相同,由固件配置

#defineFEATURE_AUTOLEVEL 1

決定是否開啓。

M322的輸出結果爲:

Info:Autolevelmatrixreset

表示自動調平轉換矩陣已經被清零。

座標模式與座標位置

G90/G91 設置座標模式

這兩條命令用於設置當前座標模式爲絕對座標模式(G90)或者相對座標模式(G91)。沒有參數。

未設置時缺省值是絕對座標模式。咱們在這篇教程中,全部的例子也都是以絕對座標模式給出的。

在相對座標模式下,每次步進電機XYZE移動以後,當前位置都會重置爲0。對於如下兩條G-code命令

G0 X1

G0 X-1

若是3D打印機當前處於相對座標模式下,那麼X軸步進電機會先向正方向移動一個單位,再向反方向移動一個單位。第二條語句,實際移動距離是1個單位(向X軸反方向)。

而若是3D打印機當前處於絕對座標模式下,那麼X軸步進電機會先移動到X=1的位置處,再移動到X=-1的位置處。第二條語句,實際移動距離是2個單位(向X軸反方向)。

G92 設置位置

設置3D打印機內存中XYZE的位置值。不移動對應的步進電機。參數包括:

Xnnn表示X軸的位置值;

Ynnn表示Y軸的位置值;

Znnn表示Z軸的位置值;

Ennn表示E軸(擠出機步進電機)的位置值;

輔助步進電機

一些3D打印機的機械設計,會在XYZE四個步進電機軸以外,使用更多的輔助步進電機。Repetier-firmware提供了一套輔助步進電機指令,讓用戶(以及上位機軟件)能夠操做這些輔助步進電機。因爲輔助步進電機的用途、參數各異,爲了讓這套指令更加通用,這些指令被設計爲很是簡單的形式。

G201 移動步進電機位置

將步進電機P的位置移動到X位置處。參數包括:

Pnnn表示第P個輔助步進電機;

Xnnn表示這個步進電機的目標位置;

這條命令與G1命令很是相似。

G202 設置當前位置

將X位置設置爲步進電機P的當前位置。不實際移動步進電機。參數包括:

Pnnn表示第P個輔助步進電機;

Xnnn表示這個步進電機的當前位置;

這條命令與G92命令很是相似。

G203 報告當前位置

報告步進電機P的當前位置。參數包括:

Pnnn表示第P個輔助步進電機;

這條命令與M114命令很是相似。

G203 開啓/關閉步進電機

用於開啓/關閉步進電機P。參數包括:

Pnnn表示第P個輔助步進電機;

Snnn表示開閉標誌,S0表示關閉步進電機,S1表示開啓步進電機;

步進電機開啓後,有兩種可能的狀態。一種是「運動」狀態,也就是正在進行正向或反向的旋轉。另外一種是「保持位置」狀態,也就是保持當前的位置不變。雖然步進電機關閉也不會主動移動位置,但「保持位置」狀態與步進電機關閉狀態仍有顯著的區別。「保持位置」狀態下,當步進電機受力時,會產生一個反向的力矩,使步進電機位置保持不變。

這條命令與「節能管理」一節中的M84命令有關。M84命令用於關閉XYZE步進電機,但不能打開這些步進電機。

SD卡管理

M20 列目錄

顯示SD卡全部目錄內容。沒有相關的參數。

M20命令的輸出,格式爲:

Begin filelista.gcodeTEST/TEST/c.gcodeb.gcodeEnd filelist

這個目錄內容清單,說明了這張SD卡上目前有3個文件,分別是a.gcode,b.gcode以及c.gcode,其中,a.gcode和b.gcode都保存於根目錄下,而c.gcode保存於一個名稱爲TEST的文件夾裏面。

M21 加載SD卡

嘗試加載SD卡,也就是執行Mount動做。沒有相關的參數。

M22 卸載SD卡

卸載SD卡,也就是執行Unmount動做。沒有相關的參數。

M23 選擇文件

選擇一個SD卡上的文件。參數爲

filename表示被選擇的文件名(包含目錄名,以/分隔);

文件選擇以後,能夠執行打印、刪除等動做。例如命令

M23 TEST/c.gcode

選定了SD卡TEST文件夾裏面的c.gcode文件做爲當前文件。

同時輸出格式爲:

Fileopened:c.gcodeSize:1127565Fileselected

表示文件已經順利打開。

M24 開始SD卡打印

打印當前選定的SD卡文件。逐行讀入SD卡文件內容G-code代碼,並執行。沒有相關參數。

M25 暫停SD卡打印

暫停當前的SD卡打印。沒有相關參數。

M26 設置當前文件當前位置

設置當前文件的當前位置。參數爲

Snnn表示當前位置的字節數。

M27 獲取SD卡打印進度

獲取SD卡打印進度。沒有相關參數。

M27命令的輸出,格式爲:

SD printingbyte11518/1127578

這條命令供上位機獲取當前的3D打印進度信息,用於顯示在電腦界面上。

M28 寫SD卡文件

寫一個SD卡文件。參數爲:

filename表示待寫入的文件名(包含目錄名,以/分隔);

從執行M28命令開始,全部3D打印機接收到的G-code,除了M29命令之外,都會保存至指定的SD卡文件中,而不會被實際執行。這條命令能夠將一個G-code文件從上位機3D打印控制軟件複製到3D打印機的SD卡上,以供將來執行。

M29 結束寫SD卡文件

結束以M28開始的「保存至SD卡文件」狀態,將3D打印機恢復到正常狀態。今後,全部接收到的G-code命令,都會被直接解釋執行。沒有相關參數。

M30 刪除文件

刪除一個SD卡中的文件。參數爲:

filename表示待刪除的文件名(包含目錄名,以/分隔);

M32 建立子目錄

在SD卡上建立一個子目錄。參數爲:

filename表示待建立的子目錄(包含目錄名,以/分隔);

以上全部SD卡相關指令,都由固件配置

define SDSUPPORT 1

決定是否開啓。若是固件不須要支持SD卡,關閉這項固件配置,能夠節省很多內存空間。

節能管理

M84 設置步進電機自動關閉時間

當3D打印機一段時間沒有接收到步進電機運動指令以後,3D打印機(爲了節能)會自動關閉步進電機。使用M84指令,能夠設置這個自動關閉步進電機的時間。參數包括:

Snnn表示步進電機關閉的時間,以秒爲單位。

若是使用M84時沒有指定S參數,則步進電機會當即關閉。

M84命令的缺省值是360秒。在固件配置中,缺省值由

#defineSTEPPER_INACTIVE_TIME 360L

控制。

M85 設置3D打印機自動關閉時間

當3D打印機一段時間沒有接收到指令以後,3D打印機(爲了節能)會自動關閉步進電機以及擠出頭、熱牀等設備。使用M85指令,能夠設置這個自動關閉3D打印機的時間。參數包括:

Snnn表示在關閉步進電機以前步進電機沒有活動的時間,以秒爲單位。

若是使用M85時沒有指定S參數,或者使用了S0參數,則表明取消3D打印機自動關閉功能,擠出頭、熱牀等在工做完成以後,一直會處於當前狀態,而不會被自動關閉。

M85命令的缺省值是0(不自動關閉)。在固件配置中,缺省值由

#defineMAX_INACTIVE_TIME 0L

控制。

溫度管理

M104 設置擠出頭目標溫度

設置擠出頭的目標溫度。執行這條命令後,不須要等待達到這個溫度,當即開始執行下一條G-code語句。相關參數包括:

Snnn表示目標溫度;

Tnnn表示對應的擠出頭;

P表示要等待前面的指令完成以後,再開始設置擠出頭溫度;

Fnnn表示到達目標溫度以後,是否觸發蜂鳴器。F1表示要觸發;

若是執行命令時沒有帶T參數,則針對當前擠出頭設置目標溫度。

M140 設置熱牀目標溫度

設置熱牀的目標溫度。執行這條命令後,不須要等待達到這個溫度,當即開始執行下一條G-code語句。相關參數包括:

Snnn表示目標溫度;

Fnnn表示到達目標溫度以後,是否觸發蜂鳴器。F1表示要觸發;

M105 獲取當前的溫度

獲取當前溫度值,包括擠出頭和熱牀的溫度。相關參數包括:

X表示輸出AD轉換輸入的原始值;

M105命令的輸出,格式爲:

T:18.97 /0 B:18.75 /0 B@:0 @:0

能夠看到,T:以後的部分,表明擠出頭的當前溫度/目標溫度;B:以後的部分表明熱牀的當前溫度/目標溫度。

在PID溫度控制模式下,B@:後面的數字表明熱牀當前的輸出強度,是一個0255的值,@:後面的數字,表明擠出頭當前的輸出強度,也是一個0255的值。例子中,擠出頭、熱牀都處於關閉狀態,因此這個位置的值都是0。

M109 等待擠出頭加熱達到目標溫度

設置擠出頭的目標溫度,並等待達到這個溫度。相關參數包括:

Snnn表示目標溫度;

Tnnn表示對應的擠出頭;

Fnnn表示到達目標溫度以後,是否觸發蜂鳴器。F1表示要觸發;

若是執行命令時沒有帶T參數,則針對當前擠出頭設置目標溫度。

M190 等待熱牀加熱達到目標溫度

設置熱牀的目標溫度,並等待達到這個溫度。相關參數包括:

Snnn表示目標溫度;

Fnnn表示到達目標溫度以後,是否觸發蜂鳴器。F1表示要觸發;

M116 等待溫度達到目標溫度

等待全部擠出頭/熱牀到達由以前的M104/M140指令所指定的目標溫度。沒有相關參數。

其餘經常使用指令

M92 設置分辨率

設置3D打印機內存中XYZE步進電機的分辨率。參數包括:

Xnnn表示X軸的分辨率;

Ynnn表示Y軸的分辨率;

Znnn表示Z軸的分辨率;

Ennn表示E軸(擠出機步進電機)的分辨率;

M106/M107 打開/關閉風扇

這兩條命令用於打開(M106)或關閉(M107)風扇。相關的參數包括:

Snnn表示打開風扇時風扇的轉速,取值範圍在0~255之間;

P表示要等待前面的指令完成以後,再開始調整風扇轉速;

在固件配置中,定義

#defineFEATURE_FAN_CONTROL 1

表示支持風扇控制功能,在編譯中會包含相關的代碼。

M114 輸出當前位置

輸出擠出頭當前位置。沒有相關的參數。

M114命令的輸出,格式爲:

X:20.00Y:30.00Z:10.000E:0.0000

M115 輸出3D打印機信息

輸出3D打印機信息。沒有相關的參數。

M115命令的輸出,格式爲:

FIRMWARE_NAME:Repetier_0.92.3FIRMWARE_URL:…Printedfilament:0.00mPrintingtime:0days0hours0minSpeedMultiply:100FlowMultiply:100

第一行是固件的版本信息,很長,我沒有列完整。第二行是已經打印了多少米耗材,打印時間是幾天幾小時幾分鐘。第三行是速度係數,參考M220命令。第四行是流率係數,參考M221命令。

M119 輸出限位開關狀態

將當前限位開關狀態輸出。沒有相關的參數。

M119命令的輸出,格式爲:

endstopshit:x_min:Ly_min:Lz_min:L

列出了XYZ三個軸的低位限位開關的當前狀態。L表明限位開關沒有觸發。H表明限位開關被觸發了。

M201/M202 設置最大加速度

這兩條命令設置打印加速度。包括擠出頭工做時(打印中)的運動加速度(M201),以及擠出頭不工做時(移動中)的運動加速度(M202)。參數爲

Xnnn表示X軸的加速度;

Ynnn表示Y軸的加速度;

Znnn表示Z軸的加速度;

Ennn表示E軸的加速度;

在固件配置中,定義

#defineRAMP_ACCELERATION 1

表示支持加速度功能,在編譯中會包含相關的代碼。

M203 監控溫度

使用串口輸出監控3D打印機的溫度。參數爲

Snnn表示是否監控,S0關閉監控,S1打開監控;

當監控處於打開狀態,能夠從串口定時獲取當前的溫度信息。

監控輸出格式與M105命令的輸出結果徹底一致。

M204 設置PID參數

設置擠出頭溫度控制的PID參數,命令參數爲

Snnn表示對應的擠出頭,無S參數表示使用當前擠出頭;

Xnnn表示P參數;

Ynnn表示I參數;

Znnn表示D參數;

M207 修改抖動(Jerk)值

修改當前的最大抖動值。命令參數爲

Xnnn表示XY軸的最大抖動值;

Znnn表示Z軸的最大抖動值;

Ennn表示E軸的最大抖動值;

XY軸抖動指的是3D打印機同時在X軸和Y軸上移動時,產生的和速度最大值。好比,3D打印機加熱頭正在向X軸正方向全速移動,下一條指令變爲向Y軸正方向移動。若是同時在X軸和Y軸上改變速度,那麼實際產生的速度是X方向的速度和Y方向的速度的向量和,這個比較大的速度變化值,會對3D打印機的機械部件產生不利的影響,並且會形成比較大的噪音。這裏的設置,就限制了這個XY軸上和速度的最大值。固然這個值也不能設置的過小,過小的話,首先打印速度會變得很慢,並且打印會產生更多的瑕疵。

Z軸抖動與XY軸抖動意義相似,不一樣點是Z-Jerk是Z軸方向不爲0的抖動速度值。由於這項涉及到Z軸的運動,所以最大速度就低多了。

M207命令的輸出,格式爲:

Jerk:20.00ZJerk:0.30

這個輸出意義很簡單,表示XY軸抖動速度爲20mm/s,Z軸抖動速度爲0.3mm/s。

M220 設置速度

設置3D打印機運行速度係數。命令參數爲

Snnn表示係數,是一個百分數,若是S參數不存在,則使用缺省值100;

3D打印機運行速度係數,是一個在25%到500%範圍內變化的值。這個係數值在3D打印機運行過程當中,與切片器給出的3D打印機運動速度基礎值相乘,獲得最終的3D打印機實際運動速度值。

M220命令的輸出,格式爲:

SpeedMultiply:100

M221 設置流率

設置3D打印機的流率係數(Flow rate)。命令參數爲

Snnn表示係數,是一個百分數,若是S參數不存在,則使用缺省值100;

3D打印機流率係數,是在上位機切片軟件經過耗材直徑、噴頭直徑、層高以及3D打印速度等因素綜合計算獲得的E軸運動速度的基礎上,疊加的一個E軸運動速度係數。簡單地說,就是控制擠出頭耗材擠出量的多少。這個係數能夠在25%到500%範圍內變化。

M221命令的輸出,格式爲:

FlowMultiply:100

M302 設置是否容許冷擠出

爲了保護3D打印機的擠出頭,一般設置下,E軸的運動必須在擠出頭加熱到必定溫度以後才被容許。在擠出頭冷卻的狀況下,全部的E軸運動命令是被3D打印機固件忽略的。但有些狀況下咱們須要在擠出頭冷卻的狀況下運動E軸,這時能夠經過M302命令進行設置。命令參數爲

Snnn表示是否容許冷擠出,S0表示不容許,S1表示容許,沒有S參數缺省表示容許;

M302命令的輸出,爲當前是否容許冷擠出。容許時會輸出:

Cold extrusion allowed

不容許時會輸出:

Code extrusion disallowed

較不經常使用指令

這些指令實在沒法歸類了,只能以「較不經常使用指令」爲名字,放在了一塊兒。

M42直接讀寫端口

此命令直接讀/寫一個Arduino端口,爲3D打印控制軟件上位機擴展程序功能提供基礎。參數包括:

Pnnn表示Arduino的輸入/輸出端口;輸出時固件程序會同時輸出到數字端口和模擬端口;輸入時固件程序會從數字端口輸入;

Snnn表示寫入輸出端口的值,0到255之間是合法的數字;當S參數不存在的時候,M42指令起輸入做用;

Repetier-firmware固件中預先定義了一個表格,稱爲「敏感端口表格」,全部位於這個表格內的端口,也就是當前已經被步進電機、限位開關以及熱敏電阻佔用的端口,都不能被M42命令影響。其餘當前未佔用的端口,能夠由這條命令進行IO操做。

M82/M83 設置擠出頭步進電機座標模式

與G90/G91命令相似,這兩條命令用於設置擠出頭當前座標模式爲絕對座標模式(M82)或者相對座標模式(M83)。沒有參數。

未設置時缺省值是絕對座標模式。

須要注意的是,G90/G91設置的座標模式,同時對XYZE四個軸起做用,但M82/M83設置的座標模式,只對E軸(擠出頭步進電機)起做用。

M99 暫時關閉步進電機

M99命令能夠暫時關閉XYZ軸步進電機一段時間。命令參數包括:

Snnn表示所需暫時關閉步進電機的時間,以秒爲單位;

X表示暫時關閉X軸步進電機;

Y表示暫時關閉Y軸步進電機;

Z表示暫時關閉Z軸步進電機;

若是S參數沒有指定,則暫時關閉10秒鐘時間。暫時關閉時間到達以後,從新打開相應軸的步進電機。

M111 容許/禁止運行時調試標誌

運行時調試標誌是一組布爾值,一共有6個不一樣的標誌,使用位域(Bit Field)的表示方式。用戶能夠利用M111指令修改這些標誌的值。相關參數包括:

Snnn表示直接將調試標誌設置爲S值;

Pnnn表示以位操做的方式,將P值與當前調試標誌作某種操做。若是P值是正數,則進行按位或操做(增長P參數所帶的標誌位);若是P值是負數,則忽略P的符號,進行取反後按位與操做(去除P參數所帶的標誌位);

調試標誌的位域,由如下6個布爾值組成:

第1位,值爲1,表示是否回顯(Echo)由上位機發送至下位機的命令;

第2位,值爲2,表示是否輸出信息(Info),實際在固件代碼中並未使用;

第3位,值爲4,表示是否輸出錯誤(Error),在固件出錯時會將出錯信息發送回上位機;

第4位,值爲8,表示是否進入模擬執行模式(Dry run),在模擬執行模式下,3D打印機不實際執行上位機發送的命令,只修改3D打印機的內存狀態;

第5位,值爲16,表示是否進入調試通信模式(Communication),實際在固件代碼中彷佛並未使用;

第6位,值爲32,表示是否進入禁止移動模式(No Move),在這個模式下,全部對步進電機的移動命令,都會被忽略;

M117 發送消息至LCD屏幕

將一條詳細發送至LCD屏幕,顯示爲當前狀態信息。參數爲

message表示待顯示在LCD屏幕上的文本;

M120 測試蜂鳴器

使蜂鳴器發出蜂鳴聲。參數爲

Snnn表示發出聲音/不發出聲音的時間,以毫秒爲單位;

Pnnn表示重複的次數;

若是3D打印機有蜂鳴器,並且是無源蜂鳴器,那麼經過S參數和P參數的組合,能夠獲得不一樣頻率的聲音。好比

M120 S24 P8

能夠獲得一個較長的蜂鳴聲。若是3D打印機的蜂鳴器是有源蜂鳴器,那麼M120指令只能控制蜂鳴時間,不能控制蜂鳴器的聲音頻率。

M200 設置體積擠出模式

將3D打印機設置爲「體積擠出模式」,同時設定擠出頭直徑參數。相關參數包括

Tnnn表示對應的擠出頭,無T參數表示使用當前擠出頭;

Dnnn表示擠出頭的實際直徑,無D參數表示關閉體積擠出模式;

體積擠出模式,是相對於缺省的「長度擠出模式」而言的另外一種擠出模式。在常見的「長度擠出模式」下,G-code中的使E軸運動的G0/G1命令,其參數都是以長度單位mm做爲單位的。這樣確實比較簡單,但問題是咱們在切片的時候,就必須知道要使用的噴頭直徑,不然沒法計算出耗材前進的實際長度。

爲了使G-code在生成以後適用於多種不一樣噴頭直徑的3D打印機機型,咱們能夠在上位機切片時,將E軸參數變爲以體積單位mm3做爲單位,而後在下位機固件中,再設定正在使用的噴頭直徑,以達到最終正確輸出的目的。爲了以體積單位mm3做爲E軸的參數單位,上位機須要將噴頭直徑設定爲1.128mm(這樣,耗材每前進1mm,會噴出1mmπ(1.128mm/2)2約等於1mm3的耗材。)同時,下位機要使用下面的語句:

M200T0D0.4

將實際的擠出頭噴頭直徑設置爲0.4mm。同時在上位機和下位機進行這樣的操做以後,3D打印機能夠在E軸參數單位爲mm3的狀況下,正確完成打印操做。

M209 開啓/關閉自動回抽

開啓/關閉自動回抽功能。命令參數爲

Snnn表示是否開啓自動回抽功能,1表示開啓,0表示關閉;

一般上位機切片器負責在合適的位置處加入回抽指令。若是你的切片器功能比較弱,不能加入合適的回抽指令,那麼能夠打開這個特性,由固件自動回抽。

在固件配置中,定義

#defineFEATURE_RETRACTION 1

表示支持自動回抽功能,在編譯中會包含相關的代碼。

M280 多頭重複打印模式設置

有些特殊配置的3D打印機,容許2~4個擠出頭同時工做,而且這些擠出頭動做徹底一致,同時打印出多件徹底同樣的打印件,這種工做模式叫作多頭重複打印模式(Ditto mode)。M280命令對這個模式進行設置。命令參數爲

Snnn表示這個模式下的擠出頭個數;S0表示關閉多頭重複打印模式;S1S3表示工做在多頭重複打印模式下,而且3D打印機擁有額外的13個擠出頭。

在固件配置中,定義

#defineFEATURE_DITTO_PRINTING 1

表示支持多頭重複打印模式功能,在編譯中會包含相關的代碼。

M281 測試硬件看門狗功能

這條命令用於測試CPU硬件中的看門狗功能。實際上,就是形成一個死循環,再也不執行「喂狗」動做,從而觸發CPU硬件看門狗,最終(故意地)形成3D打印機重啓。這條命令只是用於3D打印機固件開發測試。

M303 自動測試PID參數

自動測試PID參數值。命令參數爲

Pnnn表示待測試的擠出頭編號,從0開始,P<擠出頭個數>表明待測試的是熱牀;

Snnn表示打印溫度;

Rnnn表明重複測試次數;

X表明是否保存於EEPROM中;

因爲加熱、散熱須要較多時間,這條命令執行時間很長。

M330 測試蜂鳴器

測試(無源)蜂鳴器,產生一個特定頻率的聲音。命令參數爲

Snnn表示聲音的頻率;

Pnnn表示聲音持續的時間,以毫秒爲單位;

若是命令沒有包含S參數或者P參數,則會使用缺省值S1以及P1000。

保存與恢復當前位置

M400 等待當前全部移動指令完成

等待在3D打印機內存中待處理的移動命令執行完成。沒有相關的參數。

執行這條語句以後,能夠保證在下一條G-code命令執行時,全部步進電機都不處於運動狀態中。

M401 保存當前的位置

將當前位置,包括XYZE步進電機,保存於內存的一組專用變量中。將來能夠用M402命令恢復這組位置。沒有相關的參數。

M402 恢復以前保存的位置

恢復以前由M401命令保存的位置值。命令參數爲

X表示恢復X位置;

Y表示恢復Y位置;

Z表示恢復Z位置;

E表示恢復E位置;

Fnnn表示使用參數給定的速度,無F參數時使用當前速度值;

暫停與更換耗材

M600 更換耗材

在擁有顯示屏的3D打印機上,啓動更換耗材嚮導界面。沒有相關的參數。

一般,這個嚮導界面是從顯示屏界面上觸發的。M600命令提供一個接口,使更換耗材嚮導界面能夠從上位機軟件觸發。

M601 暫停/恢復擠出頭

暫停或者恢復擠出頭。命令參數爲

Snnn表示暫停或者恢復,S1表示暫停擠出頭,S0表示恢復擠出頭工做;

暫停擠出頭包括中止擠出頭加溫以及中止擠出頭步進電機工做。恢復則相反,加熱擠出頭到原來的溫度。

設置與EEPROM管理

固件的設置,是一個比較有趣的話題,不少玩3D打印機的朋友,在遇到設置相關的問題時都會犯迷糊。實際上,對於某一項特定的設置,好比說X軸的步進電機分辨率,在3D打印機主板上,有三個不一樣的位置(也是三種不一樣的存儲器)保存了這項內容,而它們的值還有可能不一樣。讓咱們先來了解一下這些保存設置內容的位置,以方便你們的理解。

首先,是固件配置文件(configuration.h)中的設置值。配置文件中的值,會跟隨固件一塊兒編譯,以後在刷機過程當中,保存在了3D打印機的靜態存儲區(Flash ROM)中。除了刷機以外,靜態存儲區的內容不會發生變更,能夠認爲是隻讀的。每次開機的時候,都是同樣的值在等待着咱們。

第二份設置值,保存在電可擦寫靜態存儲區(EEPROM)。EEPROM的讀寫代價,比靜態存儲區要小。所以,3D打印機容許在刷機以後,修改設置值,而這些修改以後的設置值,就存儲在EEPROM之中。每次開機,程序會先檢查EEPROM,若是EEPROM中是空白的,則將靜態存儲區的第一份設置值複製到EEPROM之中。而若是EEPROM中已經有保存好的設置值,則程序會直接使用EEPROM中的值。有些朋友在玩3D打印機過程當中可能會有這樣的經驗,就是明明修改了固件配置文件中的設置值,但刷機以後居然沒有發生變化。這種狀況,每每就是EEPROM在搗鬼了。咱們徹底可使用G-code M502 M500兩條指令(指令的具體含義能夠參考下面),重寫EEPROM,解決這樣的問題。

第三份設置,保存在內存(RAM)中。實際用戶使用的值,就是內存中的值。因爲內存只在加電狀況下可以保持其中的內容,所以每次開機時,3D打印機會根據上面描述的邏輯,重建內存中的設置值。若是某條指令修改的是內存中的設置值,那麼這也表明着此次修改是一個臨時修改,下次開機這個值就會消失了。

總的來講,三份固件設置,使用的優先級是

內存 > EEPROM > 配置文件

但設置的持久性,就要反過來了。明確瞭解了這些,特別有助於咱們解決一些與設置相關的問題,天然,看下面這些命令描述的時候,也就不會迷糊了。

M205 輸出EEPROM設置

輸出EEPROM的當前設置值表格。沒有相關的參數。

M205命令的輸出,格式爲:

EPR:275 115200BaudrateEPR:3129 0.000Filamentprinted[m]EPR:2125 0Printeractive[s]…

這是一個很長的輸出,咱們這裏只截取了前三行。每行中,EPR:後面的第一個數字,是這個設置項值的類型。0表明8bit整數類型,1表明16bit整數類型,2表明32bit整數類型,3表明32bit浮點類型。第二個數字,是設置項值的位置(即EEPROM中的地址)。第三個數字,是設置項的值。最後,是設置項的意義。

以第一行爲例,第一行設置的是通信波特率(Baudrate),當前值是115200。波特率設置項,在EEPROM中的位置(地址)是75,這個值是一個32bit整數類型,所以佔據了從位置75開始的連續4個字節(也就是位置75, 76, 77, 78)。

M206 修改EEPROM設置

修改EEPROM中的某個值。命令參數爲

Pnnn表示待修改的值的位置(即EEPROM中的地址);

Tnnn表示值的類型,0表明8bit整數類型,1表明16bit整數類型,2表明32bit整數類型,3表明32bit浮點類型;

Snnn表示值,只能帶整數,用於T爲0, 1, 2的狀況;

Xnnn表示值,只能帶浮點數,用於T爲3的狀況;

能夠看出,M206指令的使用是很複雜的,須要瞭解EEPROM中數值的存儲位置以及數值類型,才能進行有效的修改。所以小編建議除非你徹底理解M206指令的含義,不然不要使用這個指令。

M360 輸出固件配置信息

輸出固件配置信息。沒有相關參數。

M360命令的輸出,格式爲:

Config:Baudrate:115200Config:InputBuffer:127Config:NumExtruder:1…

這是一個很長的輸出,咱們這裏只截取了前三行。每行中,都有一項配置信息的名稱,以及對應的值。

M500 保存內存中的設置值到EEPROM

將3D打印機內存中的設置值保存到EEPROM中。沒有相關的參數。

M501 讀取EEPROM的設置值到內存

將EEPROM中的設置值讀取到3D打印機內存中。沒有相關的參數。

M502 將內存中的設置值重置

將內存中的設置值重置爲固件配置(configuration.h)中的值。沒有相關的參數。

因爲每次系統掉電後,內存中的值都會消失,從新啓動時從EEPROM中讀取,所以單獨使用M502命令將只對3D打印機掉電重啓以前起做用。若是想起長期做用,須要配合M500,將設置值保存到EEPROM中。

步進電機參考電壓調節

目前市面上支持軟件設置步進電機參考電壓的3D打印機主板不多。大部分3D打印機主板只能經過調整微調電位器來控制步進電機參考電壓。在這些3D打印機上,這一組命令是無效的。

M907 設置步進電機參考電壓(百分比值)

設置步進電機參考電壓。命令參數爲

Snnn表示對全部步進電機進行統一設置;

Xnnn表示對X軸步進電機進行設置;

Ynnn表示對Y軸步進電機進行設置;

Znnn表示對Z軸步進電機進行設置;

Ennn表示對E軸步進電機進行設置;

全部的參數值,都是一個0~100之間的百分比數值。

M908 設置步進電機參考電壓

與M907命令相似,設置步進電機參考電壓。命令參數爲

Pnnn表示步進電機編號;

Snnn表示步進電機參考電壓設置值,要求爲0~255之間的一個數值;

這個命令與M907命令相似,一樣要求3D打印機主板支持。在不支持軟件調整參考電壓的3D打印機主板上,M908命令無效。

M909 輸出步進電機參考電壓值

輸出當前的步進電機參考電壓值。沒有相關的參數。

M910 將步進電機參考電壓值保存至EEPROM

將M907/M908命令設置的步進電機參考電壓值保存至EEPROM。沒有相關的參數。

須要輔助硬件支持的指令

M80/M81 打開/關閉ATX電源

在配置了ATX電源的3D打印機上,打開(M80)或者關閉(M81)ATX電源。沒有相關的參數。

M340 伺服電機控制

伺服電機控制功能。命令參數爲

Pnnn表示伺服電機編號,從0開始,最大爲3,能夠控制4個伺服電機;

Snnn爲控制時間,單位爲毫秒,應該是一個500到2500之間的數值;

Rnnn爲自動關閉時間,單位爲毫秒;

M350 設置步進電機細分數

在支持細分數設置的3D打印機主板上(這類主板不多見),設置步進電機細分數。命令參數爲

Snnn表示將細分數的每一位(bit)都設置爲相同的值,S0表示全部都設置爲0,S1表示全部都設置爲1;

Xnnn表示設置細分數第0位;

Ynnn表示設置細分數第1位;

Znnn表示設置細分數第2位;

Ennn表示設置細分數第3位;

Pnnn表示設置細分數第4位;

須要注意的是,在大多數3D打印機主板上,細分數設置是主板硬件設計時就固定的,不能經過軟件調整。這種狀況下,M350命令無效。

M355 設置照明燈開關

設置照明燈的開關。命令參數爲

Snnn表示照明燈的開關狀態,S0表示關閉照明燈,S1表示打開照明燈;

無參數時輸出當前照明燈的狀態。

在固件配置中,定義

#defineCASE_LIGHTS_PIN -1

表示照明燈的電路硬件鏈接pin值,-1表明照明燈未鏈接。

M355命令的輸出,爲當前是否打開了照明燈。打開時會輸出:

Caselights on

關閉時會輸出:

Caselights off

做者:修行小李 連接:https://www.jianshu.com/p/f8a328457a45 來源:簡書 簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。
相關文章
相關標籤/搜索