プラントエンジニアリング

【プラントエンジニアリング, Streamlit】等エンタルピー変化自動計算プログラム/Calculator for isentropic process(steam & water)

Streamlitを用いて、等エンタルピー変化の計算をwebアプリ化しました。

コード

import streamlit as st
import pandas as pd
from calculater import enthalpy, isenthalpic
import streamlit.components.v1 as components

@st.cache
def steamtable():
    steam_table = pd.read_excel("steamtable_from.xlsx",)
    steam_table.index = steam_table['Temp']
    steam_table = steam_table.drop('Temp', axis=1)
    return steam_table
    
df = pd.DataFrame(steamtable())


st.title('Saturated steam & hotwater  isenthalpic calculater ver0.0')
st.title('飽和蒸気・熱水の等エンタルピー計算')


st.sidebar.success('初期条件 (Initial condition)')
steam = st.sidebar.number_input('(1) steam (t/h)', min_value=0.00, max_value=None, step=None, )
hot_water = st.sidebar.number_input('(2) hot water (t/h)', min_value=0.00, max_value=None, step=None)

st.sidebar.write("👇 圧力条件 or 温度条件のみを入力")
st.sidebar.text("(only Pressure or only Temp)")
Pre = st.sidebar.number_input('(3) Pressure (MPaG)', min_value=0.00, max_value=3.8, step=None)
Temp = st.sidebar.number_input('(4) Temp (℃)', min_value=0, max_value=250, step=None)
Temp = int(Temp)

if  Temp == 0.00:
    Temp1 = df.index[(df['圧力_MPaG']-Pre).abs().argsort()][0].tolist()
    Temp = Temp1
elif  Temp != 0.00 and Pre != 0.00:
    st.error('圧力条件 or 温度条件のみを入力(only Pressure or only Temp)')
else:
    Pre1 = df.at[Temp,'圧力_MPaG']
    Pre = round(Pre1,2)

st.sidebar.success('Another condition')
st.sidebar.write("👇 圧力条件 or 温度条件のみを入力")
st.sidebar.text("(only Pressure or only Temp)")
Pre2 = st.sidebar.number_input('(7) Pressure2 (MPaG)', min_value=0.00, max_value=None, step=None)
Temp2 = st.sidebar.number_input('(6) Temp2 (℃)', min_value=0.00, max_value=None, step=None)
Temp2 = int(Temp2)


if Temp2 == 0.00:
    Pre_list = df['圧力_MPaG']
    Temp2 = df.index[(Pre_list-Pre2).abs().argsort()][0].tolist()
elif  Temp2 != 0.00 and Pre2 != 0.00:
    st.error('圧力条件 or 温度条件のみを入力(only Pressure or only Temp)')
else:
    Pre2 = df.at[Temp2,'圧力_MPaG']
    Pre2 = round(Pre2,3)

button = st.sidebar.button('計算')

if button:
    st.success('初期条件(Initial condition)')

    es = df.loc[Temp, '飽和蒸気_比エンタルピー_kJ/kg']
    eh = df.loc[Temp, '飽和水_比エンタルピー_kJ/kg']

    en = enthalpy(steam, hot_water, es, eh)
    es = round(es,2)
    eh = round(eh,2)
    X = round(en[0],2)
    Se = round(en[1],2)
    total_enthalpy = round(en[2],2)

    st.write('温度', Temp, '℃')
    st.write('圧力', Pre, 'MPaG')
    st.write('乾き度', X)
    st.write('蒸気流量', steam, 't/h')
    st.write('熱水流量', hot_water, 't/h')

    st.success('等エンタルピー変化後(for another condition)')
    es2 = df.loc[Temp2, '飽和蒸気_比エンタルピー_kJ/kg']
    eh2 = df.loc[Temp2, '飽和水_比エンタルピー_kJ/kg']

    isenthalpic = isenthalpic(Se,es2,eh2,steam,hot_water)
    es2 = round(es2,2)
    eh2 = round(eh2,2) 
    X1 = round(isenthalpic[0],2)
    flow_g = round(isenthalpic[1],2)
    flow_w = round(isenthalpic[2],2)

    st.write('温度', Temp2, '℃')
    st.write('圧力', Pre2, 'MPaG')
    st.write('乾き度', X1)
    st.write('蒸気流量', flow_g, 't/h')
    st.write('熱水流量', flow_w, 't/h')

    st.success('共通')
    st.write('比エンタルピー', Se, 'kJ/kg')
    st.write('total_enthalpy', total_enthalpy, 'kJ/s')
else:
    st.error('左記にデータを入力してください(Enter data in sidebar)')

st.info("概要")
'断熱条件における温度圧力の変化に伴う二相流の乾き度(蒸気量と熱水量)の変化を計算する。この計算は飽和蒸気のみ、または飽和熱水のみ場合においても使用可能である。過熱蒸気や不飽和熱水は想定していない。'
''

'計算で用いた式は以下の通りである。ただし、以下の計算は全て理想条件で行われるとする。'


st.write('〇乾き度(X)(Quality)')
st.latex(r'X = {Vg \above{2pt} Vg+Vl}')
st.text("Vg : 初期条件の蒸気流量 Steam flow rate for initial conditions (t/h)")
st.text("Vl: 初期条件の熱水流量 Hot water flow rate for initial conditions (t/h)")

st.write('〇比エンタルピー(H)(specific enthalpy)')
st.latex(r'H = Hg\times{X} + Hl\times{(1-X)}')
st.text("Hg : 飽和蒸気の比エンタルピー specific enthalpy of steam (kJ/kg)")
st.text("Hl : 飽和熱水の比エンタルピー specific enthalpy of hot water (kJ/kg)")


st.write("〇温度圧力条件を変化した場合(for another condition)の乾き度(X')と流量(Flow rate)")
st.latex(r'X^{\prime} = \dfrac{H-H^{\prime}l}{H{\prime}g-H^{\prime}l}')
st.text("H'g : Specific enthalpy of steam for another conditions (t/h)")
st.text("H'l : Specific enthalpy of Hot water for another conditions (t/h)")


st.latex(r'V^{\prime}g = X^{\prime}\times{(Vg+Vl)}')
st.latex(r'V^{\prime}l = (1-X^{\prime})\times{(Vg+Vl)}')
st.text("V'g : 別条件の蒸気流量 Steam flow rate for another conditions (t/h)")
st.text("V'l : 別条件の熱水流量 Hot water flow rate for another conditions (t/h)")

実際のwebアプリ

https://enthalpy02.herokuapp.com/

コード解説

プラントエンジニアリング
最新情報をチェックしよう!