CitySlicker
Posts: 5
Joined: Tue Oct 06, 2015 10:03 am
Location: London
Contact: Website

Hacking the FFF Profile - Take control of materials, quality and extruders

The FFF profile is at the heart of the configuration of your machine and for controlling settings changes dependent on material, quality and extruders in use. This profile is undocumented by the developer and, by default, provides very limited means of organising settings using these criteria.

It turns out, after some investigation, that you can configure saving settings according to your requirements by manually editing the FFF profile. This is also required to correctly set up a profile for dual extrusion.

The FFF Profile

The profile you'll be editing is generated from the stored settings within the S3D app. To generate the file based on your current or saved profile settings, use 'export FFF profile' from the file menu and select the appropriate profile.

While the file extension is .fff, it is in fact a standard XML file. The XML format typically represents data, stored between opening and closing tags, the same way that HTML code is formed. You'll neeed to be comfortable working with this type of file and not to introduce syntax errors while editing. For a quick briefing about XML, visit https://www.w3schools.com/xml/default.asp

A suitable tool for working with XML is available free and online at https://codebeautify.org/xmlviewer. This will allow you to check to make sure that your XML markup is valid and will give you clues where to look in the code if you have made a mistake. Paste your profile into the left side code window, and click 'Tree View' to display data. Any error will be highlighted in the right side view.

If you make a mistake with coding the XML correctly, it appears that S3D will not let you know about the errors when importing the file back in. In this case you will probably end up with some abnormal settings behaviour, so my tip is not to make these kind of mistakes, okay.

To use your edited profile in the S3D app, use 'import FFF profile' from the file menu. If you have not edited the name of the exported profile, S3D creates a numbered version of the profile with the same name and will tell you when import is complete.

Settings and parameters

Just to be clear, I am differentiating between a setting and a parameter when it comes to what you are required to edit manually. Consider the following:

Code: Select all

<globalExtruderTemperature>225</globalExtruderTemperature>
globalExtruderTemperature is the parameter and the setting is 225.

Once you have the parameter listed inside the approriate auto Config parameters, you will be able to make any future settings changes within the S3D app.

Auto configuration settings controls

Up to three auto-configure dropdowns are visible below the profile selection dropdown. If you have a fully configured profile, you'll have material, quality and extruders. If you don't see a particular dropdown this indicates that the appropriate sections have not been included or have been removed from your currently selected FFF profile.

To show the material dropdown you have to have at least one material in the FFF profile. This is a default entry:

Code: Select all

    <autoConfigureMaterial name="ABS">
        <globalExtruderTemperature>225</globalExtruderTemperature>
        <globalBedTemperature>100</globalBedTemperature>
        <globalExtrusionMultiplier>1</globalExtrusionMultiplier>
        <fanSpeed>
            <setpoint layer="1" speed="0"/>
        </fanSpeed>
    </autoConfigureMaterial>
For the quality dropdown to appear, at least one entry must exist for quality:

Code: Select all

    <autoConfigureQuality name="Fast">
        <layerHeight>0.3</layerHeight>
        <topSolidLayers>3</topSolidLayers>
        <bottomSolidLayers>3</bottomSolidLayers>
        <skirtLayers>1</skirtLayers>
        <infillPercentage>15</infillPercentage>
        <supportInfillPercentage>25</supportInfillPercentage>
    </autoConfigureQuality>
For both of these dropdowns, you can duplicate and delete entries using the + and - buttons next to the dropdowns. Of course, if you delete all of them the dropdown box will disappear completely and you will not be able to add new ones until you manually add them to an FFF profile.

The final dropdown will only appear if you have configured the profile for dual extrusion by manually editing an FFF profile.

What is stored in auto configuration by default?

The following settings are stored and recalled with changes to the dropdown selections....

Material
  • Extruder temp
  • Bed temp
  • Extrusion multiplier
  • Fan speed
Quality
  • Layer height
  • Top solid layers
  • Bottom solid layers
  • skirt layers
  • Infill %
  • Support infill%
Extruder selection (if you have an S3D dual extrusion profile preconfigured)
  • Primary Extruder
  • Raft extruder
  • Skirt extruder
  • Infill extruder
  • Support extruder
  • Skirt?
  • Prime Pillar?
  • Ooze shield?
  • Temp controller used
  • Start Gcode
If you look at the sample autoConfigureMaterial and autoConfigureQuality listings above, you can easily figure out the settings that will be stored and recalled using these selections. Recognising roughly what these settings are will be useful when customising what gets saved in your customisation of the FFF profile.

How do you store other settings with these configurations?

If you manually edit and add a settings parameter to a material, quality or extruder auto configure entry, this setting will be saved with whatever you have listed in these dropdowns. It's not important what the settings are as you add them as once the parameter has been added you will be able to edit the settings for each selected dropdown as you require.

For example, I have added all of the parameters that I'd like to have saved for a material entry:

