Jump to content

Vw Golf IV Variant + DSG


Emy D

Postare recomandată

Laurentiu_LWR

Salutare...

Recunosc ca nu am avut foarte mult timp de lecturat...dar modificarile astea...termoflot...pompe...etc sunt necesare la conversia DSG sau "complicatiile" sunt doar pentru ca vrei sa tragi rulota?

Link către comentariu
  • 2 weeks later...

Ideea e asa: 

1. Eu am acum 2 radiatoare de ulei: Cel OEM (mai mare) si cel de DSG. 

Stock, E doar cel de ulei motor.

2. Debitul de antigel e x l/h. Adaugand un al doilea radiator pe acelasi traseu, debitul s-a cam injumatatit (x l/h / 2) Verificat cu furtunul scos, vine antigelul chiar incet prin acel furtun. Foarte incet. 

Antigelul preia intai caldura din uleiul de DSG, care la tractat se incalzeste si ala suficient de mult. Din Radiatorul de DSG -> trece apoi antigelul incins... in cel de ulei OEM....care nu mai face fata. 

3. ce modific eu: 

3.1 Pompa suplimentara de antigel care ajuta sa treaca un debit mai mare de antigel pentru aceeasi suprafata de racire (o sa fie un pic mai mare ca pun si radiator de ulei DSG mai mare). Pompa e comandata de un Shally Plus Uni (functioneaza la 12V) - are multiple input-uri si out-uri si beneficiaza de automatizari locale (script sau schedule by other values - temp). 

3.2. Tot prin Shelly Plus Uni - o sa controlez una din treptele ventilatoarelor. Banuiesc ca o sa vreau sa controlez treapta cea mai mare pt ca vreau si Clima sa functioneze in mers. 


Conditii: 


Daca Input voltage > 13V = foloseste conditiile de mai jos pentru a porni X sau Y chestii. 
Daca Input digital 1 = on sau off ( continuitate la masa prin switch-ul de la priza de pe carlig in functie de cum functioneaza) => Mod tractare -> Porneste ventilatoarele pe treapta 2. 

Daca temp Ulei de pe teava tur turbo > 90 grade C => Turn on Pompa recirculare. Sub 80 grade C = Turn off pompa de recirculare. 

Daca temp antigel > 95 grade C + Input voltage <30V (inseamna ca motorul e oprit) - Tine pompa pornita pentru inca 10 min. Daca input voltage scade sub 12V, opreste tot. 

Scriptul o sa fie ceva de genul (asta e in pseudocod): 

// Rulează în buclă, de ex. o dată la 100ms / 1s

LOOP FOREVER:

 

  READ inputVoltage

  READ digitalInput1

  READ oilTemp

  READ coolantTemp

 

  // 0) Regula de siguranță: dacă tensiunea scade sub 12V, oprește tot

  IF inputVoltage < 12V THEN

      fanSpeed   = 0

      recircPump = OFF

      cooldownTimer = 0

      CONTINUE LOOP

  ENDIF

 

  // 1) Condiție generală: aplică logica doar dacă inputVoltage > 13V

  IF inputVoltage > 13V THEN

 

      // 1a) Mod tractare: dacă Digital Input 1 este ON => ventilatoare pe treapta 2

      IF digitalInput1 == ON THEN

          fanSpeed = 2

      ENDIF

 

      // 1b) Pompa recirculare în funcție de temperatura uleiului (cu histerezis)

      IF oilTemp > 90°C THEN

          recircPump = ON

      ELSE IF oilTemp < 80°C THEN

          recircPump = OFF

      ENDIF

 

      // 1c) Post-răcire după oprirea motorului:

      // Dacă antigel >95°C și "motor oprit" (inputVoltage <30V),

      // ține pompa pornită încă 10 minute

      IF coolantTemp > 95°C AND inputVoltage < 30V THEN

          recircPump = ON

          IF cooldownTimer == 0 THEN

              cooldownTimer = 10 minutes

          ENDIF

      ENDIF

 

      // 1d) Decrementarea temporizatorului și oprirea pompei după expirare,

      // dar numai dacă nu există altă condiție care o cere ON (ex: oilTemp > 90)

      IF cooldownTimer > 0 THEN

          cooldownTimer = cooldownTimer - elapsedTime

 

          IF cooldownTimer <= 0 THEN

              cooldownTimer = 0

 

              // după cele 10 minute, pompa revine la controlul normal (oilTemp)

              // (adică nu o forțăm OFF aici, doar încetăm "forțarea ON")

              // Dacă vrei “OFF garantat după 10 min”, se poate pune recircPump=OFF aici.

          ENDIF

      ENDIF

 

  ELSE

      // Dacă inputVoltage nu e >13V, nu aplicăm logica de “pornit X/Y”

      // (în afară de regula de sub 12V deja tratată)

      // Aici poți lăsa ieșirile neschimbate sau seta un default.

      // Exemplu safe:

      fanSpeed = 0

      // recircPump rămâne cum e / sau OFF, după politica dorită

  ENDIF

 

END LOOP




Asta o sa transforme acest setup in racire activa bazata pe anumite conditii. :D

 

Link către comentariu
  • 2 weeks later...

Hristos a inviat!

Am ajuns la o varianta finala a scriptului din Shelly Plus Uni. Las codul mai jos pentru cine are nevoie sa isi faca la fel:

Ce face modulul:

Ventilatoare fortate mai mult decat ce comanda releul masinii (suprascrie comenzile releului de sub lonjeron), porneste pompa suplimentara de antigel cand e nevoie, lasa controlul manual din aplicatie activ (shelly, sau integrare in Home Assistant), se adapteaza dupa cerinta manuala, protejeaza bateria, Mod urgenta, mod afterrun (dupa oprire motor, etc), mod failsafe daca crapa senzorii de temp... 

Si mai am 2 inputuri digitale (pe care pot pune intrerupator pt comenzi manuale) sau conexiune automata cand se cupleaza rulota la priza (dar mai trebuie sa trag niste fire pentru asta. 

script:1 - Custom cooling system controller (Shelly Plus Uni, 2x Load relays, 2 x digital temp sensors  -40+125 grade C). 
 

/**
 * 1.9 TDI CUSTOM COOLING SYSTEM CONTROLLER
 * Version: V15 (Advanced Afterrun & Production Ready)
 * ------------------------------------------------------------------
 * NEW: Fan continues during Afterrun if Battery > 12.5V.
 * FIX: Absolute enforcement of battery thresholds for both loads.
 */

// --- SYSTEM THRESHOLDS (ROAD READY) ---
let CONFIG = {
  v_engine_on: 13.2,      // Threshold to detect Alternator activity
  
  oil_on: 95.0,           // Pump activation temperature
  oil_off: 87.0,          // System hysteresis (Low point)
  
  oil_fan_on: 105.0,      // Fan assistance for Oil Rad
  oil_fan_off: 92.0,
  
  cool_fan_on: 95.0,      // Fan assistance for Coolant
  cool_fan_off: 85.0,
  
  afterrun_time: 600000,  // 10-minute maximum pump runtime (ms)
  
  batt_limit: 12.2,       // Final cutoff for Pump (protects starting capacity)
  fan_batt_limit: 12.5,   // High-safety cutoff for Fan during Afterrun
  
  hard_oil: 110.0,        // Emergency Thermal Override (Oil)
  hard_cool: 105.0,       // Emergency Thermal Override (Coolant)
  hard_batt: 11.8         // Absolute Low-Voltage Cutoff
};

let state = { 
  afterrun_active: false, 
  hard_active: false,
  was_engine_on: false,
  start_time: 0,
  last_pump: false,       // Actual relay state
  last_fan: false,        // Actual relay state
  logic_pump: false,      // Script intended state
  logic_fan: false,       // Script intended state
  error_count: 0          // Null reading persistence
};

function controlLogic() {
  let vStat = Shelly.getComponentStatus("voltmeter:100");
  let oStat = Shelly.getComponentStatus("temperature:100"); 
  let cStat = Shelly.getComponentStatus("temperature:101"); 
  let pSwitch = Shelly.getComponentStatus("switch:0");
  let fSwitch = Shelly.getComponentStatus("switch:1");
  
  // --- 0. PHYSICAL SYNC & MANUAL LOGS ---
  if (pSwitch && pSwitch.output !== state.last_pump) {
    state.last_pump = pSwitch.output;
    print(">>> MANUAL: Pump toggled " + (state.last_pump ? "ON" : "OFF"));
  }
  if (fSwitch && fSwitch.output !== state.last_fan) {
    state.last_fan = fSwitch.output;
    print(">>> MANUAL: Fan toggled " + (state.last_fan ? "ON" : "OFF"));
  }

  // --- 1. DATA COLLECTION & NULL-SAFETY ---
  let volt = (vStat && typeof vStat.voltage === "number") ? vStat.voltage : 12.0;
  let sensors_ok = (oStat && typeof oStat.tC === "number") && (cStat && typeof cStat.tC === "number");
  
  if (!sensors_ok) state.error_count++; else state.error_count = 0;
  
  let oil = (oStat && sensors_ok) ? oStat.tC : 0;
  let cool = (cStat && sensors_ok) ? cStat.tC : 0;
  let t15 = (volt >= CONFIG.v_engine_on);
  let is_failsafe = (state.error_count >= 3);

  // --- 2. ENGINE TRANSITION LOGIC ---
  if (state.was_engine_on && !t15) {
    print(">>> ENGINE STOP: Evaluating Afterrun requirements...");
  }
  state.was_engine_on = t15;

  let pump_req = state.logic_pump;
  let fan_req = state.logic_fan;

  // --- 3. STANDARD THERMOSTATIC OPERATION ---
  if (sensors_ok && !is_failsafe) {
    if (oil >= CONFIG.oil_on) pump_req = true;
    else if (oil <= CONFIG.oil_off) pump_req = false;
    
    if (oil >= CONFIG.oil_fan_on || cool >= CONFIG.cool_fan_on) fan_req = true;
    else if (oil <= CONFIG.oil_fan_off && cool <= CONFIG.cool_fan_off) fan_req = false;
  }

  // --- 4. ENGINE ON / OFF ROUTINES ---
  if (t15) {
    // Engine Running: Hard Mode Check
    if (is_failsafe || (oil >= CONFIG.hard_oil || cool >= CONFIG.hard_cool)) {
      pump_req = true; fan_req = true; state.hard_active = true;
    }
    if (sensors_ok && state.hard_active && (oil <= CONFIG.oil_off && cool <= CONFIG.cool_fan_off)) {
      state.hard_active = false;
    }
  } else {
    // Engine Stopped: Advanced Afterrun Logic
    state.hard_active = false;
    let is_hot = (oil >= CONFIG.oil_on || oil >= CONFIG.hard_oil || cool >= CONFIG.hard_cool);
    
    if ((pump_req || is_hot || is_failsafe) && !state.afterrun_active) {
      state.afterrun_active = true;
      state.start_time = Date.now();
      print(">>> SYSTEM: Entering Advanced Afterrun mode.");
    }
    
    if (state.afterrun_active) {
      let timeout = (Date.now() - state.start_time) > CONFIG.afterrun_time;
      let cooled = (sensors_ok && oil <= CONFIG.oil_off && cool <= CONFIG.cool_fan_off);
      
      if (timeout || (sensors_ok && cooled)) {
        pump_req = false; fan_req = false; state.afterrun_active = false;
        print(">>> SYSTEM: Afterrun completed.");
      } else { 
        pump_req = true; 
        // Allow fan only if battery is exceptionally healthy
        fan_req = (volt >= CONFIG.fan_batt_limit); 
      }
    } else {
      pump_req = false; fan_req = false;
    }
  }

  // --- 5. EXECUTION & BATTERY SAFETY CUTOFFS ---
  if (volt < CONFIG.batt_limit) pump_req = false; // Final pump cutoff
  if (volt < CONFIG.fan_batt_limit && !t15) fan_req = false; // Force Fan OFF on Engine OFF + dropping battery
  if (volt < CONFIG.hard_batt) { pump_req = false; fan_req = false; } // Absolute cutoff

  let force_pump = (!t15 && state.last_pump !== pump_req);
  let force_fan = (!t15 && state.last_fan !== fan_req);

  if (pump_req !== state.logic_pump || force_pump) {
    print("--- PUMP CONTROL: " + (pump_req ? "ON" : "OFF"));
    state.logic_pump = pump_req;
    state.last_pump = pump_req;
    Shelly.call("Switch.Set", { id: 0, on: pump_req }); 
  }
  
  if (fan_req !== state.logic_fan || force_fan) {
    if (!t15 && !fan_req && state.last_fan) {
       print(">>> INFO: Fan stopped to save battery (< " + CONFIG.fan_batt_limit + "V)");
    }
    print("--- FAN CONTROL: " + (fan_req ? "ON" : "OFF"));
    state.logic_fan = fan_req;
    state.last_fan = fan_req;
    Shelly.call("Switch.Set", { id: 1, on: fan_req }); 
  }
  
  // --- 6. DASHBOARD ---
  let sys_mode = is_failsafe ? "!!! SENSOR FAIL !!!" : (state.hard_active ? "!!! HARD MODE !!!" : (state.afterrun_active ? ">>> AFTERRUN" : "NORMAL"));
  print("["+sys_mode+"] | Oil: "+(sensors_ok?oil.toFixed(1):"NULL")+" | Water: "+(sensors_ok?cool.toFixed(1):"NULL")+" | V: "+volt.toFixed(2)+" | Eng: "+(t15?"ON":"OFF"));
}

Timer.set(5000, true, controlLogic);


Si alt doilea script care o sa monitorizeze daca crapa primul script si il reporneste (Watchdog). 

 

/**
 * SHELLY WATCHDOG
 * Target Script: Oil & Water Cooling Management (ID: 1)
 * Function: Monitors and auto-restarts the cooling logic if it crashes.
 */

let MAIN_SCRIPT_ID = 1; 

function checkMainScript() {
  Shelly.call(
    "Script.GetStatus", 
    { id: MAIN_SCRIPT_ID }, 
    function(result, error_code, error_message) {
      // Verifica daca scriptul exista dar este oprit
      if (result && result.running === false) {
        print("!!! WATCHDOG ALERT: Cooling script (ID: " + MAIN_SCRIPT_ID + ") is STOPPED. Restarting...");
        
        Shelly.call("Script.Start", { id: MAIN_SCRIPT_ID }, function(res) {
          if (res) {
            print(">>> WATCHDOG: Cooling script has been successfully revived.");
          }
        });
      } else if (!result) {
        // Daca ID-ul nu exista sau modulul e blocat
        print("!!! WATCHDOG ERROR: Communication failure. Code: " + error_code);
      }
    }
  );
}

// Verifica la fiecare 60 de secunde
Timer.set(60000, true, checkMainScript);

print("WATCHDOG: Active monitoring for Script ID " + MAIN_SCRIPT_ID);



Si asta e modulul: 

image.thumb.png.65f5c997e309ea7bd53456fe4726e624.png 

Unde va fi pus: pe tragarul fata. intre baterie si motor. Senzorii deocamdata o sa fie "atasati" de teava de ulei spre turbo (interes direct in sanatatea turbinei ) si unul atasat de furtunul care e intre cutia DSG si termoflot. Imi asum o mica diferenta de temperaturi cu metoda asta deocamdata. Daca gasesc ceva sa si cuplez senzorii direct in lichid (ulei / antigel) si etanseaza 5.85 mm (diametrul lor) e perfect. Pana atunci, vedem cum se descurca asa.  :)

:)

He he... :Driver:

Link către comentariu

Pentru a adăuga comentarii este necesară înregistrarea sau autentificarea

Trebuie să aveţi un cont de membru pentru a adăuga comentarii

Înregistrare membru

Înscrierea unui nou cont de membru. Este foarte uşor!

Înregistrare cont nou

Autentificare

Aveţi deja un cont de membru? Conectaţi-vă aici.

Autentificare în cont
  • Activi pe această pagină   0 membri

    • Niciun utilizator înregistrat nu vizualizează această pagină acum.
×
×
  • Create New...

 Functionarea acestui site este sustinuta de cele cateva bannere afisate intre posturi. Ar fi o placere pentru noi daca ar fi adaugat site-ul nostru in lista de exceptii ad-block in browserul tau. Promitem si veti vedea ca nu avem reclame intruzive si nici deranjante (nimic cu sunet,video sau all-screen). Multumim!