Results 1 to 16 of 16

Thread: NGC4 TCMs not following shift tables

  1. #1
    Tuner in Training VPP1776's Avatar
    Join Date
    May 2023
    Location
    Sparta, WI
    Posts
    33

    NGC4 TCMs not following shift tables

    Ok, maybe I am crazy, but I keep running into an issue where any TCM I flash with beta won't follow the 5-6 and 6-5 shift tables I build... Like for instance, 5-6 is supposed to happen at 2208 OSS rpm at 32.5% TPS. But when I drive the truck and log things it wants to make that shift at 3100 OSS rpm at 30-32% TPS reading. It also refuses to down shift on the programmed schedule and wants to hang on to 6th till the bitter end. Which is not helpful with trucks like the one I am fighting right now with an S472 hanging on the manifold.

    I have flashed back with the most recent stable software on all of them that I have ran into this issue and it hasn't helped. Should I do a segment swap from one of my earlier reads with the stable software on TCMs with the same OS?

  2. #2
    Tuner in Training DieselDave89's Avatar
    Join Date
    Oct 2021
    Location
    Utah
    Posts
    25
    I've been running into the same issue. If you find the answer to it, would you mind posting it up? One thing I noticed is that it won't shift into 6th until 5th lock up occurs. No matter what I do to 5th lockup though, it won't lock the torque converter sooner. I'm not sure if that has anything to do with it, but you might try playing with 5th lock up with the previous stable versions. If it works, let me know please.

  3. #3
    Tuner in Training VPP1776's Avatar
    Join Date
    May 2023
    Location
    Sparta, WI
    Posts
    33
    Quote Originally Posted by [email protected] View Post
    I've been running into the same issue. If you find the answer to it, would you mind posting it up? One thing I noticed is that it won't shift into 6th until 5th lock up occurs. No matter what I do to 5th lockup though, it won't lock the torque converter sooner. I'm not sure if that has anything to do with it, but you might try playing with 5th lock up with the previous stable versions. If it works, let me know please.
    I found some overlaps on my 5-6 and 6-5 that made a big difference. Helped get it to stay locked too. I also had to back my WOT shift points down so it would shift right in tow haul with a load. That and I loaded the newest Beta version and I haven't seen the issues since. Post up your current file, I'll see if I can spot what is going on now that I have a better idea what I was doing wrong.

  4. #4
    Tuner in Training DieselDave89's Avatar
    Join Date
    Oct 2021
    Location
    Utah
    Posts
    25
    SELECTABLE SHIFT CALCULATOR.xlsx
    68rfe V1.7_ tcc thresholds adjusted.hpt

    Here is the last file I uploaded before I got deployed. It may be pretty wild in there because I was trying everything to get it to shift earlier into 6th.

    I also created an excel file along time ago that I have been making updates to when I get time. I haven't added the torque converter plots yet. Maybe I'll have some time out here to finish it up. This file allows you to select what gear/s you want to show on the graph(can have all or none), and whether or not to show the shift points to based on throttle %. I have both throttle degree and % logged on there because I haven't been able to pinpoint exactly which one it shifts based off of...

    I saw someone else on here the other day had a really cool program that did a similar thing but was much more interactive. You could change the shift points directly on the graph.

  5. #5
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    Pretty challenging to incorporate TCC schedules in an excel sheet because on these things it’s based on turbine speed and throttle angle and slip that occurs is difficult to account for, ends up becoming more of a by feel. Been toying with the idea of changing the code in my calibration so TCC uses vehicle speed on the lockup tables rather than turbine speed, not sure how it would affect other things in the code though.

  6. #6
    Tuner in Training DieselDave89's Avatar
    Join Date
    Oct 2021
    Location
    Utah
    Posts
    25
    I agree with the TCC scheduling being difficult to graph. I think the factory settings are already pretty low for each gear, then they use the apply/release thresholds to change when it locks up depending on what mode you're in(T/H, regular, 4WD, etc). I was thinking I might be able to just put the thresholds for each mode on the graph and have them be selectable for each gear. May not be worth it though. It would definitely be a very rough idea on where it should lockup because of the slip. The last few times I changed the TCC schedule, it was repetitive by feel. Nope this is too early, Reflash, nope, its too late now. Reflash, that's better.

    Jim P 2.0, if you are willing to, could you go into some more depth on how you know the TCC lock up to work. Mainly the relationship between engine rpm, turbine rpm, slip ratios. Anything of that nature. I know there are things in the files that aren't mapped out that are affecting how if works based off what you have told me in past posts. But I'm still trying to understand exactly how the computer determines it needs to go into partial lockup or full lockup.

    edit: do you know how throttle angle relates to or is calculated from throttle %?
    Throttle % obviously goes 0-100, but the throttle angle goes up to 134?? I cannot find anything to log that matches that.

    I would love to learn how to do all this work in the hex code, but I'm not quite there yet...lol, still learning everyday though.
    Last edited by DieselDave89; 05-14-2024 at 07:02 AM. Reason: added a question

  7. #7
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    Need to learn PowerPC to really begin to understand what’s in the ECM’s and TCM’s on these trucks

  8. #8
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    I’ll share some code for tcc lockup later

  9. #9
    Tuner in Training DieselDave89's Avatar
    Join Date
    Oct 2021
    Location
    Utah
    Posts
    25
    Quote Originally Posted by Jim P 2.0 View Post
    Need to learn PowerPC to really begin to understand what’s in the ECM’s and TCM’s on these trucks
    do you have a site you would suggest I start looking at vs just scouring the web/ youtube trying to find tutorials?

  10. #10
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    The only real resources out there I’ve found for tutorials is for shit like Nintendo gameboy game mods and stuff, not of any real help. It’s kind of a figure it out on your own kinda thing. Download processor manuals and try to wrap the brain around it. It’s a challenge for sure.

  11. #11
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    Chrysler does weird things with table lookup and stuff too compared to how Cummins does it

  12. #12
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    here's code out of a 2018 68RFE

    void FUN_003bbee0(void)

    {
    undefined uVar1;
    byte bVar2;

    bVar2 = GENFGA;
    if (((~bVar2 & 1) == 0) && (bVar2 = DAT_600024e0, (bVar2 & 1) == 0)) {
    bVar2 = GENFG1;
    if ((bVar2 & 4) != 0) {
    return;
    }
    bVar2 = IGCODE;
    bVar2 = ~bVar2;
    if ((bVar2 & 8) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_UL-PL_Table_for_2nd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_PL-Zero_Slip_Table_for_2nd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Zero_Slip-PL_Table_for_2nd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Unlock_Table_for _2nd_Gear);
    }
    else if ((bVar2 & 0x10) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_UL-PL_Table_for_2'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_PL-Zero_Slip_table_for_2'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Zero_Slip-PL_Table_for_2'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Unlock_Table_for _2'_Gear);
    }
    else if ((bVar2 & 0x20) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_UL-PL_Table_for_3rd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_PL-Zero_Slip_Table_for_3rd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Zero_Slip-PL_Table_for_3rd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Unlock_Table_for _3rd_Gear);
    }
    else if ((bVar2 & 0x40) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_UL-PL_Table_for_4th_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_PL-Zero_Slip_Table_for_4th_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Zero_Slip-PL_Table_for_4th_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Unlock_Table_for _4th_Gear);
    }
    else {
    if ((bVar2 & 0x80) != 0) {
    return;
    }
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_UL-PL_Table_for_4'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_PL-Zero_Slip_Table_for_4'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Zero_Slip-PL_Table_for_4'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Speed_Control_Unlock_Table_for _4'_Gear);
    }
    }
    else {
    bVar2 = DAT_60002541;
    if ((~bVar2 & 0x40) == 0) {
    bVar2 = GENFG1;
    if ((bVar2 & 4) != 0) {
    return;
    }
    bVar2 = IGCODE;
    bVar2 = ~bVar2;
    if ((bVar2 & 8) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_UL-PL_Table_for_2nd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_PL-Zero_Slip_table_for_2nd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Zero_Slip-PL_Table_for_2nd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Unlock_table_for_2nd_Gear) ;
    }
    else if ((bVar2 & 0x10) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_UL-PL_Table_for_2'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_PL-Zero_Slip_Table_for_2'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Zero_Slip-PL_Table_for_2'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Unlock_Table_for_2'_Gear);
    }
    else if ((bVar2 & 0x20) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_UL-PL_Table_for_3rd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_PL-Zero_Slip_Table_for_3rd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Zero_Slip-PL_Table_for_3rd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Unlock_Table_for_3rd_Gear) ;
    }
    else if ((bVar2 & 0x40) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_UL-PL_Table_for_4th_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_PL-Zero_Slip_Table_for_4th_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Zero_Slip-PL_Table_for_4th_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Unlock_Table_for_4th_Gear) ;
    }
    else {
    if ((bVar2 & 0x80) != 0) {
    return;
    }
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_UL-PL_Table_for_4'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_PL-Zero_Slip_Table_for_4'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Zero_Slip-PL_table_for_4'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&DSM_Unlock_Table_for_4'_Gear);
    }
    }
    else {
    bVar2 = DAT_600026c5;
    if ((~bVar2 & 0x80) == 0) {
    bVar2 = GENFG1;
    if ((bVar2 & 4) != 0) {
    return;
    }
    bVar2 = IGCODE;
    bVar2 = ~bVar2;
    if ((bVar2 & 8) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_UL-PL_Table_for_2nd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_PL-Zero_Slip_Table_for_2nd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Zero_Slip-PL_Table_for_2nd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Unlock_Table_for_2nd _Gear);
    }
    else if ((bVar2 & 0x10) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_UL-PL_Table_for_2'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_PL-Zero_Slip_table_for_2'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Zero_Slip-PL_Table_for_2'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Unlock_Table_for_2'_ Gear);
    }
    else if ((bVar2 & 0x20) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_UL-PL_Table_for_3rd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_PL-Zero_Slip_Table_for_3rd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Zero_Slip-PL_Table_for_3rd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Unlock_Table_for_3rd _Gear);
    }
    else if ((bVar2 & 0x40) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_UL-PL_Table_for_4th_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_PL-Zero_Slip_Table_for_4th_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Zero_Slip-PL_Table_for_4th_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Unlock_Table_for_4th _Gear);
    }
    else {
    if ((bVar2 & 0x80) != 0) {
    return;
    }
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_UL-PL_Table_for_4'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_PL-Zero_Slip_Table_for_4'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Zero_Slip-PL_Table_for_4'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Alternate_Unlock_Table_for_4'_ Gear);
    }
    }
    else {
    bVar2 = GENFG1;
    if ((bVar2 & 4) != 0) {
    return;
    }
    bVar2 = IGCODE;
    bVar2 = ~bVar2;
    if ((bVar2 & 8) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&UL-PL_Table_for_2nd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&PL-Zero_Slip_Table_for_2nd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Zero_Slip-PL_Table_for_2nd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Unlock_Table_for_2nd_Gear);
    }
    else if ((bVar2 & 0x10) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&UL-PL_Table_for_2'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&PL-Zero_Slip_Table_for_2'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Zero_Slip-PL_Table_for_2'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Unlock_Table_for_2'_Gear);
    }
    else if ((bVar2 & 0x20) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&UL-PL_Table_for_3rd_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&PL-Zero_Slip_Table_for_3rd_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Zero_Slip-PL_Table_for_3rd_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Unlock_Table_for_3rd_Gear);
    }
    else if ((bVar2 & 0x40) == 0) {
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&UL-PL_Table_for_4th_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&PL-Zero_Slip_Table_for_4th_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Zero_Slip-PL_Table_for_4th_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Unlock_Table_for_4th_Gear);
    }
    else {
    if ((bVar2 & 0x80) != 0) {
    return;
    }
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&UL-PL_Table_for_4'_Gear);
    DAT_60002712 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&PL-Zero_Slip_Table_for_4'_Gear);
    DAT_60002713 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Zero_Slip-PL_Table_for_4'_Gear);
    DAT_60002714 = uVar1;
    uVar1 = DAT_600020de;
    uVar1 = FUN_003ac8f0(uVar1,&Unlock_table_for_4'_gear);
    }
    }
    }
    }
    DAT_60002715 = uVar1;
    return;
    }

  13. #13
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    basically all it's doing is looking at some configuration settings, throttle angle, turbine speed, current gear, current TCC state, TCC state request, it scans through the tables till it finds a match, does some interpolation then writes the output of the interpolation

  14. #14
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    There is much more than what’s shown here that goes into the TCC lockup schedules but that there is the code for the table selection with 99% of it identified.

  15. #15
    Tuner in Training DieselDave89's Avatar
    Join Date
    Oct 2021
    Location
    Utah
    Posts
    25
    Dang! That's quite the code! It's impressive that you can make sense of that. So all this code is for is looping through else if statements to determine what table it needs to pull other values from? I have done some vba coding through Excel with pretty interactive workbooks that I created from scratch, but nothing quite to this level. It will be fun to start learning it.

  16. #16
    Advanced Tuner
    Join Date
    Sep 2023
    Posts
    260
    Looping is basically all the ecm code does, it loops through line by line, reading values, writing them for use later in the code and stuff but yeah it scans through the modes till it finds a match with previous written values then scans through the schedule tables for the matching desired operation and does some interpolation and stores the output for use elsewhere in the code.