1. Trouble with the game?
    Try the troubleshooter!

    Dismiss Notice
  2. Issues with the game?
    Check the Known Issues list before reporting!

    Dismiss Notice
  3. Before reporting issues or bugs, please check the up-to-date Bug Reporting Thread for the current version.
    0.35 Bug Reporting thread
    Solutions and more information may already be available.

Tutorial: How to Fix the Dual Clutch Transmission

Discussion in 'Troubleshooting: Bugs, Questions and Support' started by default0.0player, Mar 13, 2021.

  1. default0.0player

    default0.0player
    Expand Collapse

    Joined:
    Nov 30, 2018
    Messages:
    2,053
    0.22.1 UPDATE Officially fixed in 0.22.2
    The 0.22 update introduced a new problem
    you can change it back
    in line 395 and 562
    Code:
      elseif abs(gearIndex) > 1 then
    change it to
    Code:
      else



    ↓ ↓ ↓For already finished fix, scroll further down, download the dctfixd0p.zip in the attachment below.↓ ↓ ↓
    Put the zip into mods folder and drive the 8DCT on the ETK800, it's still required to manually edit the jbeam in the FCV, SBR4 and the Sunburst to lower the "lowShiftUpRPM" and "lowShiftDownRPM"


    About torque converter physics, read this thread.

    The current (0.21) DCT has some problems:

    1. Shift RPM too high, which is more than you think.
    2. The gearbox stays disengaged when the engine RPM reaches idle, won't downshift unless you hit the gas. When coasting downhill in D or M1 from standstill, no engine braking, nor you can upnshift.
    3. Unable to hill start properly with both pedals applied. Officially fixed in 0.22.2

    4. The intended clutch abuse prevention isn't perfect.

    These problems often interconnects each other and a lot trial-and-errors are needed during the bugfix.
    Bug fix is to edit the "shiftLogic-dctGearbox.lua" file

    1. Shift RPM too high
    At first glance, this is because of the shift up RPM is too high on some vehicles, such as the Vivace
    Code:
            "lowShiftDownRPM":[0,0,0,1400,1500,1400,1400,1400],
            "lowShiftUpRPM":[0,0,3300,2900,2600,2600,2600],
    Then you lower it but it didn't work. Also in the ETK800 the shift RPM
    Code:
            "lowShiftDownRPM":1300,
            "lowShiftUpRPM":2100,
    But it won't shift from 1st to 2nd at blow 3000 RPM
    2. This somewhat because when you drive in the wrong direction and the TCU disengages the clutch, but it also happen when the RPM reaches idle before the downshift, then the TCU won't downshift, and when you coast to 5km/h it's still in 5th gear.
    3. When starting from incline, you apply brake to prevent rolling back, and gas to increase engine power, then release brakes. The problem is the clutch won't engage, even 1% throttle and 1% brake disengage the clutch, making starting in such condition difficult.
    BeamNGdrive-0214011370-RELEASE-x643_10_20215_33_43PM.png
    4.
    Problem 3 is the easiest to fix and works independently, problem 1 and 2 interact each other and some what related to problem 4, which are a bit difficult to fix.
    Officially fixed in 0.22.2
    Fix problem 3
    in "shiftLogic-dctGearbox.lua" line 558 we already have a launch clutch logic but it's bypassed by line 578~580
    Code:
      if (M.throttle > 0 and M.brake > 0 and electrics.values.wheelspeed < 2) or gearbox.lockCoef < 1 then
        dctClutchRatio = 0
      end

    Launching an automatic is the easiest, full brake, shift to D, full gas, then release the brake at start. Since the torque converter transfer torque via fluid momentum, the only concern is the ATF oil temperature. Launching a manual is a bit tricky, first you stop at the startline, clutch in and shift to 1st, then apply the gas to rev the engine to its max torque RPM, then release the clutch pedal and floor it at start.
    In DCT, the TCU do that for you. The incorrect way is to slip the clutch with throttle, the correct way is to disengage the clutch at launch, only to engage them at brake release and control the RPM via two-step.
    Simply edit the > 0 to > 0.5 then you can start at incline with both pedals applied, without affect the launch two-step. Problem fixed

    Fix problem 2
    The problem with "stuck" in idle is the "always" stall prevention disengages the clutch when the engine is at idle speed, regardless of vehicle speed. Thus unless you increase the engine speed (hit the gas) the clutch won't re-engage. So we need to add another logic, to engage the clutch when the gearbox input RPM is higher than idle, so we are able to bring the engine speed up.
    In line 569 to 572
    Code:
      if engine.outputAV1 < engine.idleAV then
        --always prevent stalling
        dctClutchRatio = 0
      end
    Add another gearbox input speed. Since unlike automatics, the gearbox in DCT directly connects to the engine, no "gearboxInputAV", we need to calculate the gearbox input angular velocity by using the output AV multiply the current gear ratio, as shown.
    Code:
      if engine.outputAV1 < engine.idleAV and gearbox.outputAV1 * gearbox.gearRatios[gearIndex] < engine.idleAV then
        --always prevent stalling
        dctClutchRatio = 0
      end
    Now you can engine brake coasting from standstill, and the clutch re-engage at speed is partially fixed, the clutch abuse prevention when traveling in wrong direction is unaffected.
    BeamNGdrive-0214011370-RELEASE-x643_10_20219_54_28AM.png
    Now let's take a look at problem 1

    Note: Drive the ETK800 with 8DCT, accelerate gently and wait the aggression to lower than 0.5, then watch the upshift RPM on the UI app, compare it to 8AT.


    Fix problem 1

    The reason that reducing jbeam upshift RPM won't work is because the TCU is not "ready" when the clutch is not fully engaged in 1st gear.
    In automatics, the TCU control shift by monitoring gearbox input RPM, not engine RPM. This is because when you are accelerating gently (low aggression), and the shift up RPM is low, let's say, 1800RPM. Then you reaches 1900RPM, the torque converter slips 100 RPM and the gearbox RPM is 1800, the TCU commands upshift. If your apply a little more gas (still in low aggression) and the engine is at 2000RPM and the gearbox reaches 1800RPM, the TCU will command shift at the same point. If the TCU uses engine RPM instead, then apply a bit more gas will result in shifting a bit earlier, which is incorrect.
    As already mentioned, there's no "gearboxInputAV" in "shiftLogic-dctGearbox.lua". So the TCU use engine RPM not gearbox input RPM in DCT. In order to prevent upshift while slipping the clutch (upshift too early) the DCT won't "ready" because it cannot determine clutch slippage since there's no "gearboxInputAV", but if the clutch is fully engaged, the engine RPM is guaranteed to be the same as the gearbox RPM.
    Thus during the "launch RPM range" the TCU never ready to upshift, that's why the ETK 800 DCT won't upshift to 2nd below 3000RPM even the jbeam said upshift in 2100
    BeamNGdrive-0214011370-RELEASE-x643_13_20211_42_41PM.png
    To fix it, we need to figure out the "ready" condition of the DCT gearbox.
    When the next gear is not preselected correctly, not ready.
    When the engine is at idle speed, not ready(hence the coast to 1km/h still in 5th gear)
    When the clutch is not fully engaged, not ready(explained above)
    and the DCT shift is
    Upshift: preselect ready, disengage the previous clutch, cut ignition and engage the next clutch, all three at the same time.
    Downshift: preselect ready, disengage the previous clutch, rev-match by blip the throttle, then engage the next clutch.

    In line 582 to 584
    Code:
      if dctClutchRatio < 1 and abs(gearIndex) == 1 then
        M.timer.gearChangeDelayTimer = M.timerConstants.gearChangeDelay
      end
    This is to delay the shift when the clutch is not fully engaged in 1st gear, but we CAN shift when the engine speed and the gearbox speed are almost the same even the clutch is not fully engaged.
    For example the DCT clutch is rated 300Nm, but the engine output is only 30Nm at gentle acceleration, the dctClutchRatio is 0.1 is enough to bring the RPMs to the same.
    Add an additional logic to verify this
    Code:
      if (dctClutchRatio < 1 and gearbox.outputAV1 * gearbox.gearRatios[gearIndex] < engine.outputAV1 - 10) and abs(gearIndex) == 1 then --edit
        M.timer.gearChangeDelayTimer = M.timerConstants.gearChangeDelay
      end
    When the engine RPM is no more than 100 RPM higher than the gearbox input, do not delay the shift.(1RPM is approximately 0.1AV)
    There's another delay that prevents the shift from being initiated, which is in line 513
    Code:
      if M.timer.gearChangeDelayTimer <= 0 and gearbox[dct.primaryAccess.clutchRatioName] >= 1 then
    If we remove the "and gearbox[dct.primaryAccess.clutchRatioName] >= 1" the gearbox will downshift to 1st when traveling in wrong direction, making the clutch abuse prevention ineffective.
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_12_05PM.png
    Fix problem 2, again
    Just change the gearbox[dct.primaryAccess.clutchRatioName] >= 1 to > 0 and not to affect the clutch abuse prevention.
    Then the gearbox will keep the gear during wrong direction w/throttle and downshift when steered to the correct direction w/o throttle, as shown
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_13_59PM.png BeamNGdrive-0214011370-RELEASE-x643_13_20212_14_21PM.png

    But this solution isn't perfect. If you coast in the wrong direction to very slow, then steer to the correct direction, no downshift.
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_17_51PM.png BeamNGdrive-0214011370-RELEASE-x643_13_20212_18_05PM.png
    This is because at this speed, both the gearbox input and the engine is at idle, the clutchRatio is 0, not >0, no downshift.

    We need to get the gearbox to downshift even when the clutch is fully disengaged(due to low RPM) after steering the vehicle back to correct direction at low speeds. Thus we need to add an additional logic
    "or gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 >= 0" this is to make the gearbox to keep the current gear(not downshift to 1st) when traveling in wrong direction, and do downshift when the vehicle is steered back to the correct direction, even at very low speeds(low gearbox input RPM)
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_24_12PM.png BeamNGdrive-0214011370-RELEASE-x643_13_20212_24_20PM.png
    However, this cause additional trouble, since when in Neutral gear when at speed, the clutch ratio is 0 and the vehicle is traveling in the correct direction, so the TCU the rev-match rev-match rev-match rev-match rev-match rev-match rev-match
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_32_20PM.png
    An exception is needed: not to downshift in N "and automaticHandling.mode ~= "N" "
    In conclusion, change the line 513 to
    Code:
      if M.timer.gearChangeDelayTimer <= 0 and (gearbox[dct.primaryAccess.clutchRatioName] > 0 or gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 >= 0 and automaticHandling.mode ~= "N") then
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_35_33PM.png
    Problem 2 fixed

    Fix problem 4
    The intended clutch abuse prevention isn't perfect before or after fixing problem 1, 2 and 3. Since you can shift to R and hit the gas when the vehicle is still traveling forward at speed.
    BeamNGdrive-0214011370-RELEASE-x643_13_20212_46_54PM.png
    In line 563 to 565
    Code:
        if gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 >= 0 then
          dctClutchRatio = 1
        end
    Also note the line 558
    Code:
      if abs(gearIndex) == 1 and M.throttle > 0 then
    We know that the current logic is when in 1st or reverse, use the launch logic, when at 2nd or above, either fully engage the clutch(or disagage by stall prevention in other lines), or fully disengage the clutch when the gearbox and the vehicle are the opposite direction. This logic does not prevent the screenshot above from happenning.
    Remove it, then we can add another refined logic elsewhere, either delete the "if gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 >= 0 then" and the "end" or add an"--" in front of them
    Code:
        --if gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 >= 0 then
          dctClutchRatio = 1
        --end
    the logic has been disabled.

    Now add the refined logic.
    Code:
      if (gearbox.outputAV1 * gearbox.gearRatios[gearIndex] * engine.outputAV1 < 0 and electrics.values.wheelspeed > 2) or gearbox.lockCoef < 1 then
        dctClutchRatio = 0
      end
    This is when the gearbox and the vehicle velocity are opposite polarity and the vehicle is traveling in the wrong direction AND with significant speed (above 8km/h) fully disengage the clutch.

    Add the logic in line 568 or 573 or 577 or 581, just inside the "local function updateInGear(dt)" but not inside other function.
    Then
    BeamNGdrive-0214011370-RELEASE-x643_13_20213_04_46PM.png BeamNGdrive-0214011370-RELEASE-x643_13_20213_05_01PM.png
    Problem 4 fixed
    If you play Arcade mode simply do the same edit in arcade sections as well.

    ALL DONE! ENJOY

    You can put the zip into mods folder and drive the 8DCT on the ETK800, it's still required to manually edit the jbeam in the FCV, SBR4 and the Sunburst to lower the "lowShiftUpRPM" and "lowShiftDownRPM"
    In the lua inside the zip, search key word "--adjust" to quickly locate what had changed in the fix.
     

    Attached Files:

    #1 default0.0player, Mar 13, 2021
    Last edited: Apr 17, 2021
    • Like Like x 3
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice