/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package IND; /** * * @author Ondřej */ public class BakalarskaPraceTlumivka { static final double Vykon = 208376.0; static final double NapetiPrim = 400.0; static final double ProudPrim = Vykon / NapetiPrim; static final int PocetPoloh = 2; static final double kPlneniPrim = 0.8; static final double kPridavPrim = 1.25; static final double PridavekHmotnosti = 1.1; static final int KanalPoloh = 6; static final double OtepleniOleje = 7; static final double MaxOtepleni = 65 - OtepleniOleje - 38.47; static final double NapetiNakratko = 30; static final int Frekvence = 50; static final int MaxZtratyNakratko = 300; static final int MaxZtratyNaprazdno = 200; static final int MaxVyskaVinuti = 700; static final int MinVyskaVinuti = 100; static final double ZtratCislo = 1.1; static final double PlneniZeleza = 0.97; static final int KanalUJadra = 10; static final int KanalMeziFazemi = 12; static final double HorniKoncVzdal = 20; static final double DolniKoncVzdal = 20; static final int MinAJadra = 10; static final int MaxAJadra = 200; static final int KrokAJadra = 1; static final double Syceni = 1.5; static final double HMezer = 5.0; static final int MinSirkaPolPrim = 5; static final int MaxSirkaPolPrim = 40; static final int KrokSirkyPolPrim = 1; static final double KurzEuro = 27.46; static final double KurzDolar = 24.47; public static class Parametry { public int aJadra; public double sJadra; public int sirkaPolPrim; public Parametry(int d, double s, int sp) { this.aJadra = d; this.sJadra = s; this.sirkaPolPrim = sp; } } public static class Kriteria { public double Cena; public double ThetaStr; public double P0; public double PK; public double L; public double hVin; public Kriteria(double c, double t1, double p0, double pk, double l, double h) { this.Cena = c; this.ThetaStr = t1; this.P0 = p0; this.PK = pk; this.L = l; this.hVin = h; } } public static double round(double value, int places) { if (places < 0) { throw new IllegalArgumentException(); } long factor = (long) Math.pow(10, places); value = value * factor; long tmp = Math.round(value); return (double) tmp / factor; } public static Kriteria UrciKriteria(Parametry p) { int a = PocetPoloh * p.sirkaPolPrim + (PocetPoloh - 1) * KanalPoloh; double Zn = NapetiPrim / ProudPrim; double Ztl = NapetiNakratko * Zn * 0.01; double L = Ztl / (2 * Math.PI * Frekvence); double DStr = round(p.aJadra + 2 * KanalUJadra + a, 3); double OStr = Math.PI * DStr; double ar = 2 * a / 3 + KanalPoloh / 4; double s = ar + KanalUJadra; double N = Math.ceil(Math.sqrt(2) * ProudPrim * Math.pow(10, 6) * L / (p.sJadra * Syceni)); double hVin = round((2 * 8 * Frekvence * N * ProudPrim * OStr * s) / ((NapetiPrim * NapetiNakratko * Math.pow(10, 7)) / N), 3); double hOkna = round(hVin + HorniKoncVzdal + DolniKoncVzdal, 3); double RJader = p.aJadra + 2 * KanalUJadra + 2 * a + KanalMeziFazemi; double mFe = round(7650 * (2 * hOkna + 2 * RJader + 2 * p.aJadra) * p.sJadra * Math.pow(10, -9), 3); double CenaFe = round(mFe * 2.75 * KurzEuro, 2); double P0 = round(ZtratCislo * Syceni * mFe, 3); double SVin = round(PocetPoloh * hVin * p.sirkaPolPrim * kPlneniPrim / (N / 2), 3); double J = round(ProudPrim / SVin, 3); double m = round(PridavekHmotnosti * SVin * Math.PI * DStr * Math.pow(10, -9) * N * 8940, 3); double CenaCu = round(m * (KurzDolar * 1.7 + 157.53), 2); double Cena = round(CenaFe + CenaCu, 2); double PK = round(kPridavPrim * 2.4 * Math.pow(J, 2) * m / PridavekHmotnosti, 3); double ThetaStr = round((Math.pow(J * 1e6, 2) * p.sirkaPolPrim * 1e-3 * kPlneniPrim * kPridavPrim / (47e6)) / (2 * 80 * 0.75), 3); return new Kriteria(Cena, ThetaStr, P0, PK, L, hVin); } public static boolean PlatnostKriterii(Kriteria k) { return k.P0 <= MaxZtratyNaprazdno && k.PK <= MaxZtratyNakratko && k.hVin <= MaxVyskaVinuti && k.hVin >= MinVyskaVinuti && k.ThetaStr <= MaxOtepleni; } public static void main(String[] args) { Parametry min = null; Kriteria kMin = null; for (int AJadra = MinAJadra; AJadra <= MaxAJadra; AJadra = AJadra + KrokAJadra) { double SJadra = round(PlneniZeleza * Math.pow(AJadra, 2), 3); for (int SirkaPolPrim = MinSirkaPolPrim; SirkaPolPrim <= MaxSirkaPolPrim; SirkaPolPrim = SirkaPolPrim + KrokSirkyPolPrim) { Parametry nove = new Parametry(AJadra, SJadra, SirkaPolPrim); Kriteria kNove = UrciKriteria(nove); if (PlatnostKriterii(kNove) && (min == null || kNove.Cena < kMin.Cena)) { min = nove; kMin = kNove; } } } if (min == null) { System.err.println("Pro zadane parametry nebylo nalezeno zadne reseni."); return; } int a = PocetPoloh * min.sirkaPolPrim + (PocetPoloh - 1) * KanalPoloh; double DStr = round(min.aJadra + 2 * KanalUJadra + a, 3); double N = Math.ceil(Math.sqrt(2) * ProudPrim * Math.pow(10, 6) * kMin.L / (min.sJadra * Syceni)); double hOkna = round(kMin.hVin + HorniKoncVzdal + DolniKoncVzdal, 3); double RJader = round(min.aJadra + 2 * KanalUJadra + 2 * a + KanalMeziFazemi, 3); double mezera = round((4e-10 * Math.PI * min.sJadra * Math.pow(N, 2)) / (kMin.L), 3); double mFe = round(7650 * (2 * hOkna + 2 * RJader + 2 * min.aJadra) * min.sJadra * Math.pow(10, -9), 3); double CenaFe = round(mFe * 2.75 * KurzEuro, 2); double SVin = round(PocetPoloh * kMin.hVin * min.sirkaPolPrim * kPlneniPrim / (N / 2), 3); double J = round(ProudPrim / SVin, 3); double m = round(PridavekHmotnosti * SVin * Math.PI * DStr * Math.pow(10, -9) * N * 8940, 3); double Cena = round(m * (KurzDolar * 1.7 + 157.53), 2); System.out.println("Strana jádra: " + min.aJadra + " mm"); System.out.println("Prurez jádra: " + min.sJadra + " mm2"); System.out.println("Indukcnost tlumivky: " + round(1000 * kMin.L, 3) + " mH"); System.out.println("Syceni: " + Syceni + " T"); System.out.println("Sirka polohy vinutí: " + min.sirkaPolPrim + " mm"); System.out.println("Pocet zavitu cívky: " + N); System.out.println("Vyska vinuti: " + kMin.hVin + " mm"); System.out.println("Vyska okna: " + hOkna + " mm"); System.out.println("Roztec jader: " + RJader + " mm"); System.out.println("Součet výšky vzduchových mezer: " + mezera + " mm"); System.out.println("Hmotnost magnetickeho obvodu: " + mFe + " kg"); System.out.println("Ztraty naprazdno: " + kMin.P0 + " W"); System.out.println("Ztraty nakratko: " + kMin.PK + " W"); System.out.println("Prurez vodice vinutí: " + SVin + " mm2"); System.out.println("Proudova hustota vodičů vinutí: " + J + " A/mm2"); System.out.println("Hmotnost medi: " + m + " kg"); System.out.println("Střední otepleni vinutí nad olejem: " + kMin.ThetaStr + " K"); System.out.println("Cena mědi pro vinutí: " + Cena + " Kč"); System.out.println("Cena plechů pro elektrotechniku: " + CenaFe + " Kč"); System.out.println("Celková cena varianty: " + kMin.Cena + " Kč"); System.out.println("-------------------------------------------------"); } }