Jump to content
Cura Connect | Survey Read more... ×
Ultimaker Community of 3D Printing Experts

Resources info for a custom printer

Recommended Posts

Sorry about this question, but I'm struggling to get my head around writing a new set of resources, aka  definition, variants, extruders and materials. Well not the last one to be fair. I have a dual extruder printer, and three different head combinations, so I thought you create a definition first, and add some metadata tags, as well as some overrides common to all, then add specific overrides in the variants folder, with all the nozzle variations in the extruder section, but I'm wading in the sticky stuff now.


I can get one version to work by just user the Printer custom fdmprinter settings in other, but it seems more elegant to place these within the resources folder, so I'd like to learn how. I've managed to get this to work in Simplify3D & flavours of Slic3r, but I'm liking how Cura is going, so I'd really like to hang in here and get it up and running, as the test pieces are every bit as good and better than the closed OEM software.


Is there any place where this is explained, or any examples elsewhere anybody can point me to please. I have opened more than a few JSON files now, and it's getting a little muddy between the ears. :)


Thanks for any help.

Edited by 24c

Share this post

Link to post
Share on other sites

Well, while there isn't a handy api resource page for you to help you understand and interpret the various settings, there ARE a number of great custom profiles and the Ultimaker machine profiles themselves that you can load and inspect to learn how they function. The "house style" for Ultimaker is to use a cascade to stack profiles against each other, so that tweaks for a particular model or configuration are later in the cascade of inheritance than the features that apply to more ranges of models and configurations earlier in the inheritance treee. What this also means for you is that you can setup a simple default profile for your custom machine, and then add other selectable configurations to tune or tweak to help with specific nozzle/hotend configurations. I wish we had a developers manual as well as an operating manual, but with Cura advancing so quickly, that's tough! Spend some time in some profiles and then see if you can ask some of your deeper questions here or at Freenode on IRC #cura or #cura-dev channels.

Share this post

Link to post
Share on other sites

Try to be specific with the problems you run into. We don't know what stuff is sticky for you.


First get a single extrusion printer going. Start without machine specific profiles ("has_machine_materials": false, "has_machine_quality": false ). Then add multiple extruders, and finally use "has_variants": true and add variant definitions.


Share this post

Link to post
Share on other sites

@ahoeben & @mattgriffin. I'm sorry for the non-specific stuff, I'm just trying to get my head around this, but thank you both for your directions. I'm not a code bunny, so I expect some more daft questions will happen later. In the past I have compared slicer generated gcode in other slicers and vs the gcode the firmware in these printers accept, so I am just trying to grasp the Cura "syntax" & its generated gcode, and by comparison plus experimenting with settings I should mimic part of what I need. 


To give you a more specific idea, my Dual Material printer expects to see this format

M104 S200 T200 where T is the second nozzle & material temperature, whereas Cura uses M104 T(extruder_number) S200, which would keep that nozzle at 0 or 1ºC


"E" refers to one extruder, and "D" the other extruder. This is easy to swap around in Simplify3D by using a post process like

{TOOL0REPLACE " E" " D"} ;post process E values to Robox required D extruder values at toolchange


BTW, a M105 call gets this response back  S:27 @0 T:27 @0 B:25 ^0 A:26 *0 where S is Extruder1 (tool T0) temperature and T is Extruder 2 (tool T1) temperature and B is the Bed temperature. I have changed some of the code in the USBPrinterOututDevice.py file in the PlugIns folder to fudge & grab the right extruder temperature for the single nozzle head, but I will need to parse this for the T1 extruder and its T value later, as well as clean up my "S" fudge.


There are also anti ooze valves too that open and close the head nozzles, triggered by GCode G1 B1 & G1 B0, but is simply implemented.by using the extruder start and end codes, which I have tried this morning, just by dropping something in there, and it worked very well after looking at the generated gcode. :)


Just for info, the head I have working currently, is a single nozzle Olsson with no valves, and it works very well indeed.

However right now I am working on a two nozzle single extruder "Y" headed variant, and after starting a test print am now looking at the temperatures, trying to reach an understanding about the calls to Absolute extrusion, standby material temperature etc that I am seeing now in the Cura generated gcode (two models, one 0.3mm nozzle and the other 0.8mm), which I think is down to my profiles I have generated/cloned, so I'll be taking on your advices and keeping it simple as you've suggested, and be starting again. 






Share this post

Link to post
Share on other sites

My more specific question, I have moved away from using the extruder start & end gcode to open & close** the needle valves, but I'm stumped at the moment on how I might assign a custom initial layer height like you can in Simplify3D for each extruder. 

G1 X121.821 Y83.637
G1 F1200 E-0.22
G1 B0
M82 ;absolute extrusion mode
; G1 B0 ; close needle valve at extruder end gcode
M83 ;relative extrusion mode
M82 ;absolute extrusion mode
; T1  ; active extruder start code
; G1 B1 ; open needle valve at extruder start gcode
M83 ;relative extrusion mode
M109 S205
M104 T0 S190
G0 F3600 X121.821 Y69.607 Z0.3
G1 F1500 E-0.11
G1 B1
G0 F3600 X121.821 Y79.607

My head has two nozzles and the active nozzle move down on toolchange, so there is a z offset in the head effectively of around 0.25mm. I have got around some of this when I do a single 0.3mm nozzle print or single 0.8mm nozzle print, by using the "extruder_nr" to activate the toolhead prior to the pre-start bed levelling routine, and so the relevant nozzle touches the bed, but when it comes to doing a two model print with both extruders one of the nozzles is too high. 


I'll keep plugging away, and clean this toolchange up a bit. :)





Edited by 24c

Share this post

Link to post
Share on other sites

Ok, this is working OK, in that the Cura Gcode is being moulded into pseudo gcode the firmware in the printer can accept.

Another specific question... finding how Cura would handle the Simplify {IF TOOL0REPLACE "x" 'with_value y"} in its post processing routine, as I need to swap extruder E values for something else only while a certain tool is selected.  I could do it with an external Python script, not me personally, as this is beyond me at the moment, but I'd like to keep it all together in one place if I could. Any pointers or areas to look at to improve my knowledge please?


I solved the one problem in the previous post by calling T{extruder_nr} in my start code, and it made the right toolhead contact the bed, so levelling for whichever nozzle I was using, but It'd be nice if there was a dictionary or changelog of variables, definitions, tokens or whatever there called. I've seen them in the JSON files, but it's pot luck trying to find odd ones, but it's even harder working with Simplify3D in that respect. :) 




Edited by 24c

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Our picks

    • Architect Design Contest | People
      The goal of this contest is to design a set of people figurines that could be used in such a project to make an area, office or mall seem populated. 
      Think of different types of people in different environments, like walking people, people standing still, working people, and both men and women.
      • 9 replies
    • Taking Advantage of DfAM
      This is a statement that’s often made about AM/3DP. I'll focus on the way DfAM can take advantage of some of the unique capabilities that AM and 3DP have to offer. I personally think that the use of AM/3DP for light-weighting is one of it’s most exciting possibilities and one that could play a key part in the sustainability of design and manufacturing in the future.
        • Like
      • 3 replies

Important Information

Welcome to the Ultimaker Community of 3D printing experts. Visit the following links to read more about our Terms of Use or our Privacy Policy. Thank you!