目录
目前看了很多资料,感觉都解释得不够细节,很多还是直接复制粘贴的,所以特别写一篇关于3D打印Gcode文件中常用命令的详细解释。Gcode的命令很简单,但是前提是需要有清晰的说明。
Gcode文件是用来命令3D打印工作的,你想要将电脑里的三维模型用3D打印机打印出来,首先需要将模型(常见.stl和.obj格式)输入到切片软件中(例如Cura)进行平面切片,再生成Gcode文件。将Gcode文件交给3D打印机读取,打印喷头才会按照规划好的路径来填充每一层,再逐层堆叠最后成型。
因此Gcode文件的内容就是控制3D打印机的命令,Gcode文件内是一行对应一条控制命令,按从上到下的顺序逐行执行命令。因此如果你是开发切片软件的开发人员,切片算法的研究人员或者3D打印机的制造商,了解Gcode的命令是非常重要的。但是关于Gcode命令又很少能找到很清晰的介绍,大多数还是停留在G1命令是做什么的,不说清楚各项数据,用什么单位。(Gcode文件可以使用记事本直接打开浏览)
; comment
如果在Gcode文件里看到一句话或者一行的开头有个“;"符号,代表是注释,注释后面随便写什么都行,打印机都不会讲其内容作为命令执行。
评价:注释通常可以用来写备注,写打印模型的信息介绍等。
G28
在Gcode文件开头或结尾常看到一行G28,这是复位命令,后面不带任何字段参数,用来告诉打印机将所有轴(通常是控制喷嘴移动的X、Y和Z轴)复位,也就是会控制轴往远端移动,直至碰到尽头的止动件为止。
也可以加上参数,表示仅控制指定的轴复位
G28 X Y ;只控制X轴和Y轴复位
G28 Z ;只控制Z轴复位
评价:G28命令通常用在Gcode文件开头(初始化喷嘴位置)和Gcode文件末尾(移走喷头方便取走打印件)。
G90
G91
命令打印机当前使用绝对坐标系还是使用相对坐标系。G90命令打印机使用绝对坐标系,G91命令打印机使用相对坐标系,后面不带字段参数。
绝对坐标系:移动命令将告诉打印机移动到精确的XYZ坐标点。
相对坐标系:移动命令将告诉打印机从当前位置移动到多远(从当前位置出发的位置)
G90
G1 X10 Y10 ;移动到打印平台坐标为X=10 Y=10的坐标位置
G91
G1 X10 ;移动到当前位置的X方向10mm的位置
评价:Gcode文件通常使用G90绝对坐标系多一点,更方便定位。如果你只想喷嘴在当前位置进行已知距离的偏移,那可以设置使用G91相对位置。
M82
M83
这个命令与G90和G91类似,不过是用来命令挤出丝材的模式。M82命令使用绝对挤出模式,M83命令相对挤出模式。
绝对挤出模式:计算一共挤出多少丝材,最开始为0,然后挤出多少都会累加。
相对挤出模式:从当前位置再挤出多少丝材,当前位置为0。
评价:绝对挤出模式更常用多一点。
G1 F200 X10 Y10 Z10 E20
G1命令是最重要的命令,占Gcode文件的绝大部分内容。G1是用来命令打印机运动的,包括喷嘴和挤丝。如上G1命令后跟着几个字段参数,分别是F喷嘴移动速度,XYZ是目标点坐标,E是挤丝量。下面详细介绍这个几个参数:
G1 X10 Y10
G1 F600 Z100
G1 X10 E2
G1 F200 X2 E1 ;G1命令后面的字段参数可以自由组合,打印机读到哪个参数就会进行对应运动
评价:除了G1命令,还有一个G0命令,实际上在运动上两个命令的作用是相似的。但是3D打印机一般用G1命令来控制,不会用G0,所以认准G1吧。之前找的很多资料,都不谈F值和E值是什么单位,也不谈E值怎么计算,具体对应哪个量,所以这里加上详细补充。
G92 E0
G92是重新声明当前位置是什么数值。相当于偏移数值,常用来覆盖当前丝材E值位置,使得后续的值都与当前新设置的值相关。G92后面需要声明具体哪些轴以及位置参数,可以是单个轴也可以是多个轴。
评价:常在每一层的开始或在启动或撤回命令之前执行此操作。
M104 S150
或
M109 S150
熔融沉积型3D打印方法通常需要加热喷嘴对输入丝材的进行融化后才能挤丝。所以M104和M109要用在Gcode文件的开头,用在开始给E值之前。M104是不等待喷嘴加热到给定温度,读完命令后就可以开始运动,实现边运动边加热。而M109是需要等待喷嘴加热到给定温度后才开始执行下一条命令。命令后面需要设定温度参数S,单位是摄氏度,具体要设置多少温度是由打印的丝材决定的。另外如果是多喷头打印机,后面还可以设置参数T指定是对哪个喷嘴加热。如果是双喷头一般T0是指右边喷嘴,T1指左边喷嘴,这个由设备决定。
M104 S190 T0 ;开始将T0加热到190摄氏度
M109 S150 ;等待喷嘴加热到150摄氏度
评价:一般Gcode文件会用M109命令,即等待加热到给定温度,因为打印机的进丝机E轴会给设定一个温度阈值,只有喷嘴温度超过了这个阈值后进丝机才会工作。
M140 S50
M190 S50
M140和M190命令与M104和M109命令是几乎相似的。如果打印平台有热床加热功能的话,M140是命令热床加热到给定温度,能够边加热边执行其他命令;M190是等待热床加热到给定温度,只有达到温度后才允许执行其他命令。命令后面只需要一个温度参数S,单位为摄氏度。
评价:因为平台面积较大,所以如果使用M190命令加热的话,可能需要等待几分钟,比喷嘴加热等待时间长很多。因此可以在Gcode文件开始时使用 M140 命令开始加热平台,这能够允许在平台静止时执行其他命令,例如复位或喷嘴加热。只需确保在打印开始前执行M190命令,因为平台温度是第一层粘合的重要因素。
M106是控制打印机的冷却风扇运作,风扇一般对着打印件吹,用来快速冷却成型防止塌陷等。命令后面需要设置参数S,代表风扇运行功率,范围为0~255,0为不运作,255为100%功率。
M106 S255 ;设置风扇速度拉满
M106 S127 ;设置风扇功率为50%
M106 S0 ;风扇完全不工作,相当于关闭风扇
参考资料:
[1]https://www.simplify3d.com/support/articles/3d-printing-gcode-tutorial/
帮助很大,难得介绍Gcode比较全面的文章
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A