Code: Select all

    <autoConfigureMaterial name="ABS">

        <!--Modifications saved with this material (all optional):-->

        <!--Extruder Tab - duplicate the entries for your extruders if required-->
        <extruder name="Right Extruder">
            <toolheadNumber>0</toolheadNumber>
            <autoWidth>1</autoWidth>
            <width>0.48</width>
            <extrusionMultiplier>1</extrusionMultiplier>
            <useRetract>1</useRetract>
            <retractionDistance>1</retractionDistance>
            <extraRestartDistance>0</extraRestartDistance>
            <retractionZLift>0</retractionZLift>
            <retractionSpeed>1800</retractionSpeed>
            <useCoasting>0</useCoasting>
            <coastingDistance>0.2</coastingDistance>
            <useWipe>0</useWipe>
            <wipeDistance>5</wipeDistance>
        </extruder>

        <extruder name="Left Extruder">
            <toolheadNumber>1</toolheadNumber>
            <autoWidth>1</autoWidth>
            <width>0.48</width>
            <extrusionMultiplier>1</extrusionMultiplier>
            <useRetract>1</useRetract>
            <retractionDistance>1</retractionDistance>
            <extraRestartDistance>0</extraRestartDistance>
            <retractionZLift>0</retractionZLift>
            <retractionSpeed>1800</retractionSpeed>
            <useCoasting>0</useCoasting>
            <coastingDistance>0.2</coastingDistance>
            <useWipe>0</useWipe>
            <wipeDistance>5</wipeDistance>
        </extruder>

        <!--Layer Tab-->
        <firstLayerHeightPercentage>100</firstLayerHeightPercentage>
        <firstLayerWidthPercentage>100</firstLayerWidthPercentage>
        <firstLayerUnderspeed>0.75</firstLayerUnderspeed>

        <!--Additions Tab-->
        <useRaft>0</useRaft>
        <raftExtruder>1</raftExtruder>
        <raftTopLayers>3</raftTopLayers>
        <raftBaseLayers>1</raftBaseLayers>
        <raftOffset>3</raftOffset>
        <raftSeparationDistance>0.1</raftSeparationDistance>
        <raftTopInfill>100</raftTopInfill>
        <aboveRaftSpeedMultiplier>0.3</aboveRaftSpeedMultiplier>

        <!--Infill Tab-->
        <internalInfillPattern>Fast Honeycomb</internalInfillPattern>
        <externalInfillPattern>Rectilinear</externalInfillPattern>
        <infillPercentage>40</infillPercentage>
        <outlineOverlapPercentage>15</outlineOverlapPercentage>
        <infillExtrusionWidthPercentage>100</infillExtrusionWidthPercentage>
        <minInfillLength>5</minInfillLength>
        <infillLayerInterval>1</infillLayerInterval>
        <internalInfillAngles>0</internalInfillAngles>
        <overlapInternalInfillAngles>0</overlapInternalInfillAngles>
        <externalInfillAngles>0,45,90</externalInfillAngles>

        <!--Temperatures Tab - duplicate the entries for your temp controllers if required-->
        <temperatureController name="Right Extruder Temperature">
            <temperatureNumber>0</temperatureNumber>
            <isHeatedBed>0</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="260"/>
        </temperatureController>

        <temperatureController name="Left Extruder Temperature">
            <temperatureNumber>1</temperatureNumber>
            <isHeatedBed>0</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="260"/>
        </temperatureController>

        <temperatureController name="Heated Bed">
            <temperatureNumber>2</temperatureNumber>
            <isHeatedBed>1</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="110"/>
        </temperatureController>

        <globalBedTemperature>110</globalBedTemperature>
        <globalExtrusionMultiplier>1</globalExtrusionMultiplier>

        <!--Cooling Tab-->
        <fanSpeed>
            <setpoint layer="1" speed="0"/>
        </fanSpeed>
        <blipFanToFullPower>0</blipFanToFullPower>
        <adjustSpeedForCooling>1</adjustSpeedForCooling>
        <minSpeedLayerTime>10</minSpeedLayerTime>
        <minCoolingSpeedSlowdown>20</minCoolingSpeedSlowdown>
        <increaseFanForCooling>0</increaseFanForCooling>
        <minFanLayerTime>45</minFanLayerTime>
        <maxCoolingFanSpeed>100</maxCoolingFanSpeed>
        <increaseFanForBridging>0</increaseFanForBridging>
        <bridgingFanSpeed>100</bridgingFanSpeed>

        <!--Speeds Tab-->
        <adjustSpeedForCooling>1</adjustSpeedForCooling>
        <minSpeedLayerTime>10</minSpeedLayerTime>
        <minCoolingSpeedSlowdown>20</minCoolingSpeedSlowdown>

        <!--Other Tab - Bridging-->
        <minBridgingArea>50</minBridgingArea>
        <bridgingExtraInflation>0</bridgingExtraInflation>
        <bridgingExtrusionMultiplier>0.95</bridgingExtrusionMultiplier>
        <bridgingSpeedMultiplier>0.5</bridgingSpeedMultiplier>
        <useFixedBridgingAngle>0</useFixedBridgingAngle>
        <fixedBridgingAngle>0</fixedBridgingAngle>
        <applyBridgingToPerimeters>1</applyBridgingToPerimeters>

        <!--Other Tab - Tool Change Retraction-->
        <toolChangeRetractionDistance>17</toolChangeRetractionDistance>
        <toolChangeExtraRestartDistance>0.5</toolChangeExtraRestartDistance>
        <toolChangeRetractionSpeed>600</toolChangeRetractionSpeed>

        <!--Advanced Tab - Ooze Control-->
        <onlyRetractWhenCrossingOutline>0</onlyRetractWhenCrossingOutline>
        <retractBetweenLayers>0</retractBetweenLayers>
        <useRetractionMinTravel>0</useRetractionMinTravel>
        <retractionMinTravel>3</retractionMinTravel>
        <retractWhileWiping>0</retractWhileWiping>
        <onlyWipeOutlines>1</onlyWipeOutlines>

    </autoConfigureMaterial>
The beauty of the FFF profile is that you can decide whether to save, for example, infill settings as part of your quality settings, material settings, or if you're really weird, with extruder settings. Or you can choose not to save them with any of the 3 top dropdowns at all, in which case such settings are stored globally for that FFF profile and will not change when the auto configure dropdowns are adjusted.

What settings parameters are available?

All settings are shown in the default FFF profile. They are jumbled around a bit but there is a grouping of logical settings if you look hard enough.

If you look at the complete profile I've created (see The Profile below) individual parameters are listed in Section 6. In addition, you can add the following group parameters:
  • <extruder> (Section 1)
  • <temperatureController> (Section 2)
Gotchas

There are only a couple of important things to bear in mind as you organise what you want saved with which autoconfiguration entry:

Duplicated parameters

You can add a named parameter to either <autoConfigureQuality>, <autoConfigureMaterial> or <autoConfigureExtruders> but you can add it to just ONE of those groups.

