ボイラー・ターボ発電機
バイオ・リファイナリー(再生可能資源であるバイオマスを原料にバイオ燃料や樹脂などを製造するプラントや技術)のシミュレーションソフト"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)も有効な基準です。
- 例
- 注記
- コスト計算
- Baghouse bags(集塵バッグ)
- Boiler(ボイラー)
- Deaerator(ボイラー脱気装置*1)
- Amine addition pkg(アミン添加装置*2)
- Hot process water softener system(高温プロセス用の軟水化装置*3)
- Turbogenerator(ターボ発電機)
-
*1:ボイラー給水から酸素や二酸化炭素などの溶存ガスを除去する装置[4]。
-
*2:蒸気系統内の酸性物質(主にCO₂由来の炭酸)を中和し、腐食を防止。
-
*3:ボイラーや高温洗浄工程などで使用される水中の硬度成分(カルシウム・マグネシウム)を除去し、劣化を防止[5]。
サトウキビのバガスから蒸気を蒸留塔に供給し、余剰の蒸気で発電するボイラー・タービン発電システムを生成します。
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 | Power | kW | -1.31e+05 |
| Cost | USD/hr | -1.02e+04 | |
| Low pressure steam | Duty | kJ/hr | -7.32e+07 |
| Flow | kmol/hr | -1.89e+03 | |
| Cost | USD/hr | -450 | |
| Cooling water | Duty | kJ/hr | -8.42e+07 |
| Flow | kmol/hr | 5.75e+04 | |
| Cost | USD/hr | 28.1 | |
| Fuel (inlet) | Flow | kmol/hr | 0 |
| Cost | USD/hr | 0 | |
| Ash disposal (outlet) | Flow | kmol/hr | 0.737 |
| Cost | USD/hr | 0.0234 | |
| Design | Work | kW | 1.33e+05 |
| Flow rate | kg/hr | 2.93e+05 | |
| Ash disposal | kg/hr | 0.737 | |
| Purchase cost | Baghouse bags | USD | 81.1 |
| Boiler | USD | 3.33e+07 | |
| Deaerator | USD | 3.58e+05 | |
| Amine addition pkg | USD | 4.69e+04 | |
| Hot process water softener system | USD | 9.16e+04 | |
| Turbogenerator | USD | 1.94e+07 | |
| Total purchase cost | USD | 5.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個の構成要素から構成されていました。
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}
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]
計算ステップ
- 蒸気ユーティリティの抽出
- 他ユニットのheat_utilitiesから、 蒸気ユーティリティを抽出。_load_utility_agents()
- 蒸気のモル流量を合計。
- 発熱量、発電量、蒸気量、必要冷却量の計算
- 供給されるバイオマス成分、天然ガス等の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()等でも確認可能
- 排気エミッションの計算
- 投入バイオマスが燃焼し、生成する成分を計算。反応式は以下で確認できる。get_combustion_reactions()
BT.combustion_reactionsParallelReaction (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
- 酸素消費量に応じて酸素リッチガスの供給量を調整。
- 補給水量の計算 蒸気生成量に対して排出されるブローダウン水の量を計算し、それを補うための補給水量を逆浸透膜の効率を考慮して算出しています。 \[ 補給水量 [kmol/hr] = 生成蒸気量\textit{(H_content)} \cdot ブローダウン率 \cdot \frac{1}{1 - 逆浸透膜による水の拒否率} \] ブローダウン率:現状は\3%、逆浸透膜による水の拒否率:現状は0になっていました。 また、この式によるとemissionsストリームの計算とは別になっているので、投入バイオマスや天然ガス等の燃焼による水分がこちらに混入することはなさそうです。
- ブローダウンとは? ボイラー缶水で不純物が濃縮するのを防止するために缶水の一部を連続的に外部に排出すること [2]だそうです。
- 逆浸透膜? ボイラーに供給する水にはミネラル分や塩分が含まれていると不具合が生じるため、 逆浸透膜(RO膜)による異物除去処理をするそうです。逆浸透膜(RO膜)に水を高圧で通すことで 不純物が除去されるそうです[3]。
- 排ガスと灰の処理
- emissionsストリームから、灰に該当する成分(ash_IDs に含まれる成分)を抽出
- ボイラー運転に伴って定量的に発生する薬品(boiler chemicals)由来の灰として、 1.9345e-06 * 蒸気流量(Flow Rate)を加算
- 以上の計算で出てきた灰分を
乾いた灰
とし、乾いた灰
の30%かemissionsストリームの内の水分の少ない方を灰に含む水分とします。 これによって灰の含水率を約20〜30%に保つことを模擬します。 - Ash disposalストリームに水分を追加し、 その分をemissionsストリーム の水分より減少させます。
- 石灰による脱硫(FGD)
- SO2が生成された場合、石灰(CaOまたはCa(OH)2)での脱硫反応を適用する想定で、関連する成分を増加させます。
- 石灰の供給量は生成されたSO2の20%とします。
- 石灰がCa(OH)2の場合は石灰分の4倍、CaOの場合は5倍のモル数の水分を追加します。
参考文献
-
[1]
-
[2]
-
[3]
-
[4]
-
[5]


