ボイラー・ターボ発電機

バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"BioSTEAM"のボイラー・ターボ発電機モデルの使い方を説明しています。サトウキビのバガスを燃料としてボイラーで燃焼させ、蒸気タービン発電機で発電させる想定のモデルです。蒸気の発生量や、蒸気タービン発電機の冷却に必要な冷却装置も考慮します。オリジナルのページはBoilerTurbogeneratorです。 ソースコードは以下の実行環境で確認しています。
  • Visual Studio Code バージョン: 1.104.2
  • 拡張機能:Jupyter バージョン 2025.8.0
  • Python 3.12.10
  • biosteam 2.52.13
  • graphviz-14.0.2

ボイラー・ターボ発電機

class BoilerTurbogenerator(ID='', ins=None, outs =('emissions', 'rejected_water_and_blowdown', 'ash_disposal'), thermo=None,*, boiler_efficiency=None, turbogenerator_efficiency=None, side_steam=None, agent=None, other_agents=None, fuel_price=None, natural_gas_price=None, ash_disposal_price=None, T_emissions=None, CO2_emissions_concentration=None, satisfy_system_electricity_demand=None, boiler_efficiency_basis=None, fuel_source=None, oxygen_rich_gas_composition=None ) [source]

サトウキビのバガスを燃料としてボイラーで燃焼させ、蒸気タービン発電機で発電させる想定で発電量を生成するBoilerTurbogeneratorオブジェクトを生成します。蒸気の発生量や、蒸気タービン発電機の冷却に必要な冷却装置も考慮します。設備費はHumbirdら[1]に基づいています。
  • パラメータ
    • ID (str、省略可) - 他で使われていない、一意の識別子(ID)。IDが指定されていない場合は、自動的に一意のIDが付与されます。
    • ins (Sequence(順序付きコレクション)[AbstractStream]、省略可)
    • 燃料は蒸気や電気の需要に基づいて計算されます。
      • [0] 液体もしくは固体燃料
      • [1] 燃料ガス
      • [2] 補給水
      • [3] 天然ガス
      • [4] 排ガス脱硫のための石灰
      • [5] ボイラー用薬品
      • [6] 空気もしくは酸素
    • outs (Sequence(順序付きコレクション)[AbstractStream]、省略可)
      • [0] 排ガス
      • [1] ブローダウン水
      • [2] 焼却灰
    • boiler_efficiency (float、省略可) - 蒸気への熱伝達率。デフォルトは0.8。
    • turbo_generator_efficiency (float、省略可) - 蒸気から電力に変換される効率。デフォルトは0.85。
    • agent (UtilityAgent、省略可) - 生成される蒸気。デフォルトは低圧蒸気
    • other_agents (UtilityAgent、省略可) - 他に生成される蒸気。デフォルトは他のすべての加熱手段。
    • fuel_source (str、省略可) - 蒸気と電気の需要を満たす燃料の名称。デフォルトはCH4
    • fuel_price (float、省略可) - 天然ガス価格[USD/kg]。bst.stream_utility_prices[‘Natural gas’]と同じ。デフォルトは0.218
    • ash_disposal_price (float、省略可) - 焼却灰の処理費用。bst.stream_utility_prices[‘Ash disposal’]と同じ。デフォルトは-0.0318
    • satisfy_system_electricity_demand (bool、省略可) - 投入バイオマスでシステムの電力需要が不足する場合に天然ガスを使うかどうか。もしTrueの場合は使用します。Falseの場合は、天然ガスは熱の需要を満たす分だけ購入し、投入バイオマスから十分な熱が得られない場合は、電力を系統電力より購入します。いずれの場合でも、投入バイオマスから余剰の熱が得られる場合は、電力は引き続き生成されます。
    • boiler_efficiency_basis (str、省略可) - ボイラー効率の算定基準。デフォルトでは低位発熱量(LHV)を使用しますが、高位発熱量(HHV)も有効な基準です。
  • サトウキビのバガスから蒸気を蒸留塔に供給し、余剰の蒸気で発電するボイラー・タービン発電システムを生成します。
    import biosteam as bst
    from biorefineries import cane
    bst.nbtutorial() # Ignore warnings and reset local BioSTEAM preferences
    
    chemicals = cane.create_sugarcane_chemicals()
    chemicals.define_group(
        name='Fiber',
        IDs=['Cellulose', 'Hemicellulose', 'Lignin'],
        composition=[0.4704 , 0.2775, 0.2520],
        wt=True, # Composition is given as weight
    )
    bst.settings.set_thermo(chemicals)
    dilute_ethanol = bst.Stream('dilute_ethanol', Water=1390, Ethanol=590)
    bagasse = bst.Stream('bagasse', Water=0.4, Fiber=0.6, total_flow=8e4, units='kg/hr')
    with bst.System('sys') as sys:
        D1 = bst.BinaryDistillation('D1', ins=dilute_ethanol, Lr=0.999, Hr=0.89, k=1.25, LHK=('Ethanol', 'Water'))
        BT = bst.BoilerTurbogenerator('BT')
        BT.ins[0] = bagasse
    sys.simulate()
    BT.show()
    BoilerTurbogenerator: BT
    ins...
    [0] bagasse  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water          1.78e+03
                        Cellulose      139
                        Hemicellulose  101
                        Lignin         79.5
    [1] -  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow: 0
    [2] -  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water  488
    [3] -  
        phase: 'g', T: 288.71 K, P: 101560 Pa
        flow: 0
    [4] -  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow: 0
    [5] -  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Ash  0.567
    [6] -  
        phase: 'g', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): O2  9.85e+03
                        N2  4.23e+04
    outs...
    [0] emissions  
        phase: 'g', T: 394.15 K, P: 101325 Pa
        flow (kmol/hr): Water  3.19e+03
                        CO2    1.98e+03
                        O2     7.84e+03
                        N2     4.23e+04
    [1] rejected_water_and_blowdown  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water  488
    [2] ash_disposal  
        phase: 'l', T: 298.15 K, P: 101325 Pa
        flow (kmol/hr): Water  0.00944
                        Ash    0.567
    蒸気と電力は生成しているので、コストはマイナスとしています。
    BT.results() # Steam and electricity are produced, so costs are negative
    Boiler turbogenerator Units BT
    Electricity PowerkW-1.31e+05
    CostUSD/hr-1.02e+04
    Low pressure steam DutykJ/hr-7.32e+07
    Flowkmol/hr-1.89e+03
    CostUSD/hr-450
    Cooling water DutykJ/hr-8.42e+07
    Flowkmol/hr5.75e+04
    CostUSD/hr28.1
    Fuel (inlet) Flowkmol/hr0
    CostUSD/hr0
    Ash disposal (outlet) Flowkmol/hr0.737
    CostUSD/hr0.0234
    Design WorkkW1.33e+05
    Flow ratekg/hr2.93e+05
    Ash disposalkg/hr0.737
    Purchase cost Baghouse bagsUSD81.1
    BoilerUSD3.33e+07
    DeaeratorUSD3.58e+05
    Amine addition pkgUSD4.69e+04
    Hot process water softener systemUSD9.16e+04
    TurbogeneratorUSD1.94e+07
    Total purchase cost USD5.32e+07
    Utility cost USD/hr-1.07e+04
  • 注記
  • 天然ガスや排ガス脱硫のための石灰(ストリーム 3-5)は自動的に計算されます。

    蒸留塔モデルとの関係ですが、図でシステムを確認すると、見た目ではボイラー・ターボ発電機 BT と、蒸留塔 D1 は接続されていません。

    解説のところで、熱と電気の需要に応じて、とあったので、heat_utilityesを調べてみます。まずは蒸留塔側です。
    D1.heat_utilities
    [<cooling_water: -2.87e+07 kJ/hr, 1.96e+04 kmol/hr, 9.55 USD/hr>,
     <low_pressure_steam: 7.32e+07 kJ/hr, 1.89e+03 kmol/hr, 450 USD/hr>]
    次に、ボイラー・ターボ発電機側を見ると、
    BT.heat_utilities
    [<low_pressure_steam: -7.32e+07 kJ/hr, -1.89e+03 kmol/hr, -450 USD/hr>,
     <cooling_water: -8.42e+07 kJ/hr, 5.75e+04 kmol/hr, 28.1 USD/hr>]
    となっていて、低圧蒸気(low_pressure_steam)が同じになっています。システムとして登録されるときに、steam agent heat utility がボイラー・ターボ発電機のheat utilityに登録されるようになっているので、このようなことが起きます。ちなみに、蒸留塔の方の必要な熱量は、リボイラーで必要な熱量で以下のようになっていました。
    D1.reboiler.heat_utilities
    [<low_pressure_steam: 7.32e+07 kJ/hr, 1.89e+03 kmol/hr, 450 USD/hr>]
    ということで、蒸留塔のリボイラーに必要な蒸気の熱量をボイラー・ターボ発電機で供給しているという想定だということが分かりました。一方で、ボイラー・ターボ発電機の冷却要求は、蒸気の温度を目標まで下げるために必要な負荷のようです。
  • コスト計算
  • ボイラー・ターボ発電機は、以下の5個の構成要素から構成されていました。
    • Baghouse bags(集塵バッグ)
    • Boiler(ボイラー)
    • Deaerator(ボイラー脱気装置*1)
    • Amine addition pkg(アミン添加装置*2)
    • Hot process water softener system(高温プロセス用の軟水化装置*3)
    • Turbogenerator(ターボ発電機)
    ベースライン購入価格を確認します。
    BT.baseline_purchase_costs
    {'Baghouse bags': 81.14140223150198,
     'Boiler': 33266811.18699075,
     'Deaerator': 357990.4755369523,
     'Amine addition pkg': 46949.570562223256,
     'Hot process water softener system': 91551.66259633536,
     'Turbogenerator': 19445088.3634539}
    • *1:
      ボイラー給水から酸素や二酸化炭素などの溶存ガスを除去する装置[4]
    • *2:
      蒸気系統内の酸性物質(主にCO₂由来の炭酸)を中和し、腐食を防止。
    • *3:
      ボイラーや高温洗浄工程などで使用される水中の硬度成分(カルシウム・マグネシウム)を除去し、劣化を防止[5]
    確認したところ、設計の補正係数(F_D)、圧力の補正係数(F_P)、材料の補正係数(F_M)ともになにも設定されていなかったので、それらを補正した購入価格はベースライン購入価格と同じでした。
    BT.purchase_costs
    {'Baghouse bags': 81.14140223150198,
     'Boiler': 33266811.18699075,
     'Deaerator': 357990.4755369523,
     'Amine addition pkg': 46949.570562223256,
     'Hot process water softener system': 91551.66259633536,
     'Turbogenerator': 19445088.3634539}
    設置コストに関する係数は設定されています。
    BT.F_BM
    {'Baghouse bags': 1.0,
     'Boiler': 1.8,
     'Deaerator': 3.0,
     'Amine addition pkg': 1.8,
     'Hot process water softener system': 1.8,
     'Turbogenerator': 1.8}
    設置コストは以下のようでした。
    BT.installed_costs
    {'Baghouse bags': 81.14140223150198,
     'Boiler': 59880260.13658334,
     'Deaerator': 1073971.426610857,
     'Amine addition pkg': 84509.22701200185,
     'Hot process water softener system': 164792.99267340364,
     'Turbogenerator': 35001159.05421701}
    グラフにしてみると、ボイラーが高いことが分かりますね。