Group entries

Parameter groups include <extruder>, <temperatureController> and <fanSpeed>. You can't add individual child entries of a group entry as settings on their own. If you add a parameter group, S3D saves all child settings within the group. You can define the children when editing or S3D will do it for you first time it saves.

Incorrect

Code: Select all

        <toolheadNumber>1</toolheadNumber>
        <diameter>0.4</diameter>
        <autoWidth>1</autoWidth>
        <width>0.48</width>
Correct

Code: Select all

    <extruder name="Left Extruder">
        <toolheadNumber>1</toolheadNumber>
        <diameter>0.4</diameter>
        <autoWidth>1</autoWidth>
        <width>0.48</width>
        <extrusionMultiplier>1</extrusionMultiplier>
        <useRetract>1</useRetract>
        <retractionDistance>1</retractionDistance>
        <extraRestartDistance>0</extraRestartDistance>
        <retractionZLift>0</retractionZLift>
        <retractionSpeed>1800</retractionSpeed>
        <useCoasting>0</useCoasting>
        <coastingDistance>0.2</coastingDistance>
        <useWipe>0</useWipe>
        <wipeDistance>5</wipeDistance>
    </extruder>
or

Code: Select all

    <extruder name="Left Extruder">
    </extruder>
The profile:

I have created a profile, reorganised, formatted and annotated, to help you get started customising this to your needs. I have it set up for a MendelMax3, and for my own workflow, so if you share the same tastes, you won't need to do much with the code :).

Code: Select all

<?xml version="1.0"?>

<!--If setting up from scratch edit this file first, following guidance notes, then import this profile into S3D-->
<!--Edit settings, duplicate(add) new materials and quality settings according to taste-->
<!--You will lose all of the comments in this file during import, so edit and keep this as your master copy-->

