tilstand = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ] virkning = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 ] dampTabel = damptabel.damptabel tilstandTabel = damptabel.dampTilstand servoTryk.vis(1, 0) #For at faa instrumenterne til at falde til ro servoTemp.vis(5) powernet.RelayAlloff() # Saet designparametre design[0] = 1 # Skal overvejes naar alt andet virker design[1] = 8900 design[2] = 32000 design[3] = 2 design[4] = 5 design[5] = 0.1 design[6] = 5 design[7] = 10 design[8] = design[1] / 200 # Er fastsat saa skueroeret kan foelge med. design[9] = 10 design[10] = 0.75 # Svarer til 140% af den damp der kan dannes pr sek. design[11] = 1.4
def demo(): model.ModelStop() model.ModelReset() pygame.mixer.quit() powernet.RelayAlloff() time.sleep(15) powernet.Relay5on() # Taend for lydanlaeg time.sleep(1) powernet.Relay6on() # Taend for TV skaerm time.sleep(30) IRremote.TVonOff() time.sleep(10) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVok() time.sleep(1) IRremote.TVok() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVok() if programvalg.read() != 1: return powernet.Relay10on() # Taend forkontrollampe time.sleep(1) pygame.mixer.init() # Afspil reallyd fra maskinrummet paa Bjoern pygame.mixer.music.load("Sound/dampmaskine.mp3") pygame.mixer.music.set_volume(0.8) pygame.mixer.music.play() servo.maskintelegraf_FF() skueglasOlie.set(50) skueglasKedel.set(70) servoTryk.vis(0.2, 8) servoTemp.vis(300) model.ModelRun( 100, 0) # Styr modellen saa den foelger kommandoerne paa reallyden time.sleep(42) if programvalg.read() != 1: return time.sleep(170) if programvalg.read() != 1: return servo.maskintelegraf_HF() time.sleep(3) model.ModelRun(60, 0) time.sleep(19) if programvalg.read() != 1: return servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(30, 0) time.sleep(40) if programvalg.read() != 1: return servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(103) if programvalg.read() != 1: return servo.maskintelegraf_LB() time.sleep(3) model.ModelRun(30, 100) time.sleep(16) servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(42) if programvalg.read() != 1: return servo.maskintelegraf_LB() time.sleep(3) model.ModelRun(20, 100) time.sleep(17) servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(35) if programvalg.read() != 1: return servo.maskintelegraf_LB() time.sleep(3) model.ModelRun(20, 100) time.sleep(24) if programvalg.read() != 1: return servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(109) if programvalg.read() != 1: return servo.maskintelegraf_LB() time.sleep(3) model.ModelRun(20, 100) time.sleep(25) if programvalg.read() != 1: return servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(28) if programvalg.read() != 1: return servo.maskintelegraf_HB() time.sleep(3) model.ModelRun(40, 100) time.sleep(24) if programvalg.read() != 1: return servo.maskintelegraf_LF() time.sleep(3) model.ModelRun(20, 0) time.sleep(67) if programvalg.read() != 1: return servo.maskintelegraf_LB() time.sleep(3) model.ModelRun(20, 100) time.sleep(14) servo.maskintelegraf_LF() time.sleep(3) if programvalg.read() != 1: return model.ModelRun(20, 0) time.sleep(225) if programvalg.read() != 1: return servo.maskintelegraf_FS() time.sleep(3) model.ModelRun(0, 50) time.sleep(35) model.ModelStop() IRremote.TVonOff() pygame.mixer.music.stop()
def start(valg): print("Koerer hovedprogram ", valg) # Initiering af simulatoren ############################################ print("Initialisering") design = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] handling = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] tilstand = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 ] virkning = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ] dampTabel = damptabel.damptabel tilstandTabel = damptabel.dampTilstand # Saet designparametre design[0] = 1 # Skal overvejes naar alt andet virker design[1] = 8900 design[2] = 32000 design[3] = 2 design[4] = 5 design[5] = 0.1 design[6] = 5 design[7] = 10 design[8] = design[1] / 200 # Er fastsat saa skueroeret kan foelge med. design[9] = 10 design[10] = 0.75 # Svarer til 140% af den damp der kan dannes pr sek. design[11] = 1.4 design[12] = 0.7 design[13] = 0.000278 design[14] = 0.29 design[15] = 95 # Aflaes handlinger handling[0] = omstyring.Read_omstyring() handling[1] = oliepumpe.Read_flowmaaler() * design[5] handling[2] = primaerluft.Read_primaerluft() primaerluftKorrektion = handling[2] # Til brug for 0-stilling af enkoder print("Primaerluft korrektion = ", primaerluftKorrektion) handling[3] = sekundaerLuft.Read_sekundaerluft() handling[4] = vejecelle.Read_vejecelle() / 1000 handling[5] = ventiler.readKedelvandInd() handling[6] = ventiler.readKedelvandUd() handling[7] = ventiler.readKondensatorvandInd() handling[8] = ventiler.readKondensatorvandUd() handling[9] = ventiler.readDampInd() handling[10] = ventiler.readDampUd() handling[11] = programvalg.read() if handling[11] != valg: return # aflaes programvaelger og juster designparametre tilsvarende if ((handling[11] == 2) or (handling[11] == 4)): design[1] = 500 design[3] = 20 design[6] = 0.1 design[8] = design[1] / 200 design[13] = 0.0333 design[14] = 0.29 design[15] = 95 else: design[1] = 7690 design[3] = 2 design[6] = 5 design[8] = design[1] / 200 design[13] = 0.000278 design[14] = 0.29 design[15] = 40 # beregn tilstanden tilstand[0] = 50 tilstand[1] = 0.5 * design[4] tilstand[2] = 0 tilstand[3] = 0 tilstand[4] = 0 tilstand[5] = 0.6 * design[1] tilstand[6] = 1 tilstand[7] = 1 tilstand[8] = 0 tilstand[9] = 3 tilstand[10] = 0 tilstand[11] = 0 tilstand[12] = 0 tilstand[13] = design[15] tilstand[14] = 0 tilstand[15] = 0 tilstand[16] = 0 tilstand[17] = 0 tilstand[18] = 0 tilstand[19] = 0 tilstand[20] = 0 tilstand[21] = 0 tilstand[22] = 0 tilstand[23] = 0 tilstand[24] = 0 tilstand[25] = 0 tilstand[26] = 0 # beregn virkningerne virkning[0] = 50 virkning[1] = 0 virkning[2] = int((tilstand[1] / design[4]) * 100) virkning[3] = 0 virkning[4] = int((tilstand[5] / design[1]) * 100) virkning[5] = 0 virkning[6] = 1 virkning[7] = tilstand[6] - 1 virkning[8] = 0 virkning[9] = 0 virkning[10] = 0 virkning[11] = 0 virkning[12] = 30 virkning[13] = 0 virkning[14] = 0 virkning[15] = 0 virkning[16] = 0 virkning[17] = 0 virkning[18] = 0 virkning[19] = 0 virkning[20] = tilstand[9] virkning[21] = 0 virkning[22] = 0 virkning[23] = 0 virkning[24] = 1 virkning[25] = 0 if programvalg.read() != valg: return # Beregn kedlens samlede enthalpi i starttilstanden vha damptabellen for x in range(len(dampTabel)): if dampTabel[x][1] > tilstand[13]: break enthalpiVand = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][3], tilstand[13], dampTabel[x][1], dampTabel[x][3]) enthalpiDamp = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][4], tilstand[13], dampTabel[x][1], dampTabel[x][4]) volumenDamp = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][2], tilstand[13], dampTabel[x][1], dampTabel[x][2]) tilstand[17] = ( ((design[1] - tilstand[5]) / 1000) / volumenDamp) # kg damp i kedlen tilstand[25] = tilstand[5] * enthalpiVand + tilstand[ 17] * enthalpiDamp # enthalpi i kedlen # Toem transportbaandet for kul transport.TransportGo(150) time.sleep(5) transport.TransportStop() # Nulstil vejecellen vejecelle.Reset_vejecelle() # Nulstil oliepumpen oliepumpe.Reset_flowmaaler() if programvalg.read() != valg: return # Taend fjernsynet i kooejet powernet.Relay6on() time.sleep(30) IRremote.TVonOff() time.sleep(10) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVok() time.sleep(1) IRremote.TVok() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVrightArrow() time.sleep(1) IRremote.TVok() time.sleep(1) IRremote.TVpause() pause = 1 # Naar pause=1 er billedet pauset time.sleep(1) if programvalg.read() != valg: return # Start lydanlaegene pygame.mixer.init(channels=2) # Mixeren saettes til stereo pygame.mixer.set_num_channels(12) channel1 = pygame.mixer.Channel(0) # Baggrundslyd, der spiller hele tiden channel2 = pygame.mixer.Channel(1) # Lyd af hovedmaskinen der koerer channel3 = pygame.mixer.Channel(2) # Maskintelegraf og beskedfloejte channel4 = pygame.mixer.Channel(3) # Multifunktionspumpe channel5 = pygame.mixer.Channel(4) # Lyd af vand i roer channel6 = pygame.mixer.Channel(5) # Lyd fra damphaner channel7 = pygame.mixer.Channel(6) # Lyd af sikkerhedsventil channel8 = pygame.mixer.Channel(7) # Mislyde fra maskinen channel9 = pygame.mixer.Channel(8) # Maskinhaveri channel10 = pygame.mixer.Channel(9) # Dampfloejte channel11 = pygame.mixer.Channel(10) # Vandpjask channel12 = pygame.mixer.Channel(11) # Ordrer fra broen channel3.set_volume(1.0, 0.0) channel12.set_volume(0.0, 1.0) # Try upto 30 times on a failure Success = False caught_exception = None for _ in range(30): try: baggrund = pygame.mixer.Sound("Sound/maskinrumStart.ogg") assens = pygame.mixer.Sound("Sound/anloebAssens.ogg") pumpe = pygame.mixer.Sound("Sound/multiPumpe.ogg") dampflute = pygame.mixer.Sound("Sound/dampfloejte.ogg") damp = pygame.mixer.Sound("Sound/dampUd.ogg") luft = pygame.mixer.Sound("Sound/luftUd.ogg") langsom = pygame.mixer.Sound("Sound/langsom.ogg") halvKraft = pygame.mixer.Sound("Sound/halvKraft.ogg") fuldKraft = pygame.mixer.Sound("Sound/fuldKraft.ogg") vand = pygame.mixer.Sound("Sound/vandIroer.ogg") vandpjask = pygame.mixer.Sound("Sound/vandPjask.ogg") overtryksventil = pygame.mixer.Sound("Sound/overtryksventil.ogg") maskinpiv = pygame.mixer.Sound("Sound/maskinKnirk.ogg") maskinhaveri = pygame.mixer.Sound("Sound/maskinSammenbrud.ogg") maskintelegraf = pygame.mixer.Sound("Sound/maskintelegraf.ogg") flute = pygame.mixer.Sound("Sound/floejteTelegraf.ogg") skipper01 = pygame.mixer.Sound("Sound/skipper01.ogg") skipper02 = pygame.mixer.Sound("Sound/skipper02.ogg") skipper03 = pygame.mixer.Sound("Sound/skipper03.ogg") #skipper04 = pygame.mixer.Sound("Sound/skipper04.ogg") #skipper05 = pygame.mixer.Sound("Sound/skipper05.ogg") #skipper06 = pygame.mixer.Sound("Sound/skipper06.ogg") #skipper07 = pygame.mixer.Sound("Sound/skipper07.ogg") #skipper08 = pygame.mixer.Sound("Sound/skipper08.ogg") #skipper09 = pygame.mixer.Sound("Sound/skipper09.ogg") #skipper10 = pygame.mixer.Sound("Sound/skipper10.ogg") #skipper11 = pygame.mixer.Sound("Sound/skipper11.ogg") #skipper12 = pygame.mixer.Sound("Sound/skipper12.ogg") #skipper13 = pygame.mixer.Sound("Sound/skipper13.ogg") #skipper14 = pygame.mixer.Sound("Sound/skipper14.ogg") #skipper15 = pygame.mixer.Sound("Sound/skipper15.ogg") #skipper16 = pygame.mixer.Sound("Sound/skipper16.ogg") #chief01 = pygame.mixer.Sound("Sound/chief01.ogg") #chief02 = pygame.mixer.Sound("Sound/chief02.ogg") #chief03 = pygame.mixer.Sound("Sound/chief03.ogg") #chief04 = pygame.mixer.Sound("Sound/chief04.ogg") #chief05 = pygame.mixer.Sound("Sound/chief05.ogg") #chief06 = pygame.mixer.Sound("Sound/chief06.ogg") #chief07 = pygame.mixer.Sound("Sound/chief07.ogg") #chief08 = pygame.mixer.Sound("Sound/chief08.ogg") #chief09 = pygame.mixer.Sound("Sound/chief09.ogg") Success = True break except: print("Uventet fejl ved aabning af lydfil: ", sys.exc_info()[0]) time.sleep(1) if not Success: print("Opening of sound file failed after 30 retries") if programvalg.read() != valg: return powernet.Relay5on() time.sleep(1) if (handling[11] != 0): channel1.set_volume(virkning[12] / 100, 0) # spiller kun i venstre kanal = maskinrum channel1.play(baggrund, loops=-1) # spiller uendeligt # Udfoer alle virkninger model.ModelReset() time.sleep(1) model.ModelRun(virkning[1], virkning[0]) time.sleep(1) skueglasOlie.set(virkning[2]) time.sleep(1) servo.smokeTemp(virkning[3]) time.sleep(1) skueglasKedel.set(virkning[4]) time.sleep(1) servoTryk.vis(virkning[6], virkning[7]) time.sleep(1) transport.TransportGo(virkning[8]) if (virkning[9] == 1): sikkerhedsventil.sikkerhedsventilOn() time.sleep(1) sikkerhedsventil.sikkerhedsventilOff() else: sikkerhedsventil.sikkerhedsventilOff() if (virkning[10] == 1): powernet.Relay4on() if (virkning[11] == 1): powernet.Relay4on() if (virkning[19] == 1): powernet.Relay10on() if (virkning[20] == 0): servo.maskintelegraf_FF() if (virkning[20] == 1): servo.maskintelegraf_HF() if (virkning[20] == 2): servo.maskintelegraf_LF() if (virkning[20] == 3): servo.maskintelegraf_FS() if (virkning[20] == 4): servo.maskintelegraf_LB() if (virkning[20] == 5): servo.maskintelegraf_HB() if (virkning[20] == 6): servo.maskintelegraf_FB() virkning[19] = 1 tid = 0 galRetning = 0 galRetningTid = 0 galHastighed = 0 galHastighedTid = 0 fejlBetjening = 0 fejlBetjeningTid = 0 callTime = 0 indpumpetFoer = 0 smokeStart = 0 roeg = False startTid = time.time() time.sleep(1) powernet.Relay3on() #Roegmaskine varmer op time.sleep(1) powernet.Relay10on() #Simulator klar lys time.sleep(1) # Initiering faerdig # Drift af simulatoren ###################################################### print("Program start") print() while handling[11] == valg: time.sleep(design[0]) tid = tid + 1 if (tilstand[6] > 3) and (tilstand[26] == 0): tilstand[26] = 1 if (tilstand[26] == 0): startTid = time.time() realTid = int(time.time() - startTid) # REGISTRER HANDLINGER #################################################### handling[0] = omstyring.Read_omstyring() handling[1] = oliepumpe.Read_flowmaaler() * design[5] handling[2] = primaerluft.Read_primaerluft() - primaerluftKorrektion if handling[2] > 100: handling[2] = 100 handling[3] = sekundaerLuft.Read_sekundaerluft() handling[4] = vejecelle.Read_vejecelle() / 1000 handling[5] = ventiler.readKedelvandInd() handling[6] = ventiler.readKedelvandUd() handling[7] = ventiler.readKondensatorvandInd() handling[8] = ventiler.readKondensatorvandUd() handling[9] = ventiler.readDampInd() handling[10] = ventiler.readDampUd() handling[11] = programvalg.read() # BEREGN TILSTANDE ######################################################## # Omstyring tilstand[0] = handling[0] # Flyveaske i roer (deaktiveret indtil sensorerne i roegroererne virker) # tilstand [11] = (tid-tilstand [12]) * design [13] # Energiproduktion if (handling[4] < 0.5): tilstand[2] = 0 tilstand[3] = design[2] * (100 - tilstand[11]) / 100 tilstand[10] = 0 tilstand[4] = 40 if ((handling[4] >= 0.5) and (handling[4] < 22.5) and (handling[3] <= 10)): tilstand[2] = (handling[2] + handling[3]) * 27.3 / 20 / 3600 tilstand[3] = design[2] * ( (100 - 4 * (10 - handling[3])) / 100) * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 if ((handling[4] >= 0.5) and (handling[4] < 22.5) and (handling[3] > 10)): tilstand[2] = (handling[2] + 10) * 27.3 / 20 / 3600 tilstand[3] = design[2] * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 if ((handling[4] >= 22.5) and (handling[4] < 45) and (handling[3] <= 10)): tilstand[2] = ((handling[2] * (100 - (handling[4] - 22.5) * 100 / 22.5) / 100) + handling[3]) * 27.3 / 20 / 3600 tilstand[3] = design[2] * ( (100 - 4 * (10 - handling[3])) / 100) * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 if ((handling[4] >= 22.5) and (handling[4] < 45) and (handling[3] > 10)): tilstand[2] = ((handling[2] * (100 - (handling[4] - 22.5) * 100 / 22.5) / 100) + 10) * 27.3 / 20 / 3600 tilstand[3] = design[2] * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 if ((handling[4] > 45) and (handling[3] <= 10)): tilstand[2] = handling[3] * 27.3 / 20 / 3600 tilstand[3] = design[2] * ( (100 - 4 * (10 - handling[3])) / 100) * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 if ((handling[4] > 45) and (handling[3] > 10)): tilstand[2] = 10 * 27.3 / 20 / 3600 tilstand[3] = design[2] * (100 - tilstand[11]) / 100 tilstand[10] = tilstand[2] * tilstand[3] tilstand[4] = ((tilstand[3] / 4.1868) / (0.24 * (1 + 20))) + 18 # Dampproduktion A -> F # A: opslag i damptabellen ved den aktuelle temperatur for x in range(len(dampTabel)): if dampTabel[x][1] > tilstand[13]: break enthalpiVandSpc = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][3], tilstand[13], dampTabel[x][1], dampTabel[x][3]) enthalpiDampSpc = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][4], tilstand[13], dampTabel[x][1], dampTabel[x][4]) volumenDampSpc = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][2], tilstand[13], dampTabel[x][1], dampTabel[x][2]) # B: vand ind og ud tilstand[5] = tilstand[5] + (handling[5] / 100) * design[8] - ( handling[6] / 100) * design[8] - (tilstand[18] + tilstand[19]) + tilstand[20] tilstand[25] = tilstand[25] + ( handling[5] / 100) * design[8] * dampTabel[0][3] - ( handling[6] / 100 ) * design[8] * enthalpiVandSpc + tilstand[20] * dampTabel[15][3] # C: energi ind og ud if (handling[4] > 0.5): tilstand[25] = tilstand[25] + tilstand[10] else: tilstand[25] = tilstand[25] - 31.2 * (tilstand[13] - 20) * ( 70 * design[1] / 7690) * 4.184 / 3600 # D: damp ud if (tilstand[6] > 11): tilstand[16] = 1 else: tilstand[16] = 0 if ((handling[9] + handling[10] + tilstand[16]) == 0): tilstand[18] = 0 tilstand[19] = 0 if handling[9] > 5: if tilstand[17] > 0.29: tilstand[18] = 0.29 * handling[9] / 100 else: tilstand[18] = tilstand[17] if tilstand[16] == 1: tilstand[19] = tilstand[17] - tilstand[18] else: tilstand[19] = (tilstand[17] - tilstand[18]) * handling[10] / 100 tilstand[17] = tilstand[17] - (tilstand[18] + tilstand[19]) tilstand[14] = tilstand[14] + tilstand[18] tilstand[15] = tilstand[15] + tilstand[19] tilstand[25] = tilstand[25] - (tilstand[18] + tilstand[19]) * enthalpiDampSpc # E: Beregn ny damptabel, dampTilstand, (p (bar abs), t (0C), kedlens samlede enthalpi (kJ)) for y in range(len(tilstandTabel)): tilstandTabel[y][2] = tilstand[5] * dampTabel[y][3] + tilstand[ 17] * dampTabel[y][4] # F: Find tryk og temperatur for den nye tilstand for x in range(len(tilstandTabel)): if tilstandTabel[x][2] > tilstand[25]: break tilstand[6] = damptabel.interpol(tilstandTabel[x - 1][2], tilstandTabel[x - 1][0], tilstand[25], tilstandTabel[x][2], tilstandTabel[x][0]) if tilstand[6] > 11.5: tilstand[6] = 11.5 if tilstand[6] < 0.5: tilstand[6] = 0.5 tilstand[13] = damptabel.interpol(tilstandTabel[x - 1][2], tilstandTabel[x - 1][1], tilstand[25], tilstandTabel[x][2], tilstandTabel[x][1]) tilstand[17] = ((design[1] - tilstand[5]) / 1000) / volumenDampSpc # Roeggastemperatur i skorsten if tilstand[2] > 0: if ((handling[3] <= 10) and (tilstand[2] > 0)): tilstand[24] = tilstand[13] + 50 if ((handling[3] > 10) and (tilstand[2] > 0)): tilstand[24] = tilstand[13] + 50 - 30 * (handling[3] / 100) tilstand[24] = tilstand[24] + (600 - tilstand[24]) * tilstand[11] / 100 else: tilstand[24] = 50 # Luftbalance if (tilstand[14] > 0) and (tilstand[7] == 1): if tilstand[15] > ((design[1] - tilstand[5]) * 1.29 / 1000): tilstand[7] = 0 design[14] = design[ 14] * 1.1 # Vi oeger maskinens dampbehov, hvis der er luft i dampen # Fortaetning af damp i kondensatoren tilstand[20] = tilstand[18] * (100 - design[6]) / 100 if tilstand[18] > 0: tilstand[21] = 99 - (handling[7] * 0.9) else: tilstand[21] = 9 for x in range(len(dampTabel)): if dampTabel[x][1] > tilstand[21]: break tilstand[22] = damptabel.interpol(dampTabel[x - 1][1], dampTabel[x - 1][0], tilstand[21], dampTabel[x][1], dampTabel[x][0]) if (tilstand[22] > 1) or (tilstand[18] == 0): tilstand[22] = 1 # Maskinydelse tilstand[8] = int(100 * (tilstand[18] / design[14]) * ((tilstand[6] - tilstand[22]) / 9) * (abs(tilstand[0] - 50) / 50) * (handling[8] / 100)) # Oliebalance tilstand[1] = tilstand[1] + handling[ 1] - indpumpetFoer - design[3] * tilstand[8] * 0.01 / 3600 indpumpetFoer = handling[1] # BEREGN OG UDFOER VIRKNINGER ########################################################################### virkning[0] = handling[0] virkning[1] = tilstand[8] model.ModelRun(virkning[1], virkning[0]) channel2.set_volume(virkning[1], 0) if (virkning[1] > 0) and (virkning[1] <= 33): channel2.play(langsom, loops=-1) if (virkning[1] > 33) and (virkning[1] <= 66): channel2.play(halvKraft, loops=-1) if (virkning[1] > 66): channel2.play(fuldKraft, loops=-1) virkning[2] = int(tilstand[1] / design[4] * 100) if virkning[2] > 100: virkning[2] = 100 skueglasOlie.set(virkning[2]) virkning[3] = tilstand[24] servoTemp.vis(virkning[3]) virkning[4] = int(tilstand[5] / design[1] * 100) if virkning[4] > 100: virkning[4] = 100 skueglasKedel.set(virkning[4]) virkning[6] = tilstand[22] virkning[7] = tilstand[6] - 1 # Manometeret viser bar overtryk if virkning[7] < 0: virkning[7] = 0 servoTryk.vis(virkning[6], virkning[7]) if (tilstand[2] > 0) and ( tid % 10 == 0 ): # fordi baandet ikke kan koere langsommere end 0,1 m/s = speed 15 virkning[8] = tilstand[2] * design[11] / handling[4] speed = int(virkning[8] * 255 * 10 / design[12]) if speed < 15: speed = 15 transport.TransportGo(speed) else: transport.TransportStop() virkning[9] = tilstand[16] if virkning[9] == 1: sikkerhedsventil.sikkerhedsventilOn() else: sikkerhedsventil.sikkerhedsventilOff() if handling[4] > 1: virkning[10] = 1 powernet.Relay4on() virkning[11] = 1 powernet.Relay4on() else: virkning[10] = 0 powernet.Relay4off() virkning[11] = 0 powernet.Relay4off() if tilstand[8] > 0: virkning[5] = 1 if (pause == 1): IRremote.TVpause() pause = 0 else: virkning[5] = 0 if (pause == 0): IRremote.TVpause() pause = 1 #virkning[12] anvendes kun i initialiseringen virkning[14] = max(handling[5], handling[6]) if virkning[14] > 10: channel4.set_volume(virkning[14] / 100, 0) if not channel4.get_busy(): channel4.play(vand, loops=-1) else: channel4.stop() if ((tilstand[5] > design[1]) or (tilstand[1] > design[4])): virkning[15] = 100 else: virkning[15] = 0 if virkning[15] > 10: channel11.set_volume(virkning[15] / 100, 0) if not channel11.get_busy(): channel11.play(vandpjask, loops=-1) else: channel11.stop() if tilstand[16] == 1: virkning[16] = 100 else: virkning[16] = 0 if tilstand[6] > 3: virkning[23] = handling[10] if virkning[23] > 10: channel6.set_volume(virkning[23] / 100, 0) if not channel6.get_busy(): if (tilstand[15] < (design[1] - tilstand[5]) / (1.7259 * 1000)): channel6.play(luft, loops=-1) else: channel6.play(damp, loops=-1) else: channel6.stop() if virkning[16] > 10: channel7.set_volume(virkning[16] / 100, 0) if not channel7.get_busy(): channel7.play(overtryksventil, loops=-1) else: channel7.stop() if tilstand[1] < 1: virkning[17] = 100 - 100 * tilstand[1] else: virkning[17] = 0 if ((virkning[17] > 10) and (tilstand[8] > 0)): channel8.set_volume(virkning[17] / 100, 0) if not channel8.get_busy(): channel8.play(maskinpiv, loops=-1) else: channel8.stop() if tilstand[1] < 0.1: virkning[18] = 100 virkning[1] = 0 else: virkning[18] = 0 if virkning[18] > 10: channel9.set_volume(virkning[18] / 100, 0) if not channel9.get_busy(): channel9.play(maskinhaveri, loops=0) else: channel9.stop() #virkning[19] anvendes kun i initialiseringen # Her saettes spilforloebet ############################################################################## if (realTid > 10) and (realTid <= 20): if virkning[21] != 101: virkning[21] = 101 virkning[24] = 1 channel3.set_volume(1, 0) channel3.play(flute, loops=0) time.sleep(5) channel12.set_volume(0, 1) channel12.play(skipper01, loops=0) # Fem minutter til afgang callTime = realTid if (realTid > 290) and (realTid < 305): if virkning[20] != 8: virkning[20] = 8 servo.maskintelegraf_FS() channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=2, maxtime=1000) if (realTid > 305) and (realTid <= 325): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 325) and (realTid <= 345): if virkning[20] != 4: virkning[20] = 4 servo.maskintelegraf_LB() channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) if (realTid > 345) and (realTid <= 365): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 365) and (realTid <= 390): if virkning[20] != 1: virkning[20] = 1 servo.maskintelegraf_HF() channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) if (realTid > 390) and (realTid < 965): if virkning[20] != 0: virkning[20] = 0 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_FF() if (realTid > 800) and (realTid <= 900): # Roegmaskine aktiveres #print("Virkning[24] = ",virkning[24]) if virkning[24] != 0: virkning[24] = 0 tilstand[11] = 100 powernet.Relay9on() #print("Roeg aktiveres") roeg = True smokeStart = realTid if (roeg == True) and ((realTid - smokeStart) < 310): if (realTid - smokeStart) > 90: powernet.Relay9off() #print("Roeg stoppes") time.sleep(3) powernet.Relay7on() #print("Ventilator taendes") tilstand[11] = 0 roeg = False if (realTid - smokeStart) > 300: smokeStart = 0 if (realTid > 900) and (realTid < 950): if virkning[21] != 102: virkning[21] = 102 channel3.set_volume(1, 0) channel3.play(flute, loops=0) time.sleep(5) channel12.set_volume(0, 1) channel12.play(skipper02, loops=0) # 200 meter til havnemolen callTime = realTid if (realTid > 968) and (realTid <= 1033): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 1033) and (realTid <= 1055): if virkning[20] != 4: virkning[20] = 4 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LB() if (realTid > 1055) and (realTid <= 1092): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 1092) and (realTid <= 1118): if virkning[20] != 4: virkning[20] = 4 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LB() if (realTid > 1118) and (realTid <= 1231): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 1231) and (realTid <= 1259): if virkning[20] != 4: virkning[20] = 4 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LB() if (realTid > 1259) and (realTid <= 1290): if virkning[20] != 2: virkning[20] = 2 servo.maskintelegraf_LF() channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) if (realTid > 1290) and (realTid <= 1317): if virkning[20] != 4: virkning[20] = 4 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LB() if (realTid > 1317) and (realTid <= 1387): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 1387) and (realTid <= 1403): if virkning[20] != 4: virkning[20] = 4 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LB() if (realTid > 1403) and (realTid <= 1600): if virkning[20] != 2: virkning[20] = 2 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_LF() if (realTid > 1603) and (realTid <= 1610): if virkning[20] != 3: virkning[20] = 3 virkning[25] = 1 channel3.set_volume(1, 0) channel3.play(maskintelegraf, loops=0) servo.maskintelegraf_FS() if (realTid > 1615) and (realTid <= 1630): if virkning[25] > 0: channel9.set_volume(virkning[25], 0) channel9.play(dampflute, loops=0) virkning[25] = 0 if (realTid > 1630) and (realTid <= 1650): if virkning[21] != 103: virkning[21] = 103 #channel3.set_volume(1,0) channel3.play(flute, loops=0) time.sleep(5) channel12.set_volume(0, 1) channel12.play(skipper03, loops=0) # Tak for sejladsen callTime = realTid if realTid > 1700: IRremote.TVonOff() powernet.RelayAlloff() return # Programmet stopper efter et gennemloeb af spillet og starter for fra med ny initiering # DEBUGGING ############################################################################### print( "Cykl = {:>4.0f}\tp = {:>4.2f} bar\tt = {:>6.2f} 0C\tE(ind) = {:>6.2f} kJ/sek \tDamp i kedlen = {:>6.4f} kg\tMaskinydelse = {:>6.0f} %\t\tReal tid = {:>6.0f} %\t\Kedel_ind = {:>6.0f} %\t\Kedel_ud = {:>6.0f}" .format(tid, tilstand[6], tilstand[13], tilstand[10], tilstand[17], tilstand[8], realTid, handling[5], handling[6]))