Guest User

Untitled

a guest
Apr 26th, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.86 KB | None | 0 0
  1. # Tekijä: Henri Kettunen
  2. # Opiskelijanumero: 0373659
  3. # Päivämäärä: 06.11.2011
  4. # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: Python 3 - ohjelmointiopas,
  5. # luennot
  6.  
  7. # Määritellään muuttujat, luokat ja listat sekä tuodaan kirjastot:
  8.  
  9. import math
  10.  
  11. polttoaineet = []
  12. talot = []
  13.  
  14. # Ekasta:
  15. class Polttoaine:
  16. nimi = ""
  17. lampoarvo = "0"
  18. hinta = "0"
  19. kosteus = "0"
  20.  
  21. # Kakosesta:
  22. class Talo:
  23. nimi = ""
  24. leveys = "0"
  25. syvyys = "0"
  26. sislampotila = "0"
  27. energiaos = "0"
  28. psyvyys = "0"
  29. ppituus = "0"
  30. ptyyppi = "0"
  31. tyyppireal = "0"
  32.  
  33. class DN25():
  34. Dp = "0.0337" # m
  35. Di = "0.1181" # m
  36. Ds = "0.025" # m
  37. E = "0.275" # m
  38.  
  39. class DN40():
  40. Dp = "0.0483" # m
  41. Di = "0.1331" # m
  42. Ds = "0.040" # m
  43. E = "0.290" # m
  44.  
  45. class DN50():
  46. Dp = "0.0603" # m
  47. Di = "0.1531" # m
  48. Ds = "0.050" # m
  49. E = "0.310" # m
  50.  
  51. class DN65():
  52. Dp = "0.0761" # m
  53. Di = "0.1749" # m
  54. Ds = "0.065" # m
  55. E = "0.330" # m
  56.  
  57. class DN80():
  58. Dp = "0.0889" # m
  59. Di = "0.1923" # m
  60. Ds = "0.080" # m
  61. E = "0.350" # m
  62.  
  63. Qj = 0
  64. Qm = 0
  65. Rm = 0
  66. Ri = 0
  67. Rg = 0
  68. H = 0
  69. KOO = 0
  70. fii = 0
  71. lampohavio_v = 0
  72. fii_lampohavio = 0
  73. xii = 0
  74. M = 0
  75. V = 0
  76.  
  77. # Ekasta:
  78. kok_lampomaara = 0
  79. kosteus = 0
  80. lampoarvo = 0
  81. polttoainemaara = 0
  82. tarvittava_maara = 0
  83. hinta = 0
  84. kustannus = 0
  85.  
  86. # Kakosesta:
  87. korkeus = 2.45
  88. lampokerroin_seina = 0.17 # W / (m^2 * K)
  89. lampokerroin_lattia = 0.16 # W / (m^2 * K)
  90. lampokerroin_katto = 0.09 # W / (m^2 * K)
  91. lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
  92.  
  93.  
  94. # Kolkista:
  95. hgs = 13.5 # W / m^2 °C
  96. lambda_i = 0.03 # W / m^2 °C
  97. lambda_e = lambda_i
  98. lambda_g = 2.3 # W / m^2 °C
  99. Tm = 85 # °C
  100. Tp = 55 # °C
  101. Tg = 5 # °C
  102. Cp = 4200 # J / kg
  103. roo = 980 # kg / m^3
  104. pi = math.pi
  105.  
  106. # Määritetään aliohjelmat:
  107.  
  108. # Valikko:
  109. def Valikko():
  110. print("********************************")
  111. print("1) Syötä polttoaine")
  112. print("2) Syötä talon tiedot")
  113. print("3) Määritä maan lämmönjohtavuus")
  114. print("4) Laske polttoaineen tarve ja hinta")
  115. print("5) Kirjoita polttoaineen tarpeet ja hinnat CSV-tiedostoon")
  116. print("6) Tallenna tiedot")
  117. print("7) Lataa tiedot")
  118. print("0) Lopeta")
  119. valinta = input("Valintasi: ")
  120. return valinta
  121.  
  122. # Ekasta:
  123. def Laskin_Maara(kok_lampomaara, lampoarvo, kosteus):
  124. kilowatit = 3.6 * kok_lampomaara
  125. polttoainemaara = kilowatit / float(lampoarvo)
  126. if float(kosteus) == -1:
  127. tarvittava_maara = float(polttoainemaara)
  128. tarvittava_maara = round(tarvittava_maara)
  129. return tarvittava_maara
  130. else:
  131. kosteus_100 = 100 - float(kosteus)
  132. tarvittava_maara = (polttoainemaara / kosteus_100) * 100
  133. tarvittava_maara = round(tarvittava_maara)
  134. return tarvittava_maara
  135.  
  136. def Laskin_Kustannus(kok_lampomaara, lampoarvo, kosteus, hinta):
  137. kilowatit = 3.6 * kok_lampomaara
  138. polttoainemaara = kilowatit / float(lampoarvo)
  139. if float(kosteus) == -1:
  140. tarvittava_maara = float(polttoainemaara)
  141. kustannus = tarvittava_maara * float(hinta)
  142. kustannus = round(kustannus)
  143. kustannus = str(kustannus)
  144. return kustannus
  145. else:
  146. kosteus_100 = 100 - float(kosteus)
  147. tarvittava_maara = (polttoainemaara / kosteus_100) * 100
  148. kustannus = tarvittava_maara * float(hinta)
  149. kustannus = round(kustannus)
  150. kustannus = str(kustannus)
  151. return kustannus
  152.  
  153. def Syota_polttis(polttoaineet):
  154. polttoaine = Polttoaine()
  155. polttoaine.nimi = input("Anna polttoaineen nimi: ")
  156. polttoaine.lampoarvo = float(input("Anna tehollinen lämpöarvo (MJ/kg): "))
  157. polttoaine.hinta = float(input("Anna hinta (€/kg): "))
  158. polttoaine.kosteus = float(input("Anna kosteusprosentti (-1 == ei käsitellä): "))
  159. polttoaineet.append(polttoaine)
  160. print()
  161.  
  162. def Tulostus(nimi, leveys, syvyys, sislampotila, ppituus, ptyyppi, polttoaineet, fii, V):
  163. kok_lampomaara = fii
  164. print("======================================================================")
  165. print(nimi)
  166. print("Pinta-ala:", str(float(round((leveys * syvyys), 1))) + "m2, Sisälämpötila:", str(sislampotila) + "° C")
  167. print("Putken pituus:", str(ppituus) + "m, Tyyppi:", str(ptyyppi) + ", Maksimivirtausnopeus:", str(float(round((V), 6))) + "m/s")
  168. print("Polttoaine----------Tarvittava määrä-(kg)-------Kustannus-(€)---------")
  169. for aine in polttoaineet:
  170. tarvittava_maara = Laskin_Maara(kok_lampomaara, aine.lampoarvo, aine.kosteus)
  171. kustannus = Laskin_Kustannus(kok_lampomaara, aine.lampoarvo, aine.kosteus, aine.hinta)
  172. print("-"+"{0:20} ".format(aine.nimi), end = "")
  173. print("{0:19} ".format(tarvittava_maara), end = "")
  174. print("{0:>19} ".format(kustannus))
  175.  
  176. # Kakosesta:
  177. def Syota_talo(talot):
  178. talo = Talo()
  179. talo.nimi = input("Anna talon nimi: ")
  180. talo.leveys = float(input("Anna talon leveys (m): "))
  181. talo.syvyys = float(input("Anna talon syvyys (m): "))
  182. talo.sislampotila = float(input("Anna haluttu sisälämpötila (°C): "))
  183. talo.energiaos = float(input("Anna huonetilojen lämmitykseen tarvittavan \
  184. energian osuus koko talon energian tarpeesta (%): "))
  185. talo.psyvyys = input("Anna putken syvyys (m): ")
  186. talo.ppituus = input("Anna putken pituus (m): ")
  187. print("1 DN25")
  188. print("2 DN40")
  189. print("3 DN50")
  190. print("4 DN65")
  191. print("5 DN80")
  192. talo.ptyyppi = input("Valitse putkityyppi (1, 2, 3, 4 tai 5): ")
  193. if int(talo.ptyyppi) == 1:
  194. talo.ptyyppi = "DN25"
  195. elif int(talo.ptyyppi) == 2:
  196. talo.ptyyppi = "DN40"
  197. elif int(talo.ptyyppi) == 3:
  198. talo.ptyyppi = "DN50"
  199. elif int(talo.ptyyppi) == 4:
  200. talo.ptyyppi = "DN65"
  201. elif int(talo.ptyyppi) == 5:
  202. talo.ptyyppi = "DN80"
  203. talot.append(talo)
  204. print()
  205.  
  206. def Energiankulutus(tdsto, nimi, leveys, syvyys, sislampotila, energiaos):
  207. korkeus = 2.45
  208. lampokerroin_seina = 0.17 # W / (m^2 * K)
  209. lampokerroin_lattia = 0.16 # W / (m^2 * K)
  210. lampokerroin_katto = 0.09 # W / (m^2 * K)
  211. lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
  212. Ts = int(sislampotila)
  213. Qj = 0
  214. # Pinta-alat ja sigma UA:
  215. ala_lattia = float(leveys) * float(syvyys)
  216. ala_katto = ala_lattia
  217. ala_seina1 = float(leveys) * float(korkeus)
  218. ala_seina2 = float(syvyys) * float(korkeus)
  219. ala_ikkunat = 0.1 * ala_lattia
  220. ala_seinat_real = (2 * (ala_seina1 + ala_seina2)) - ala_ikkunat
  221. UA_lattia = ala_lattia * lampokerroin_lattia
  222. UA_katto = ala_katto * lampokerroin_katto
  223. UA_seinat = ala_seinat_real * lampokerroin_seina
  224. UA_ikkunat = ala_ikkunat * lampokerroin_ikkuna
  225. UA = UA_lattia + UA_katto + UA_seinat + UA_ikkunat
  226. # Lämpötilat:
  227. tiedosto = open(tdsto, "r", encoding="utf-8")
  228. while True:
  229. rivi = tiedosto.readline()
  230. rivi = rivi[:-1]
  231. lampotila = rivi.split(" ")
  232. if len(rivi) == 0:
  233. break
  234. elif ((int(lampotila[1]) >= 12) or (int(lampotila[1]) > Ts)):
  235. continue
  236. else:
  237. lampotila = rivi.split(" ")
  238. Tu = int(lampotila[1])
  239. # Lasketaan arvo Qj PÄIVÄÄ KOHDEN ja summataan kaikki päivät:
  240. Qj = (Qj + ((UA * (Ts - Tu) * 24) / 1000) * (100 / int(energiaos)))
  241. tiedosto.close()
  242. return Qj
  243.  
  244. def Mitoitusteho(nimi, leveys, syvyys, sislampotila):
  245. korkeus = 2.45
  246. lampokerroin_seina = 0.17 # W / (m^2 * K)
  247. lampokerroin_lattia = 0.16 # W / (m^2 * K)
  248. lampokerroin_katto = 0.09 # W / (m^2 * K)
  249. lampokerroin_ikkuna = 1.0 # W / (m^2 * K)
  250. Ts = int(sislampotila)
  251. ala_lattia = float(leveys) * float(syvyys)
  252. ala_katto = ala_lattia
  253. ala_seina1 = float(leveys) * float(korkeus)
  254. ala_seina2 = float(syvyys) * float(korkeus)
  255. ala_ikkunat = 0.1 * ala_lattia
  256. ala_seinat_real = (2 * (ala_seina1 + ala_seina2)) - ala_ikkunat
  257. UA_lattia = ala_lattia * lampokerroin_lattia
  258. UA_katto = ala_katto * lampokerroin_katto
  259. UA_seinat = ala_seinat_real * lampokerroin_seina
  260. UA_ikkunat = ala_ikkunat * lampokerroin_ikkuna
  261. UA = UA_lattia + UA_katto + UA_seinat + UA_ikkunat
  262. Qm = ((UA * (Ts + 29) * 1) / 1000)
  263. return Qm
  264.  
  265. # Kolkista:
  266.  
  267. def Haviolampovirta(KOO, Tm, Tp, Tg):
  268. fii_lampohavio = 2 * (KOO) * abs(((Tm + Tp) / 2) - Tg)
  269. return fii_lampohavio
  270.  
  271. def Lammonsiirtokerroin(Rg, Ri, Rm):
  272. KOO = 1 / (Rg + Ri + Rm)
  273. return KOO
  274.  
  275. def Vaahdotettu_lampovastus(Di, Dp, lambda_i, pi):
  276. Ri = (1 / (2 * pi * lambda_i)) * math.log(Di / Dp)
  277. return Ri
  278.  
  279. def Keskinainen_lampovastus(pi, lambda_g, H, E):
  280. Rm = (1 / (4 * pi * lambda_g)) * math.log(1 + ((2 * H) / E ) ** 2)
  281. return Rm
  282.  
  283. def Maaperan_lampovastus(lambda_g, pi, H, Dc):
  284. Rg = (1 / (2 * pi * lambda_g)) * math.log((4 * H) / Dc)
  285. return Rg
  286.  
  287. def Maakerros_korjaus(syvyys, lambda_g, hgs):
  288. H = syvyys + (lambda_g / hgs)
  289. return H
  290.  
  291. def Massavirta(fii_mit, Cp):
  292. M = fii_mit / (Cp * 30)
  293. return M
  294.  
  295. def Lampoteho(fii_mit, fii_lampohavio):
  296. fii = fii_mit + fii_lampohavio
  297. return fii
  298.  
  299. def Tilavuusvirta(fii, Cp, roo, halk, pi):
  300. V = fii / (Cp * roo * 35 * ((halk / 2) ** 2) * pi)
  301. return V
  302.  
  303. def Lampohavio_vuodessa(fii, pituus):
  304. lampohavio = ((fii * float(pituus) * 24 * 365) / 1000)
  305. return lampohavio
  306.  
  307. # Tietojen tallennus ja lataus:
  308.  
  309. def Tallenna_tiedot(talot, polttoaineet):
  310. if (len(talot) or len(polttoaineet)) == 0:
  311. print("Tarvittavia arvoja ei ole määritelty.")
  312. print()
  313. else:
  314. try:
  315. tiedostonnimi_tal = input("Anna tallennettavan tiedoston nimi: ")
  316. tiedosto_talleta = open(tiedostonnimi_tal, "a", encoding="utf-8")
  317. tiedosto_talleta.write("[polttoaineet]\n")
  318. for aines in polttoaineet:
  319. rivi = str(aines.nimi) + ","+ str(aines.lampoarvo) + ","
  320. rivi = rivi + str(aines.hinta) + "," + str(aines.kosteus) + "\n"
  321. tiedosto_talleta.write(rivi)
  322. tiedosto_talleta.write("[talot]\n")
  323. for tiedot in talot:
  324. rivi = str(tiedot.nimi) + ","+ str(tiedot.leveys) + ","
  325. rivi = rivi + str(tiedot.syvyys) + "," + str(tiedot.sislampotila)
  326. rivi = rivi + "," + str(tiedot.energiaos) + ","
  327. rivi = rivi + str(tiedot.psyvyys) + ","+ str(tiedot.ppituus) + ","\
  328. + str(tiedot.ptyyppi) + "\n"
  329. tiedosto_talleta.write(rivi)
  330. print("Tiedot tallennettu.")
  331. tiedosto_talleta.close()
  332. except IOError:
  333. print("Tiedoston tallennus epäonnistui.")
  334. print()
  335.  
  336. def Lataa_tiedot():
  337. tiedostonnimi_av = input("Anna tiedot sisältävän tiedoston nimi: ")
  338. try:
  339. tiedosto_avaa = open(tiedostonnimi_av, "r", encoding="utf-8")
  340. global polttoaineet
  341. global talot
  342. polttoaineet = []
  343. talot = []
  344. while True:
  345. rivi = tiedosto_avaa.readline()
  346. rivi = rivi[:-1]
  347. if rivi == "[talot]":
  348. break
  349. elif rivi == "[polttoaineet]":
  350. continue
  351. else:
  352. aines = Polttoaine()
  353. ominaisuus = rivi.split(",")
  354. aines.nimi = ominaisuus[0]
  355. aines.lampoarvo = float(ominaisuus[1])
  356. aines.hinta = float(ominaisuus[2])
  357. aines.kosteus = float(ominaisuus[3][:-1])
  358. polttoaineet.append(aines)
  359. while True:
  360. rivi = tiedosto_avaa.readline()
  361. rivi = rivi[:-1]
  362. if len(rivi) == 0:
  363. break
  364. elif rivi == "[talot]":
  365. continue
  366. else:
  367. talo = Talo()
  368. ominaisuus = rivi.split(",")
  369. talo.nimi = ominaisuus[0]
  370. talo.leveys = float(ominaisuus[1])
  371. talo.syvyys = float(ominaisuus[2])
  372. talo.sislampotila = float(ominaisuus[3])
  373. talo.energiaos = float(ominaisuus[4])
  374. talo.psyvyys = float(ominaisuus[5])
  375. talo.ppituus = float(ominaisuus[6])
  376. talo.ptyyppi = str(ominaisuus[7])
  377. talot.append(talo)
  378. print("Tiedot ladattu.")
  379. except IOError:
  380. print("Tiedostossta lataaminen epäonnistui.")
  381. print()
  382.  
  383. # Muut aliohjelmalisäykset:
  384.  
  385. def Lammonjoht_muuttuja():
  386. global lambda_g
  387. lambda_g = float(input("Anna maan lämmönjohtavuus (W/m, °C): "))
  388. return lambda_g
  389.  
  390. def Tallenna_CSV(talot, polttoaineet):
  391. polttis = Polttoaine()
  392. talo = Talo()
  393. tdsto = input("Anna lämpötilat sisältävän tiedoston nimi: ")
  394. tdsto2 = input("Anna kirjoitettavan tiedoston nimi: ")
  395. try:
  396. tiedosto_kirj = open(tdsto2, "w", encoding="utf-8")
  397. for talo in talot:
  398. Qj = Energiankulutus(tdsto, talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.energiaos)
  399. if talo.ptyyppi == "DN25":
  400. tyyppireal = DN25()
  401. elif talo.ptyyppi == "DN40":
  402. tyyppireal = DN40()
  403. elif talo.ptyyppi == "DN50":
  404. tyyppireal = DN50()
  405. elif talo.ptyyppi == "DN65":
  406. tyyppireal = DN65()
  407. elif talo.ptyyppi == "DN80":
  408. tyyppireal = DN80()
  409. Ri = Vaahdotettu_lampovastus(float(tyyppireal.Di), float(tyyppireal.Dp), lambda_i, pi)
  410. H = Maakerros_korjaus(float(talo.psyvyys), lambda_g, hgs)
  411. Rm = Keskinainen_lampovastus(pi, lambda_g, H, float(tyyppireal.E))
  412. Rg = Maaperan_lampovastus(lambda_g, pi, H, float(tyyppireal.Di))
  413. KOO = Lammonsiirtokerroin(Rg, Ri, Rm)
  414. fii_lampohavio = Haviolampovirta(KOO, Tm, Tp, Tg)
  415. M = Massavirta(Qj, Cp)
  416. fii = Lampoteho(Qj, fii_lampohavio)
  417. lampohavio_v = Lampohavio_vuodessa(fii_lampohavio, talo.ppituus)
  418. Qm = Mitoitusteho(talo.nimi, float(talo.leveys), float(talo.syvyys), float(talo.sislampotila))
  419. V = Tilavuusvirta(Qj, Cp, roo, float(tyyppireal.Di), pi)
  420. xii = fii + lampohavio_v + fii_lampohavio
  421. kok_lampomaara = fii
  422. tiedosto_kirj.write(talo.nimi + "\n")
  423. tiedosto_kirj.write("Pinta-ala," + str(float(round((talo.leveys * talo.syvyys), 1))) + ",m2,Sisälämpötila," + str(talo.sislampotila) + ",° C\n")
  424. tiedosto_kirj.write("Putken pituus," + str(talo.ppituus) + ",m,Tyyppi," + str(talo.ptyyppi) + ",Maksimivirtausnopeus," + str(float(round((V), 6))) + ",m/s\n")
  425. tiedosto_kirj.write("Polttoaine,Tarvittava määrä (kg),Kustannus (€)\n")
  426. for aine in polttoaineet:
  427. tarvittava_maara = Laskin_Maara(kok_lampomaara, aine.lampoarvo, aine.kosteus)
  428. kustannus = Laskin_Kustannus(kok_lampomaara, aine.lampoarvo, aine.kosteus, aine.hinta)
  429. tiedosto_kirj.write(aine.nimi + "," + str(tarvittava_maara) + "," + str(kustannus) + "\n")
  430. tiedosto_kirj.close
  431. print("Arvot kirjoitettu tiedostoon.")
  432. except IOError:
  433. print("Tiedoston avaaminen epäonnistui.")
  434. print()
  435.  
  436. # Ohjelma pyörii näin:
  437.  
  438. def Silmukka():
  439. while True:
  440. valinta = Valikko()
  441. if int(valinta) == 1:
  442. Syota_polttis(polttoaineet)
  443. continue
  444. if int(valinta) == 2:
  445. Syota_talo(talot)
  446. continue
  447. if int(valinta) == 3:
  448. Lammonjoht_muuttuja()
  449. print()
  450. continue
  451. if int(valinta) == 4:
  452. polttis = Polttoaine()
  453. talo = Talo()
  454. tdsto = input("Anna lämpötilat sisältävän tiedoston nimi: ")
  455. for talo in talot:
  456. Qj = Energiankulutus(tdsto, talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.energiaos)
  457. if talo.ptyyppi == "DN25":
  458. tyyppireal = DN25()
  459. elif talo.ptyyppi == "DN40":
  460. tyyppireal = DN40()
  461. elif talo.ptyyppi == "DN50":
  462. tyyppireal = DN50()
  463. elif talo.ptyyppi == "DN65":
  464. tyyppireal = DN65()
  465. elif talo.ptyyppi == "DN80":
  466. tyyppireal = DN80()
  467. Ri = Vaahdotettu_lampovastus(float(tyyppireal.Di), float(tyyppireal.Dp), lambda_i, pi)
  468. H = Maakerros_korjaus(float(talo.psyvyys), lambda_g, hgs)
  469. Rm = Keskinainen_lampovastus(pi, lambda_g, H, float(tyyppireal.E))
  470. Rg = Maaperan_lampovastus(lambda_g, pi, H, float(tyyppireal.Di))
  471. KOO = Lammonsiirtokerroin(Rg, Ri, Rm)
  472. fii_lampohavio = Haviolampovirta(KOO, Tm, Tp, Tg)
  473. M = Massavirta(Qj, Cp)
  474. fii = Lampoteho(Qj, fii_lampohavio)
  475. lampohavio_v = Lampohavio_vuodessa(fii_lampohavio, talo.ppituus)
  476. Qm = Mitoitusteho(talo.nimi, float(talo.leveys), float(talo.syvyys), float(talo.sislampotila))
  477. V = Tilavuusvirta(Qj, Cp, roo, float(tyyppireal.Di), pi)
  478. xii = fii + lampohavio_v + fii_lampohavio
  479. Tulostus(talo.nimi, talo.leveys, talo.syvyys, talo.sislampotila, talo.ppituus, talo.ptyyppi, polttoaineet, xii, V)
  480. print("======================================================================")
  481. print()
  482. continue
  483. if int(valinta) == 5:
  484. Tallenna_CSV(talot, polttoaineet)
  485. continue
  486. if int(valinta) == 6:
  487. Tallenna_tiedot(talot, polttoaineet)
  488. continue
  489. if int(valinta) == 7:
  490. Lataa_tiedot()
  491. continue
  492. if int(valinta) == 0:
  493. print("Kiitos käytöstä, tervetuloa uudestaan!")
  494. break
  495. else:
  496. print("Syöte ei kelpaa.")
  497. print()
  498.  
  499. # Ohjelman suoritus alkaa:
  500.  
  501. Silmukka()
  502.  
  503. # EOF
Add Comment
Please, Sign In to add comment