ndfweb.cn

[轉載]3D打印機G-Code語言詳解


2018-06-04 21:22:33 (22148)




原帖:https://www.jianshu.com/p/b8ed58dbecff

玩過一段時間3D打印機的朋友,都會接觸到G-code文件。所謂G-code文件, 指的是3D模型在進入3D打印機實際打印之前,必須要經過切片器處理而成的一種中間格式文件。這種中間格式文件的內容,實際上每一行都是3D打印機固件所能理解的命令。而這些命令,也被稱為G-code命令,是3D打印機和電腦之間最重要的命令交互界麵。

既然所有3D打印機都使用G-code作為對外聯係的唯一信息交互方式,那麼這種“語言”的標準就很重要了。不幸的是,雖然所有的3D打印機,都使用G-code作為與計算機的交互語言,但實際上每種3D打印機“說出”的G-code,都多多少少有些不同。這也可以說,每種3D打印機都有自己的“方言”。我們要研究G-code,就要從一種最常見的“方言”,也可以說是“普通話”開始,先了解一種,然後再學習其他類似的語言,相互對比,就很容易了。

基礎運動

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

G0/G1 直線移動

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

G0 Xnnn Ynnn Znnn Ennn Fnnn Snnn

或者

G1 Xnnn Ynnn Znnn Ennn Fnnn Snnn

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

  • Xnnn表示X軸的移動位置;
  • Ynnn表示Y軸的移動位置;
  • Znnn表示Z軸的移動位置;
  • Ennn表示E軸(擠出頭步進電機)的移動位置;
  • Fnnn表示速度,單位是毫米/每分鍾;
  • Snnn表示是否檢查限位開關,S0不檢查,S1檢查,缺省值是S0;

舉例來說,

G1 F1500 G1 X50 Y25.3 E22.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代碼?)

再舉一例,

G1 F1500 G1 X50 Y25.3 E22.4 F3000 

這個例子與上麵的例子非常類似,唯一的區別,就是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打印機固件配置中,定義

#define ARC_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命令基本上是個擺設,除非未來有專門的切片器可以生成這兩條指令,否則完全可以將這兩條指令關閉,節省內存空間。在固件配置中,定義

#define FEATURE_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決定,比如定義為

#define HOMING_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命令由固件配置

#define FEATURE_Z_PROBE 1 

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

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

#define Z_PROBE_X1 -52 #define Z_PROBE_Y1 -30 #define Z_PROBE_X2 52 #define Z_PROBE_Y2 -30 #define Z_PROBE_X3 0 #define Z_PROBE_Y3 60 

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

#define Z_PROBE_START_SCRIPT “G28” #define Z_PROBE_FINISHED_SCRIPT “” 

可以看出,在缺省狀態下,開始執行G29時,係統會自動對擠出頭進行複位(G28命令)。結束執行G29時,沒有特殊的動作。

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

G29命令的輸出,格式為:

X:0.00 Y:0.00 Z:200.00 E:0.00 Z-probe:5.01 X:-52.00 Y:-30.00 Z-probe:13.04 X:52.00 Y:-30.00 Z-probe:12.77 X:0.00 Y:60.00 X:0.00 Y:60.00 Z:-98.48 E: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命令同樣由固件配置

#define FEATURE_Z_PROBE 1 

決定是否開啟。

G30命令的輸出,與上麵的G29輸出格式一致,但隻有其中的一行,需要上位機軟件多次發出G30命令,再綜合處理所有的輸出結果。

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

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

Z-probe state: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命令,由固件配置

#define FEATURE_AUTOLEVEL 1 

決定是否開啟。

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

X:0.00 Y:0.00 Z:200.00 E:0.00 Z-probe:5.00 X:-52.00 Y:-30.00 Z-probe:12.97 X:52.00 Y:-30.00 Z-probe:12.76 X:0.00 Y:60.00 Info: 0.99709 -0.00319 -0.07628 0.00000 0.99912 -0.4191 0.07634 0.004179 0.99621 Info: Autoleveling enabled X:7.32 Y:64.08 Z:-95.66 E:0.00 X:0.00 Y:0.00 Z:200.00 E:0.00 

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

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