<!--Use an approriate name for your profile-->
<profile name="MM3 Dual Extruder" version="2018-04-11 23:25:36" app="S3D-Software 4.0.1">
    <baseProfile>MM3 Dual Extruder</baseProfile>
    <!--If you save as new profile in app, this will be the base name for all of your derived profiles-->

    <!--Optional:-->
    <!--To display your own printer model in the application-->
    <!--Place model STL in <Application Directory>\platforms-->
    <!--Refer to appropriate STL file below-->
    <overridePrinterModels>0</overridePrinterModels>
    <printerModelsOverride>mendelmax3.stl</printerModelsOverride>



    <!--Define each extruder and heating controller for your specific printer-->
    <!--The name given is not significant - call it something logical for your printer-->
    <!--These definitions can be modified by material, quality and extruders configuration dropdowns-->

    <!--****************************************************************************************************************-->
    <!--Section 1 - Extruders-->
    <!--****************************************************************************************************************-->
    <extruder name="Right Extruder">
        <toolheadNumber>0</toolheadNumber>
        <diameter>0.4</diameter>
        <autoWidth>1</autoWidth>
        <width>0.48</width>
        <extrusionMultiplier>1</extrusionMultiplier>
        <useRetract>1</useRetract>
        <retractionDistance>1</retractionDistance>
        <extraRestartDistance>0</extraRestartDistance>
        <retractionZLift>0</retractionZLift>
        <retractionSpeed>1800</retractionSpeed>
        <useCoasting>0</useCoasting>
        <coastingDistance>0.2</coastingDistance>
        <useWipe>0</useWipe>
        <wipeDistance>5</wipeDistance>
    </extruder>

    <extruder name="Left Extruder">
        <toolheadNumber>1</toolheadNumber>
        <diameter>0.4</diameter>
        <autoWidth>1</autoWidth>
        <width>0.48</width>
        <extrusionMultiplier>1</extrusionMultiplier>
        <useRetract>1</useRetract>
        <retractionDistance>1</retractionDistance>
        <extraRestartDistance>0</extraRestartDistance>
        <retractionZLift>0</retractionZLift>
        <retractionSpeed>1800</retractionSpeed>
        <useCoasting>0</useCoasting>
        <coastingDistance>0.2</coastingDistance>
        <useWipe>0</useWipe>
        <wipeDistance>5</wipeDistance>
    </extruder>

    <!--****************************************************************************************************************-->
    <!--Section 2 - Temperature controllers-->
    <!--****************************************************************************************************************-->
    <temperatureController name="Right Extruder Temperature">
        <temperatureNumber>0</temperatureNumber>
        <isHeatedBed>0</isHeatedBed>
        <relayBetweenLayers>0</relayBetweenLayers>
        <relayBetweenLoops>0</relayBetweenLoops>
        <stabilizeAtStartup>1</stabilizeAtStartup>
        <setpoint layer="1" temperature="260"/>
    </temperatureController>

    <temperatureController name="Left Extruder Temperature">
        <temperatureNumber>1</temperatureNumber>
        <isHeatedBed>0</isHeatedBed>
        <relayBetweenLayers>0</relayBetweenLayers>
        <relayBetweenLoops>0</relayBetweenLoops>
        <stabilizeAtStartup>1</stabilizeAtStartup>
        <setpoint layer="1" temperature="260"/>
    </temperatureController>

    <temperatureController name="Heated Bed">
        <temperatureNumber>2</temperatureNumber>
        <isHeatedBed>1</isHeatedBed>
        <relayBetweenLayers>0</relayBetweenLayers>
        <relayBetweenLoops>0</relayBetweenLoops>
        <stabilizeAtStartup>1</stabilizeAtStartup>
        <setpoint layer="1" temperature="110"/>
    </temperatureController>

    <!--****************************************************************************************************************-->
    <!--Section 3 - Extruder Dropdown-->
    <!--****************************************************************************************************************-->
    <!--For a single extruder, this section is not required-->
    <!--Dual Extruder configuration, in this profile, Tool 0 is on RHS-->
    <!--Make sure that tool and temp ids are consistent in each of these sections-->


    <autoConfigureExtruders name="Right Extruder Only" allowedToolheads="1">
        <!--Required parameters - refer to controller name in section 2-->
        <toggleTemperatureController name="Right Extruder Temperature" status="on" stabilize="on"/>
        <toggleTemperatureController name="Left Extruder Temperature" status="off" stabilize="on"/>
        <primaryExtruder>0</primaryExtruder>
        <raftExtruder>0</raftExtruder>
        <skirtExtruder>0</skirtExtruder>
        <infillExtruder>0</infillExtruder>
        <supportExtruder>0</supportExtruder>

        <!--Optional parameters-->
        <useSkirt>1</useSkirt>
        <usePrimePillar>0</usePrimePillar>
        <useOozeShield>0</useOozeShield>
        <startingGcode>G28 ; home all axes,G29 ; Bed Level,G1 Z5 F5000 ; lift nozzle</startingGcode>
    </autoConfigureExtruders>

    <autoConfigureExtruders name="Left Extruder Only" allowedToolheads="1">
        <!--Required parameters - refer to controller name in section 2-->
        <toggleTemperatureController name="Right Extruder Temperature" status="off" stabilize="on"/>
        <toggleTemperatureController name="Left Extruder Temperature" status="on" stabilize="on"/>
        <primaryExtruder>1</primaryExtruder>
        <raftExtruder>1</raftExtruder>
        <skirtExtruder>1</skirtExtruder>
        <infillExtruder>1</infillExtruder>
        <supportExtruder>1</supportExtruder>

        <!--Optional parameters-->
        <useSkirt>1</useSkirt>
        <usePrimePillar>0</usePrimePillar>
        <useOozeShield>0</useOozeShield>
        <startingGcode>G28 ; home all axes,G29 ; Bed Level,G1 Z5 F5000 ; lift nozzle</startingGcode>
    </autoConfigureExtruders>

    <autoConfigureExtruders name="Both Extruders" allowedToolheads="2">
        <!--Required parameters - refer to controller name in section 2-->
        <toggleTemperatureController name="Right Extruder Temperature" status="on" stabilize="on"/>
        <toggleTemperatureController name="Left Extruder Temperature" status="on" stabilize="on"/>
        <primaryExtruder>1</primaryExtruder>
        <raftExtruder>1</raftExtruder>
        <skirtExtruder>1</skirtExtruder>
        <infillExtruder>1</infillExtruder>
        <supportExtruder>1</supportExtruder>

        <!--Optional parameters-->
        <useSkirt>1</useSkirt>
        <usePrimePillar>1</usePrimePillar>
        <useOozeShield>1</useOozeShield>
        <startingGcode>G28 ; home all axes,G29 ; Bed Level,G1 Z5 F5000 ; lift nozzle</startingGcode>
    </autoConfigureExtruders>

    <!--****************************************************************************************************************-->




    <!--For 'Materials' and 'Quality' dropdowns, selection changes any setting listed as a parameter of that material or quality-->
    <!--Parameters can include nearly all settings listed at the end of this config file-->
    <!--To add parameters, duplicate entry (and, in the case of child entries, all children)-->
    <!--** Parameters cannot be listed in both material and quality **-->
    <!--Any parameters not listed will remain unchanged regardless of dropdown modifcations-->
    <!--This profile organises the various settings into what makes sense to the author to separate material and quality settings.-->
    <!--Suggest you start with one material profile and one quality profile in FFF, duplicating within the app as required -->

    <!--****************************************************************************************************************-->
    <!--Section 4 - Materials Dropdown-->
    <!--****************************************************************************************************************-->
    <autoConfigureMaterial name="ABS">

        <!--Modifications saved with this material (all optional):-->

        <!--Extruder Tab - duplicate the entries for your extruders if required-->
        <extruder name="Right Extruder">
            <toolheadNumber>0</toolheadNumber>
            <autoWidth>1</autoWidth>
            <width>0.48</width>
            <extrusionMultiplier>1</extrusionMultiplier>
            <useRetract>1</useRetract>
            <retractionDistance>1</retractionDistance>
            <extraRestartDistance>0</extraRestartDistance>
            <retractionZLift>0</retractionZLift>
            <retractionSpeed>1800</retractionSpeed>
            <useCoasting>0</useCoasting>
            <coastingDistance>0.2</coastingDistance>
            <useWipe>0</useWipe>
            <wipeDistance>5</wipeDistance>
        </extruder>

        <extruder name="Left Extruder">
            <toolheadNumber>1</toolheadNumber>
            <autoWidth>1</autoWidth>
            <width>0.48</width>
            <extrusionMultiplier>1</extrusionMultiplier>
            <useRetract>1</useRetract>
            <retractionDistance>1</retractionDistance>
            <extraRestartDistance>0</extraRestartDistance>
            <retractionZLift>0</retractionZLift>
            <retractionSpeed>1800</retractionSpeed>
            <useCoasting>0</useCoasting>
            <coastingDistance>0.2</coastingDistance>
            <useWipe>0</useWipe>
            <wipeDistance>5</wipeDistance>
        </extruder>

        <!--Layer Tab-->
        <firstLayerHeightPercentage>100</firstLayerHeightPercentage>
        <firstLayerWidthPercentage>100</firstLayerWidthPercentage>
        <firstLayerUnderspeed>0.75</firstLayerUnderspeed>

        <!--Additions Tab-->
        <useRaft>0</useRaft>
        <raftExtruder>1</raftExtruder>
        <raftTopLayers>3</raftTopLayers>
        <raftBaseLayers>1</raftBaseLayers>
        <raftOffset>3</raftOffset>
        <raftSeparationDistance>0.1</raftSeparationDistance>
        <raftTopInfill>100</raftTopInfill>
        <aboveRaftSpeedMultiplier>0.3</aboveRaftSpeedMultiplier>

        <!--Infill Tab-->
        <internalInfillPattern>Fast Honeycomb</internalInfillPattern>
        <externalInfillPattern>Rectilinear</externalInfillPattern>
        <infillPercentage>40</infillPercentage>
        <outlineOverlapPercentage>15</outlineOverlapPercentage>
        <infillExtrusionWidthPercentage>100</infillExtrusionWidthPercentage>
        <minInfillLength>5</minInfillLength>
        <infillLayerInterval>1</infillLayerInterval>
        <internalInfillAngles>0</internalInfillAngles>
        <overlapInternalInfillAngles>0</overlapInternalInfillAngles>
        <externalInfillAngles>0,45,90</externalInfillAngles>

        <!--Temperatures Tab - duplicate the entries for your temp controllers if required-->
        <temperatureController name="Right Extruder Temperature">
            <temperatureNumber>0</temperatureNumber>
            <isHeatedBed>0</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="260"/>
        </temperatureController>

        <temperatureController name="Left Extruder Temperature">
            <temperatureNumber>1</temperatureNumber>
            <isHeatedBed>0</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="260"/>
        </temperatureController>

        <temperatureController name="Heated Bed">
            <temperatureNumber>2</temperatureNumber>
            <isHeatedBed>1</isHeatedBed>
            <relayBetweenLayers>0</relayBetweenLayers>
            <relayBetweenLoops>0</relayBetweenLoops>
            <stabilizeAtStartup>1</stabilizeAtStartup>
            <setpoint layer="1" temperature="110"/>
        </temperatureController>

        <globalBedTemperature>110</globalBedTemperature>
        <globalExtrusionMultiplier>1</globalExtrusionMultiplier>

        <!--Cooling Tab-->
        <fanSpeed>
            <setpoint layer="1" speed="0"/>
        </fanSpeed>
        <blipFanToFullPower>0</blipFanToFullPower>
        <adjustSpeedForCooling>1</adjustSpeedForCooling>
        <minSpeedLayerTime>10</minSpeedLayerTime>
        <minCoolingSpeedSlowdown>20</minCoolingSpeedSlowdown>
        <increaseFanForCooling>0</increaseFanForCooling>
        <minFanLayerTime>45</minFanLayerTime>
        <maxCoolingFanSpeed>100</maxCoolingFanSpeed>
        <increaseFanForBridging>0</increaseFanForBridging>
        <bridgingFanSpeed>100</bridgingFanSpeed>

        <!--Speeds Tab-->
        <adjustSpeedForCooling>1</adjustSpeedForCooling>
        <minSpeedLayerTime>10</minSpeedLayerTime>
        <minCoolingSpeedSlowdown>20</minCoolingSpeedSlowdown>

        <!--Other Tab - Bridging-->
        <minBridgingArea>50</minBridgingArea>
        <bridgingExtraInflation>0</bridgingExtraInflation>
        <bridgingExtrusionMultiplier>0.95</bridgingExtrusionMultiplier>
        <bridgingSpeedMultiplier>0.5</bridgingSpeedMultiplier>
        <useFixedBridgingAngle>0</useFixedBridgingAngle>
        <fixedBridgingAngle>0</fixedBridgingAngle>
        <applyBridgingToPerimeters>1</applyBridgingToPerimeters>

        <!--Other Tab - Tool Change Retraction-->
        <toolChangeRetractionDistance>17</toolChangeRetractionDistance>
        <toolChangeExtraRestartDistance>0.5</toolChangeExtraRestartDistance>
        <toolChangeRetractionSpeed>600</toolChangeRetractionSpeed>

        <!--Advanced Tab - Ooze Control-->
        <onlyRetractWhenCrossingOutline>0</onlyRetractWhenCrossingOutline>
        <retractBetweenLayers>0</retractBetweenLayers>
        <useRetractionMinTravel>0</useRetractionMinTravel>
        <retractionMinTravel>3</retractionMinTravel>
        <retractWhileWiping>0</retractWhileWiping>
        <onlyWipeOutlines>1</onlyWipeOutlines>

    </autoConfigureMaterial>

    <!--****************************************************************************************************************-->
    <!--Section 5 - Quality Dropdown-->
    <!--****************************************************************************************************************-->

    <!--Naming convention used here: <Layer Height> <Default Speed> <Strength>-->

    <autoConfigureQuality name="0.3mm - Fast - Regular">

        <!--Modifications saved with this quality (all optional):-->

        <defaultSpeed>4200</defaultSpeed>
        <outlineUnderspeed>0.75</outlineUnderspeed>
        <solidInfillUnderspeed>0.75</solidInfillUnderspeed>
        <supportUnderspeed>0.8</supportUnderspeed>
        <layerHeight>0.3</layerHeight>
        <topSolidLayers>3</topSolidLayers>
        <bottomSolidLayers>3</bottomSolidLayers>
        <skirtLayers>1</skirtLayers>
        <infillPercentage>20</infillPercentage>
        <perimeterOutlines>2</perimeterOutlines>
    </autoConfigureQuality>

    <autoConfigureQuality name="0.25mm Medium Regular">

        <!--Modifications saved with this quality (all optional):-->

        <defaultSpeed>3600</defaultSpeed>
        <outlineUnderspeed>0.75</outlineUnderspeed>
        <solidInfillUnderspeed>0.75</solidInfillUnderspeed>
        <supportUnderspeed>0.8</supportUnderspeed>
        <layerHeight>0.25</layerHeight>
        <topSolidLayers>4</topSolidLayers>
        <bottomSolidLayers>4</bottomSolidLayers>
        <skirtLayers>1</skirtLayers>
        <infillPercentage>40</infillPercentage>
        <perimeterOutlines>2</perimeterOutlines>
    </autoConfigureQuality>
    <autoConfigureQuality name="0.2mm Medium Regular">

        <!--Modifications saved with this quality (all optional):-->

        <defaultSpeed>3600</defaultSpeed>
        <outlineUnderspeed>0.75</outlineUnderspeed>
        <solidInfillUnderspeed>0.75</solidInfillUnderspeed>
        <supportUnderspeed>0.8</supportUnderspeed>
        <layerHeight>0.2</layerHeight>
        <topSolidLayers>4</topSolidLayers>
        <bottomSolidLayers>4</bottomSolidLayers>
        <skirtLayers>1</skirtLayers>
        <infillPercentage>30</infillPercentage>
        <perimeterOutlines>2</perimeterOutlines>
    </autoConfigureQuality>
    <autoConfigureQuality name="0.25mm Medium Strong">

        <!--Modifications saved with this quality (all optional):-->

        <defaultSpeed>3600</defaultSpeed>
        <outlineUnderspeed>0.75</outlineUnderspeed>
        <solidInfillUnderspeed>0.75</solidInfillUnderspeed>
        <supportUnderspeed>0.8</supportUnderspeed>
        <layerHeight>0.25</layerHeight>
        <topSolidLayers>4</topSolidLayers>
        <bottomSolidLayers>4</bottomSolidLayers>
        <skirtLayers>1</skirtLayers>
        <infillPercentage>50</infillPercentage>
        <perimeterOutlines>4</perimeterOutlines>
    </autoConfigureQuality>

    <!--****************************************************************************************************************-->



    <!--****************************************************************************************************************-->
    <!--Section 6 - Current settings-->
    <!--****************************************************************************************************************-->
    <printMaterial>ABS</printMaterial>
    <printQuality>Standard Quality</printQuality>
    <printExtruders>Both Extruders</printExtruders>
    <primaryExtruder>1</primaryExtruder>
    <layerHeight>0.25</layerHeight>
    <topSolidLayers>4</topSolidLayers>
    <bottomSolidLayers>4</bottomSolidLayers>
    <perimeterOutlines>2</perimeterOutlines>
    <printPerimetersInsideOut>1</printPerimetersInsideOut>
    <startPointOption>3</startPointOption>
    <startPointOriginX>110</startPointOriginX>
    <startPointOriginY>300</startPointOriginY>
    <sequentialIslands>0</sequentialIslands>
    <spiralVaseMode>0</spiralVaseMode>
    <firstLayerHeightPercentage>100</firstLayerHeightPercentage>
    <firstLayerWidthPercentage>100</firstLayerWidthPercentage>
    <firstLayerUnderspeed>0.75</firstLayerUnderspeed>
    <useRaft>0</useRaft>
    <raftExtruder>1</raftExtruder>
    <raftTopLayers>3</raftTopLayers>
    <raftBaseLayers>1</raftBaseLayers>
    <raftOffset>3</raftOffset>
    <raftSeparationDistance>0.1</raftSeparationDistance>
    <raftTopInfill>100</raftTopInfill>
    <aboveRaftSpeedMultiplier>0.3</aboveRaftSpeedMultiplier>
    <useSkirt>1</useSkirt>
    <skirtExtruder>999</skirtExtruder>
    <skirtLayers>1</skirtLayers>
    <skirtOutlines>2</skirtOutlines>
    <skirtOffset>4.4</skirtOffset>
    <usePrimePillar>1</usePrimePillar>
    <primePillarExtruder>999</primePillarExtruder>
    <primePillarWidth>6</primePillarWidth>
    <primePillarLocation>7</primePillarLocation>
    <primePillarSpeedMultiplier>1.25</primePillarSpeedMultiplier>
    <useOozeShield>1</useOozeShield>
    <oozeShieldExtruder>999</oozeShieldExtruder>
    <oozeShieldOffset>2</oozeShieldOffset>
    <oozeShieldOutlines>2</oozeShieldOutlines>
    <oozeShieldSidewallShape>2</oozeShieldSidewallShape>
    <oozeShieldSidewallAngle>30</oozeShieldSidewallAngle>
    <oozeShieldSpeedMultiplier>1</oozeShieldSpeedMultiplier>
    <infillExtruder>1</infillExtruder>
    <internalInfillPattern>Fast Honeycomb</internalInfillPattern>
    <externalInfillPattern>Rectilinear</externalInfillPattern>
    <infillPercentage>40</infillPercentage>
    <outlineOverlapPercentage>15</outlineOverlapPercentage>
    <infillExtrusionWidthPercentage>100</infillExtrusionWidthPercentage>
    <minInfillLength>5</minInfillLength>
    <infillLayerInterval>1</infillLayerInterval>
    <internalInfillAngles>0</internalInfillAngles>
    <overlapInternalInfillAngles>0</overlapInternalInfillAngles>
    <externalInfillAngles>0,45,90</externalInfillAngles>
    <generateSupport>0</generateSupport>
    <supportExtruder>1</supportExtruder>
    <supportInfillPercentage>30</supportInfillPercentage>
    <supportExtraInflation>0</supportExtraInflation>
    <supportBaseLayers>0</supportBaseLayers>
    <denseSupportExtruder>1</denseSupportExtruder>
    <denseSupportLayers>1</denseSupportLayers>
    <denseSupportInfillPercentage>70</denseSupportInfillPercentage>
    <supportLayerInterval>1</supportLayerInterval>
    <supportHorizontalPartOffset>0.3</supportHorizontalPartOffset>
    <supportUpperSeparationLayers>1</supportUpperSeparationLayers>
    <supportLowerSeparationLayers>1</supportLowerSeparationLayers>
    <supportType>0</supportType>
    <supportGridSpacing>4</supportGridSpacing>
    <maxOverhangAngle>45</maxOverhangAngle>
    <supportAngles>0</supportAngles>
    <fanSpeed>
        <setpoint layer="1" speed="0"/>
    </fanSpeed>
    <blipFanToFullPower>0</blipFanToFullPower>
    <adjustSpeedForCooling>1</adjustSpeedForCooling>
    <minSpeedLayerTime>10</minSpeedLayerTime>
    <minCoolingSpeedSlowdown>20</minCoolingSpeedSlowdown>
    <increaseFanForCooling>0</increaseFanForCooling>
    <minFanLayerTime>45</minFanLayerTime>
    <maxCoolingFanSpeed>100</maxCoolingFanSpeed>
    <increaseFanForBridging>0</increaseFanForBridging>
    <bridgingFanSpeed>100</bridgingFanSpeed>
    <use5D>1</use5D>
    <relativeEdistances>0</relativeEdistances>
    <allowEaxisZeroing>1</allowEaxisZeroing>
    <independentExtruderAxes>0</independentExtruderAxes>
    <includeM10123>0</includeM10123>
    <stickySupport>1</stickySupport>
    <applyToolheadOffsets>0</applyToolheadOffsets>
    <gcodeXoffset>0</gcodeXoffset>
    <gcodeYoffset>0</gcodeYoffset>
    <gcodeZoffset>0.1</gcodeZoffset>
    <overrideMachineDefinition>1</overrideMachineDefinition>
    <machineTypeOverride>0</machineTypeOverride>
    <strokeXoverride>230</strokeXoverride>
    <strokeYoverride>310</strokeYoverride>
    <strokeZoverride>195</strokeZoverride>
    <originOffsetXoverride>0</originOffsetXoverride>
    <originOffsetYoverride>0</originOffsetYoverride>
    <originOffsetZoverride>0</originOffsetZoverride>
    <homeXdirOverride>-1</homeXdirOverride>
    <homeYdirOverride>-1</homeYdirOverride>
    <homeZdirOverride>-1</homeZdirOverride>
    <flipXoverride>1</flipXoverride>
    <flipYoverride>-1</flipYoverride>
    <flipZoverride>1</flipZoverride>
    <toolheadOffsets>0,0|0,0|0,0|0,0|0,0|0,0</toolheadOffsets>
    <overrideFirmwareConfiguration>1</overrideFirmwareConfiguration>
    <firmwareTypeOverride>RepRap (Marlin/Repetier/Sprinter)</firmwareTypeOverride>
    <GPXconfigOverride>r2</GPXconfigOverride>
    <baudRateOverride>250000</baudRateOverride>
    <overridePrinterModels>1</overridePrinterModels>
    <printerModelsOverride>Simplify3DPrinterModel.stl</printerModelsOverride>
    <startingGcode>G28 ; home all axes,G29 ; Bed Level,G1 Z5 F5000 ; lift nozzle</startingGcode>
    <layerChangeGcode></layerChangeGcode>
    <retractionGcode></retractionGcode>
    <toolChangeGcode></toolChangeGcode>
    <endingGcode>M104 S0 ; turn off temperature,M140 S1; turn off bed heater,M106 S0; disable fan,G91 ; set to relative positioning,G1 Z5 F5000 ; lift nozzle,G90 ; set to absolute positioning,G1 Y300 F5000 ; Eject Bed,M84     ; disable motors</endingGcode>
    <exportFileFormat>gcode</exportFileFormat>
    <celebration>0</celebration>
    <celebrationSong>Random Song</celebrationSong>
    <postProcessing></postProcessing>
    <defaultSpeed>4500</defaultSpeed>
    <outlineUnderspeed>0.75</outlineUnderspeed>
    <solidInfillUnderspeed>0.75</solidInfillUnderspeed>
    <supportUnderspeed>0.8</supportUnderspeed>
    <rapidXYspeed>6000</rapidXYspeed>
    <rapidZspeed>1002</rapidZspeed>
    <minBridgingArea>50</minBridgingArea>
    <bridgingExtraInflation>0</bridgingExtraInflation>
    <bridgingExtrusionMultiplier>0.95</bridgingExtrusionMultiplier>
    <bridgingSpeedMultiplier>0.5</bridgingSpeedMultiplier>
    <useFixedBridgingAngle>0</useFixedBridgingAngle>
    <fixedBridgingAngle>0</fixedBridgingAngle>
    <applyBridgingToPerimeters>1</applyBridgingToPerimeters>
    <filamentDiameters>1.75|1.75|1.75|1.75|1.75|1.75</filamentDiameters>
    <filamentPricesPerKg>46|46|46|46|46|46</filamentPricesPerKg>
    <filamentDensities>1.25|1.25|1.25|1.25|1.25|1.25</filamentDensities>
    <useMinPrintHeight>0</useMinPrintHeight>
    <minPrintHeight>0</minPrintHeight>
    <useMaxPrintHeight>0</useMaxPrintHeight>
    <maxPrintHeight>13.75</maxPrintHeight>
    <useDiaphragm>0</useDiaphragm>
    <diaphragmLayerInterval>20</diaphragmLayerInterval>
    <robustSlicing>1</robustSlicing>
    <mergeAllIntoSolid>0</mergeAllIntoSolid>
    <onlyRetractWhenCrossingOutline>0</onlyRetractWhenCrossingOutline>
    <retractBetweenLayers>0</retractBetweenLayers>
    <useRetractionMinTravel>0</useRetractionMinTravel>
    <retractionMinTravel>3</retractionMinTravel>
    <retractWhileWiping>0</retractWhileWiping>
    <onlyWipeOutlines>1</onlyWipeOutlines>
    <avoidCrossingOutline>0</avoidCrossingOutline>
    <maxMovementDetourFactor>3</maxMovementDetourFactor>
    <toolChangeRetractionDistance>17</toolChangeRetractionDistance>
    <toolChangeExtraRestartDistance>0.5</toolChangeExtraRestartDistance>
    <toolChangeRetractionSpeed>600</toolChangeRetractionSpeed>
    <externalThinWallType>1</externalThinWallType>
    <internalThinWallType>1</internalThinWallType>
    <thinWallAllowedOverlapPercentage>20</thinWallAllowedOverlapPercentage>
    <singleExtrusionMinLength>0.9</singleExtrusionMinLength>
    <singleExtrusionMinPrintingWidthPercentage>40</singleExtrusionMinPrintingWidthPercentage>
    <singleExtrusionMaxPrintingWidthPercentage>200</singleExtrusionMaxPrintingWidthPercentage>
    <singleExtrusionEndpointExtension>0.2</singleExtrusionEndpointExtension>
    <horizontalSizeCompensation>0</horizontalSizeCompensation>

    <!--****************************************************************************************************************-->