_units : dict [str, str] = {}

計算結果である辞書型配列 design_results の値の単位。
  • Flow rate : kg/hr
  • Work : kW
  • Ash disposal : kg/hr

makeup_water: プロパティ、Stream

ボイラーのブローダウンのための補給水。蒸気生成量に対して排出されるブローダウン水の量を計算し、それを補うための補給水量を逆浸透膜の効率を考慮して算出しています。ins[2]

fuel: プロパティ、Stream

蒸気、電力需要を賄うための燃料。ins[3]

natural_gas: プロパティ、Stream

蒸気、電力需要を賄うための燃料。fuel

air: プロパティ、Stream

燃焼のための大気もしくは酸素割合の多いガス。ins[6]

oxygen_rich_gas: プロパティ、Stream

燃焼のための酸素割合の多いガス。air

emissions: プロパティ、Stream

排出される燃焼後のガス。outs[0]

blowdown_water: プロパティ、Stream

ブローダウン時に排出される水。outs[1]

ash_disposal: プロパティ、Stream

排出される灰。outs[2]

fuel_price: プロパティ、float

燃料価格。bst.stream_utility_prices['Fuel']fuel_price(new_price)で更新可能。

natural_gas_price: プロパティ、float

天然ガス価格。fuel_priceと同じ。