這條命令可以將當前的Z軸位置保存為Z軸高度值,以使前麵的Z軸高度手動/自動測量的結果起作用。通常,M251命令隻工作在三角洲機型上,並且應該與G29命令聯合使用(自動測量Z軸高度)。這條命令沒有相關的參數。

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

隻有當固件配置定義

#define Z_HOME_DIR -1 

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

#define MAX_HARDWARE_ENDSTOP_Z true 

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

通常,隻有三角洲類型的3D打印機才能滿足這兩個條件限製。

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

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

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

M320的輸出結果為:

Info:Autoleveling enabled 

表示自動調平已經打開。

M321的輸出結果為:

Info:Autoleveling disabled 

表示自動調平已經關閉。

M322 清零自動調平轉換矩陣

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

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

也就是說,

M321 S3

命令等價於

M322 S1

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

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

#define FEATURE_AUTOLEVEL 1 

決定是否開啟。

M322的輸出結果為:

Info:Autolevel matrix reset 

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

第三節,坐標模式與坐標位置

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 file list a.gcode

TEST/

TEST/c.gcode

b.gcode

End file list 

這個目錄內容清單,說明了這張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文件作為當前文件。

同時輸出格式為:

File opened:c.gcode Size:1127565 File selected 

表示文件已經順利打開。

M24 開始SD卡打印

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

M25 暫停SD卡打印

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

M26 設置當前文件當前位置

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

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

M27 獲取SD卡打印進度

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

M27命令的輸出,格式為:

SD printing byte 11518/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秒。在固件配置中,缺省值由

#define STEPPER_INACTIVE_TIME 360L 

控製。

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

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

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

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

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

#define MAX_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表示要等待前麵的指令完成之後,再開始調整風扇轉速;

在固件配置中,定義

#define FEATURE_FAN_CONTROL 1 

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

M114 輸出當前位置

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

M114命令的輸出,格式為:

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

M115 輸出3D打印機信息

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

M115命令的輸出,格式為:

FIRMWARE_NAME:Repetier_0.92.3 FIRMWARE_URL:… Printed filament:0.00m Printing time:0 days 0 hours 0 min SpeedMultiply:100 FlowMultiply:100 

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

M119 輸出限位開關狀態

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

M119命令的輸出,格式為:

endstops hit: x_min:L y_min:L z_min:L 

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

M201/M202 設置最大加速度

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

  • Xnnn表示X軸的加速度;
  • Ynnn表示Y軸的加速度;
  • Znnn表示Z軸的加速度;
  • Ennn表示E軸的加速度;

在固件配置中,定義

#define RAMP_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.00 ZJerk: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的耗材。)同時,下位機要使用下麵的語句:

M200 T0 D0.4 

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

M209 開啟/關閉自動回抽

開啟/關閉自動回抽功能。命令參數為

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

通常上位機切片器負責在合適的位置處加入回抽指令。如果你的切片器功能比較弱,不能加入合適的回抽指令,那麼可以打開這個特性,由固件自動回抽。

在固件配置中,定義

#define FEATURE_RETRACTION 1 

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

M280 多頭重複打印模式設置

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

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

在固件配置中,定義

#define FEATURE_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:2 75 115200 Baudrate EPR:3 129 0.000 Filament printed [m] EPR:2 125 0 Printer active [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:115200 Config:InputBuffer:127 Config: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表示打開照明燈;

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

在固件配置中,定義

#define CASE_LIGHTS_PIN -1 

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

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

Case lights on

關閉時會輸出:

Case lights off




本文版权:http://www.ndfweb.cn/news-717.html
  NDF俱乐部
  国际域名注册
  建站咨询
简体中文 NDF网站建设淘宝店 | ICO图标在线生成 | 外贸网站建设 | 联系我们
©2007-2024 NDF Corporation 鲁ICP备08005967号 Sitemap - RSSRSS订阅