</profile>
Dual Extrusion

If, like me, you have to set up your own dual extrusion profile, don't panic. Use Section 1 to 3 as a template, making sure to modify tool identification according to your machine's build.
Last edited by CitySlicker on Thu Apr 12, 2018 9:37 pm, edited 5 times in total.
User avatar
ClintGoss1
Posts: 24
Joined: Tue Apr 10, 2018 9:38 am

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

Wow ... Excellent work ... and thanks from those of us who like "Bare-metal programming"!

Any idea of S3D's reaction to a typo / compilation error?
-- Clint Goss
CitySlicker
Posts: 5
Joined: Tue Oct 06, 2015 10:03 am
Location: London
Contact: Website

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

ClintGoss1 wrote: Thu Apr 12, 2018 5:19 pm Any idea of S3D's reaction to a typo / compilation error?
I've updated the post with notes regarding the FFF's XML format and what happens when you make a mistake.
User avatar
ClintGoss1
Posts: 24
Joined: Tue Apr 10, 2018 9:38 am

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

CitySlicker wrote: Thu Apr 12, 2018 9:44 pm I've updated the post with notes regarding the FFF's XML format and what happens when you make a mistake.
Cool ... a tool to check for syntactic errors in the XML, but you are (of course) in undefined territory for semantic errors. It's the job of the S3D GUI to prevent those semantic errors.