ash_disposal_price: プロパティ、float

排出される灰の処理費用。bst.stream_utility_prices['ash_disposal']ash_disposal_price(new_price)で更新可能。

_load_utility_agents

  • システム内の他の機器ユニットのheat_utilityesの媒体が'low_pressure_steam'となっているheat_utilityesを集約
  • システム内の他の機器ユニットの必要電力量を集約

_design()

戻り値

  • Work : 発電量 [kWh]
  • Flow rate : 蒸気流量 [kg/hr]
  • Ash disposal : 灰 + 水分の総量 [kg/hr]

計算ステップ

  1. 蒸気ユーティリティの抽出
    • 他ユニットのheat_utilitiesから、 蒸気ユーティリティを抽出。_load_utility_agents()
    • 蒸気のモル流量を合計。
  2. 発熱量、発電量、蒸気量、必要冷却量の計算
    • 供給されるバイオマス成分、天然ガス等のLHV(低位発熱量)または HHV(高位発熱量)を合計して、供給物の燃焼による発熱量(H_cumbusion)を計算
    • 発熱量にボイラー効率(B_eff)を掛けて有効熱量(H_content)に変換。
    • \[ 有効熱量\textit{(H_content)} = \textit{boiler_efficiency} \cdot 発熱量\textit{(H_cumbusion)} \]
    • 有効熱量から必要蒸気分を引き、発電効率を掛けて発電量を計算。
    • \[ 発電量\textit{(H_electricity)} = 有効熱量\textit{(H_content)} - 必要蒸気量 \]
    • 天然ガス不要かどうかの判定
      • まず、天然ガス(デフォルトの場合)
      • 発電量が不足する場合は天然ガス(デフォルトの場合)の必要量を計算
      • 必要な天然ガス(デフォルトの場合)量はresults()等で確認可能
    • 発電量のうち、発電損失分をボイラー・ターボ発電機の要求冷却量とする。
    • \[ 要求冷却量\textit{(cooling_duty)} = 発電量\textit{(H_electricity)(1 - turbo_generator_efficiency)} \]
    • 発電量のうち、発電効率を考慮して、ボイラー・ターボ発電機の発電量(Work)とする。
    • \[ 発電量(Work) [kWh] = \textit{turbo_generator_efficiency} \cdot 発電量\textit{(H_electricity)} / 3600 \]
    • 有効熱量(H_content) を過熱蒸気のモル当たりのエネルギー量(39MJ/mol)で割り、水のモル質量(18.01528)をかけることで蒸気流量(Flow rate)を算出。
    • \[ 蒸気流量(Flow rate) [kg/hr] = 有効熱量\textit{(H_content)} / 39,000 \cdot 18.01528 \]
    • 天然ガス不要かどうかの判定
      • まず、天然ガス(デフォルトの場合)なしでの発電量を計算
      • 発電量が不足する場合、必要な天然ガス(デフォルトの場合)量を計算
      • 計算された天然ガス(デフォルトの場合)量を追加して発電量、排出ガス量等を計算
      • 計算された天然ガス(デフォルトの場合)量はresults()等でも確認可能
  3. 排気エミッションの計算
    • 投入バイオマスが燃焼し、生成する成分を計算。反応式は以下で確認できる。get_combustion_reactions()
      BT.combustion_reactions
      ParallelReaction (by mol):
      index  stoichiometry                            reactant         X[%]
      [0]    Ethanol + 3 O2 -> 3 Water + 2 CO2        Ethanol        100.00
      [1]    Glucose + 6 O2 -> 6 Water + 6 CO2        Glucose        100.00
      [2]    Sucrose + 12 O2 -> 11 Water + 12 CO2     Sucrose        100.00
      [3]    H3PO4 -> 1.5 Water + 0.25 P4O10          H3PO4          100.00
      [4]    Octane + 12.5 O2 -> 9 Water + 8 CO2      Octane         100.00
      [5]    2 O2 + CH4 -> 2 Water + CO2              CH4            100.00
      [6]    6 O2 + Cellulose -> 5 Water + 6 CO2      Cellulose      100.00
      [7]    5 O2 + Hemicellulose -> 4 Water + 5 CO2  Hemicellulose  100.00
      [8]    8.5 O2 + Lignin -> 4 Water + 8 CO2       Lignin         100.00
      [9]    1.12 O2 + Yeast -> 0.805 Water + CO2     Yeast          100.00
      [10]   CaO -> 0.5 O2 + 40.1 Ash                 CaO            100.00
    • 酸素消費量に応じて酸素リッチガスの供給量を調整。
  4. 補給水量の計算
  5. 蒸気生成量に対して排出されるブローダウン水の量を計算し、それを補うための補給水量を逆浸透膜の効率を考慮して算出しています。 \[ 補給水量 [kmol/hr] = 生成蒸気量\textit{(H_content)} \cdot ブローダウン率 \cdot \frac{1}{1 - 逆浸透膜による水の拒否率} \] ブローダウン率:現状は\3%、逆浸透膜による水の拒否率:現状は0になっていました。 また、この式によるとemissionsストリームの計算とは別になっているので、投入バイオマスや天然ガス等の燃焼による水分がこちらに混入することはなさそうです。
    • ブローダウンとは?
    • ボイラー缶水で不純物が濃縮するのを防止するために缶水の一部を連続的に外部に排出すること [2]だそうです。
    • 逆浸透膜?
    • ボイラーに供給する水にはミネラル分や塩分が含まれていると不具合が生じるため、 逆浸透膜(RO膜)による異物除去処理をするそうです。逆浸透膜(RO膜)に水を高圧で通すことで 不純物が除去されるそうです[3]
  6. 排ガスと灰の処理
    • emissionsストリームから、灰に該当する成分(ash_IDs に含まれる成分)を抽出
    • ボイラー運転に伴って定量的に発生する薬品(boiler chemicals)由来の灰として、 1.9345e-06 * 蒸気流量(Flow Rate)を加算
    • 以上の計算で出てきた灰分を乾いた灰とし、 乾いた灰の30%かemissionsストリームの内の水分の少ない方を灰に含む水分とします。 これによって灰の含水率を約20〜30%に保つことを模擬します。
    • Ash disposalストリームに水分を追加し、 その分をemissionsストリーム
    • の水分より減少させます。
    以上により、Ash disposalストリームを算出します。
  7. 石灰による脱硫(FGD)
    • SO2が生成された場合、石灰(CaOまたはCa(OH)2)での脱硫反応を適用する想定で、関連する成分を増加させます。
    • 石灰の供給量は生成されたSO2の20%とします。
    • 石灰がCa(OH)2の場合は石灰分の4倍、CaOの場合は5倍のモル数の水分を追加します。

参考文献

このブログの人気の投稿

さあ、始めよう!

蒸留塔

機器ユニットの計算結果