For me, the value of what you have done is to de-couple what I'll call the "front end" (the GUI) from the "back end" of S3D (the slicing functions, along with the model import and management and GCode export). This allows other front ends to be built (assuming that the S3D profiles stays in XML and the definition stays relatively stable).

Personally, I'm thinking my preferred GUI would be an Excel spreadsheet that lays out the grid of parameters for all my prints, complete with the units (and unit conversions), documentation on each parameter (collected from tooltips, the old FAQ of the Day posts, and various newsgroup postings). I would munge the XLS / XLSX into XML using a perl script (still my preferred language) that would do all the semantic checks I wanted.

Of course, S3D could decide to "close source" their back end by changing the XML or obfuscating it - other companies have gone this route ... and the front end would become useless. Or they could reap the sales of S3D for those who wanted its back-end processing.
-- Clint Goss
brunofporto
Posts: 33
Joined: Wed Nov 29, 2017 7:36 am

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

Nice and finally solved my main issues with Simplify3D since I bought it!!! I am very happy.

I find it very stressful to manually configure material based configurations (cooling settings, extrusion multiplier, price, density, etc) EVERY TIME I CHANGE THE MATERIAL. That was just stupid.... At Slic3r I could have Print settings and materials settings easy.

Now... Why this is not standard????

Really? I needed to manually change the exported FFF so material specific configurations behave like material dependent settings? Why this is not standard from out of the box?
User avatar
mntbighker
Posts: 33
Joined: Sun Jun 24, 2018 7:33 pm
Location: Silicone Valley

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

I just this morning figured out all of the things material profiles DON'T store, and it's CRAZY. What the hell are the devs thinking? Having a material cost field that doesn't associate to the material? The first thing I did notice was I found no way to view, edit and delete the materials aside from the buttons next to the list. Now I see why. S3D barely supports differences in material at all. WOW! This is VERY disappointing indeed. Material differences are central to 3D printing. Maybe they think the target audience just orders the same PLA all day long?

edit: After reflecting on this and using S3D a bit more I guess the way to manage materials, etc is with a Library of FFF profiles. Instead of trying to hack the profiles by hand, just dedicate a profile to every material you print with. At that point I'm not sure how valuable having a materials drop down even is though?
Scratch built CoreXY with Duet Maestro
Heavily modified Ender 3 with Duet Maestro
MPCNC work in progress with Duet WiFi
brunofporto
Posts: 33
Joined: Wed Nov 29, 2017 7:36 am

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

mntbighker wrote: Wed Jul 04, 2018 4:03 pm I just this morning figured out all of the things material profiles DON'T store, and it's CRAZY. What the hell are the devs thinking? Having a material cost field that doesn't associate to the material? The first thing I did notice was I found no way to view, edit and delete the materials aside from the buttons next to the list. Now I see why. S3D barely supports differences in material at all. WOW! This is VERY disappointing indeed. Material differences are central to 3D printing. Maybe they think the target audience just orders the same PLA all day long?

edit: After reflecting on this and using S3D a bit more I guess the way to manage materials, etc is with a Library of FFF profiles. Instead of trying to hack the profiles by hand, just dedicate a profile to every material you print with. At that point, I'm not sure how valuable having a materials drop down even is though?
I did create a very complete profile with all my materials - only one profile for the printer - and several preset qualities for general use (Mechanical parts, art/general and small parts for a start).

It worked nicely and had all settings related to materials ok (price, temperatures, speeds, etc) just like it was imported worked fine.... Until I needed to change a small detail of one for the materials..... Hell..... even if it is specified that it is material exclusive when I changed and saved the setting was not saved material dependent!!!!!!! That is plain dumb The only way was to manually edit the FFF again and reimport the profile.

Then I decided to tweak some settings of my starting script... And again.... it saved all wrong. It saved into the quality profiles even if the profile does not specify this parameter as a quality one.... I got so mad that I just stopped using Simplify3D for good.
I'll wait for the next release. If they do not update this dumb profile system I'll give my license to some student and abandon this software forever.
cj.bravo
Posts: 4
Joined: Thu Nov 15, 2018 5:44 am

Re: Hacking the FFF Profile - Take control of materials, quality and extruders

So how can I add more than 2 extrudes on my profile?

my printer can do 4...

Return to “General Discussion and Tips”