
質子交換膜燃料電池(PEMFC)的建模和仿真可以作為可再生能源研究與開發的強大工具。開源PEMFC仿真工具(OPEM)是評估質子交換膜燃料電池性能的建模工具。該軟件包是預測PEMFC最佳操作參數的模型(靜態/動態)的組合。 OPEM包含將作為輸入的通用模型,不僅是操作變量的值,例如陽極和陰極饋電氣體,壓力和組成,細胞溫度和電流密度,還包括細胞參數,包括活動面積和膜厚度。此外,在OPEM中提出的一些不同的PEMFC模型,只專注於一個特定的FC堆棧,而另一些PEMFC則考慮了一部分或所有輔助機構,例如改革者。 OPEM是PEMFC模型協作開發的平台。

圖1。 OPEM框圖
| 開放式樞紐 | |
| PYPI計數器 | |
| Github星星 |
| 分支 | 掌握 | 發展 |
| CI | ![]() | ![]() |
| 代碼質量 |
打開CMD (Windows)或Terminal (UNIX)
運行opem或python -m opem (或運行OPEM.exe )
輸入PEM單元參數(或運行標準測試向量)
Amphlett靜態模型
| 輸入 | 描述 | 單元 |
| t | 細胞操作溫度 | k |
| PH2 | 部分壓力 | ATM |
| PO2 | 部分壓力 | ATM |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
| 一個 | 活動區域 | CM^2 |
| l | 膜厚度 | 厘米 |
| Lambda | 可調參數,最小值為14,最大值為23 | - - |
| R(*可選) | R電子 | 歐姆 |
| jmax | 最大電流密度 | A/(CM^2) |
| n | 單細胞的數量 | - - |
Larminie-Dicks靜態模型
| 輸入 | 描述 | 單元 |
| E0 | 燃料電池可逆無損耗電壓 | v |
| 一個 | 塔菲爾線的斜率 | v |
| t | 細胞操作溫度 | k |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
| 在 | 內部電流 | 一個 |
| I_0 | 過電壓開始從零移動的交換電流 | 一個 |
| I_L | 限制電流 | 一個 |
| RM | 膜和接觸電阻 | 歐姆 |
| n | 單細胞的數量 | - - |
Charbleline-Kim靜態模型
| 輸入 | 描述 | 單元 |
| E0 | 開路電壓 | v |
| b | 塔菲爾還原的參數 | v |
| r | 反抗 | ohm.cm^2 |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
| 一個 | 活動區域 | CM^2 |
| m | 擴散的參數 | v |
| n | 擴散的參數 | (a^-1)(cm^2) |
| n | 單細胞的數量 | - - |
帕杜斯動態模型I
| 輸入 | 描述 | 單元 |
| E0 | 沒有負載電壓 | v |
| t | 燃料電池溫度 | k |
| KH2 | 氫閥常數 | kmol.s^(-1).ATM^(-1) |
| KO2 | 氧氣閥常數 | kmol.s^(-1).ATM^(-1) |
| Th2 | 氫時間常數 | s |
| TO2 | 氧時間常數 | s |
| b | 激活電壓常數 | v |
| c | 激活常數參數 | a^(-1) |
| rint | 燃料電池內部電阻 | 歐姆 |
| 羅 | 氫 - 氧氣流量比 | - - |
| QH2 | 氫氣流 | kmol/s |
| N0 | 細胞數量 | - - |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
Paduls Dynamic Model II
| 輸入 | 描述 | 單元 |
| E0 | 沒有負載電壓 | v |
| t | 燃料電池溫度 | k |
| KH2 | 氫閥常數 | kmol.s^(-1).ATM^(-1) |
| KH2O | 水閥常數 | kmol.s^(-1).ATM^(-1) |
| KO2 | 氧氣閥常數 | kmol.s^(-1).ATM^(-1) |
| Th2 | 氫時間常數 | s |
| th2o | 水位時間常數 | s |
| TO2 | 氧時間常數 | s |
| b | 激活電壓常數 | v |
| c | 激活常數參數 | a^(-1) |
| rint | 燃料電池內部電阻 | 歐姆 |
| 羅 | 氫 - 氧氣流量比 | - - |
| QH2 | 氫氣流 | kmol/s |
| N0 | 細胞數量 | - - |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
Paduls-Hauer動態模型
| 輸入 | 描述 | 單元 |
| E0 | 沒有負載電壓 | v |
| t | 燃料電池溫度 | k |
| KH2 | 氫閥常數 | kmol.s^(-1).ATM^(-1) |
| KH2O | 水閥常數 | kmol.s^(-1).ATM^(-1) |
| KO2 | 氧氣閥常數 | kmol.s^(-1).ATM^(-1) |
| Th2 | 氫時間常數 | s |
| th2o | 水位時間常數 | s |
| TO2 | 氧時間常數 | s |
| T1 | 改革器時間不變 | s |
| T2 | 改革器時間不變 | s |
| b | 激活電壓常數 | v |
| c | 激活常數參數 | a^(-1) |
| 簡歷 | 轉換因子 | - - |
| rint | 燃料電池內部電阻 | 歐姆 |
| 羅 | 氫 - 氧氣流量比 | - - |
| Qmethanol | 甲醇的摩爾流動 | kmol/s |
| N0 | 細胞數量 | - - |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
PADULLES-AMPHLETT動態模型
| 輸入 | 描述 | 單元 |
| E0 | 沒有負載電壓 | v |
| t | 燃料電池溫度 | k |
| KH2 | 氫閥常數 | kmol.s^(-1).ATM^(-1) |
| KH2O | 水閥常數 | kmol.s^(-1).ATM^(-1) |
| KO2 | 氧氣閥常數 | kmol.s^(-1).ATM^(-1) |
| Th2 | 氫時間常數 | s |
| th2o | 水位時間常數 | s |
| TO2 | 氧時間常數 | s |
| T1 | 改革器時間不變 | s |
| T2 | 改革器時間不變 | s |
| 一個 | 活動區域 | CM^2 |
| l | 膜厚度 | 厘米 |
| Lambda | 可調參數,最小值為14,最大值為23 | - - |
| R(*可選) | R電子 | 歐姆 |
| jmax | 最大電流密度 | A/(CM^2) |
| 簡歷 | 轉換因子 | - - |
| 羅 | 氫 - 氧氣流量比 | - - |
| Qmethanol | 甲醇的摩爾流動 | kmol/s |
| N0 | 細胞數量 | - - |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
Chakraborty動態模型
| 輸入 | 描述 | 單元 |
| E0 | 沒有負載電壓 | v |
| t | 細胞操作溫度 | k |
| KH2 | 氫閥常數 | kmol.s^(-1).ATM^(-1) |
| KH2O | 水閥常數 | kmol.s^(-1).ATM^(-1) |
| KO2 | 氧氣閥常數 | kmol.s^(-1).ATM^(-1) |
| 羅 | 氫 - 氧氣流量比 | - - |
| rint | 燃料電池內部電阻 | 歐姆 |
| N0 | 細胞數量 | - - |
| 你 | 燃料利用率 | - - |
| 我開始 | 細胞操作當前起點 | 一個 |
| 我步 | 單元操作電流步驟 | 一個 |
| 我停留 | 電池操作電流終點 | 一個 |
Model_Name文件夾中查找您的報告屏幕記錄
Amphlett靜態模型
>>> from opem.Static.Amphlett import Static_Analysis
>>> Test_Vector = { " T " : 343.15 , " PH2 " : 1 , " PO2 " : 1 , " i-start " : 0 , " i-stop " : 75 , " i-step " : 0.1 , " A " : 50.6 , " l " : 0.0178 , " lambda " : 23 , " N " : 1 , " R " : 0 , " JMax " : 1.5 , " Name " : " Amphlett_Test " }
>>> data = Static_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| eta_active | ETA激活 | 列表 |
| eta_conc | ETA濃度 | 列表 |
| eta_ohmic | Eta Ohmic | 列表 |
| VE | 估計的FC電壓 | 列表 |
Larminie-Dicks靜態模型
>>> from opem.Static.Larminie_Dicks import Static_Analysis
>>> Test_Vector = { " A " : 0.06 , " E0 " : 1.178 , " T " : 328.15 , " RM " : 0.0018 , " i_0 " : 0.00654 , " i_L " : 100.0 , " i_n " : 0.23 , " N " : 23 , " i-start " : 0.1 , " i-stop " : 98 , " i-step " : 0.1 , " Name " : " Larminiee_Test " }
>>> data = Static_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
Charbleline-Kim靜態模型
>>> from opem.Static.Chamberline_Kim import Static_Analysis
>>> Test_Vector = { " A " : 50.0 , " E0 " : 0.982 , " b " : 0.0689 , " R " : 0.328 , " m " : 0.000125 , " n " : 9.45 , " N " : 1 , " i-start " : 1 , " i-stop " : 42.5 , " i-step " : 0.1 , " Name " : " Chamberline_Test " }
>>> data = Static_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
帕杜斯動態模型I
>>> from opem.Dynamic.Padulles1 import Dynamic_Analysis
>>> Test_Vector = { " T " : 343 , " E0 " : 0.6 , " N0 " : 88 , " KO2 " : 0.0000211 , " KH2 " : 0.0000422 , " tH2 " : 3.37 , " tO2 " : 6.74 , " B " : 0.04777 , " C " : 0.0136 , " Rint " : 0.00303 , " rho " : 1.168 , " qH2 " : 0.0004 , " i-start " : 0 , " i-stop " : 100 , " i-step " : 0.1 , " Name " : " PadullesI_Test " }
>>> data = Dynamic_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| PO2 | 部分壓力 | 列表 |
| PH2 | 部分壓力 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
Paduls Dynamic Model II
>>> from opem.Dynamic.Padulles2 import Dynamic_Analysis
>>> Test_Vector = { " T " : 343 , " E0 " : 0.6 , " N0 " : 5 , " KO2 " : 0.0000211 , " KH2 " : 0.0000422 , " KH2O " : 0.000007716 , " tH2 " : 3.37 , " tO2 " : 6.74 , " tH2O " : 18.418 , " B " : 0.04777 , " C " : 0.0136 , " Rint " : 0.00303 , " rho " : 1.168 , " qH2 " : 0.0004 , " i-start " : 0.1 , " i-stop " : 100 , " i-step " : 0.1 , " Name " : " Padulles2_Test " }
>>> data = Dynamic_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| PO2 | 部分壓力 | 列表 |
| PH2 | 部分壓力 | 列表 |
| PH2O | 部分壓力 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
Paduls-Hauer動態模型
>>> from opem.Dynamic.Padulles_Hauer import Dynamic_Analysis
>>> Test_Vector = { " T " : 343 , " E0 " : 0.6 , " N0 " : 5 , " KO2 " : 0.0000211 , " KH2 " : 0.0000422 , " KH2O " : 0.000007716 , " tH2 " : 3.37 , " tO2 " : 6.74 , " t1 " : 2 , " t2 " : 2 , " tH2O " : 18.418 , " B " : 0.04777 , " C " : 0.0136 , " Rint " : 0.00303 , " rho " : 1.168 , " qMethanol " : 0.0002 , " CV " : 2 , " i-start " : 0.1 , " i-stop " : 100 , " i-step " : 0.1 , " Name " : " Padulles_Hauer_Test " }
>>> data = Dynamic_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| PO2 | 部分壓力 | 列表 |
| PH2 | 部分壓力 | 列表 |
| PH2O | 部分壓力 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
PADULLES-AMPHLETT動態模型
>>> from opem.Dynamic.Padulles_Amphlett import Dynamic_Analysis
>>> Test_Vector = { " A " : 50.6 , " l " : 0.0178 , " lambda " : 23 , " JMax " : 1.5 , " T " : 343 , " N0 " : 5 , " KO2 " : 0.0000211 , " KH2 " : 0.0000422 , " KH2O " : 0.000007716 , " tH2 " : 3.37 , " tO2 " : 6.74 , " t1 " : 2 , " t2 " : 2 , " tH2O " : 18.418 , " rho " : 1.168 , " qMethanol " : 0.0002 , " CV " : 2 , " i-start " : 0.1 , " i-stop " : 75 , " i-step " : 0.1 , " Name " : " Padulles_Amphlett_Test " }
>>> data = Dynamic_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| PO2 | 部分壓力 | 列表 |
| PH2 | 部分壓力 | 列表 |
| PH2O | 部分壓力 | 列表 |
| ph | 熱力 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| eta_active | ETA激活 | 列表 |
| eta_conc | ETA濃度 | 列表 |
| eta_ohmic | Eta Ohmic | 列表 |
| VE | 估計的FC電壓 | 列表 |
Chakraborty動態模型
>>> from opem.Dynamic.Chakraborty import Dynamic_Analysis
>>> Test_Vector = { " T " : 1273 , " E0 " : 0.6 , " u " : 0.8 , " N0 " : 1 , " R " : 3.28125 * 10 ** ( - 3 ), " KH2O " : 0.000281 , " KH2 " : 0.000843 , " KO2 " : 0.00252 , " rho " : 1.145 , " i-start " : 0.1 , " i-stop " : 300 , " i-step " : 0.1 , " Name " : " Chakraborty_Test " }
>>> data = Dynamic_Analysis( InputMethod = Test_Vector, TestMode = True , PrintMode = False , ReportMode = False )| 鑰匙 | 描述 | 類型 |
| 地位 | 模擬狀態 | 布爾 |
| p | 力量 | 列表 |
| 我 | 電池操作電流 | 列表 |
| v | FC電壓 | 列表 |
| eff | 效率 | 列表 |
| PO2 | 部分壓力 | 列表 |
| PH2 | 部分壓力 | 列表 |
| PH2O | 部分壓力 | 列表 |
| ph | 熱力 | 列表 |
| 內特的收益 | 內特的收益 | 列表 |
| 歐姆損失 | 歐姆損失 | 列表 |
| v0 | 線性APX截距 | 漂浮 |
| k | 線性apx斜率 | 漂浮 |
| VE | 估計的FC電壓 | 列表 |
TestMode :活動測試模式並獲取/返回數據如dict (默認: False )ReportMode :生成報告( .csv , .opem , .html )並打印在控制台中(默認: True )PrintMode :控制台中的控制打印,(默認: True )Folder :報告文件夾,(默認: os.getcwd() ) dict/start命令到opem botOPEM可以通過粘合劑服務在交互式jupyter筆記本中在線使用!現在嘗試一下! :
Documents夾中檢查.ipynb文件Full Run部分中編輯Test_Vector 只需填寫一個問題並描述它。我們將盡快檢查一下!或發送電子郵件至[email protected]。
您也可以加入我們的Discord服務器
1- JC Amphlett,RM Baumert,RF Mann,Ba Peppley和Pr Roberge。 1995年。 “巴拉德標記IV固體聚合物電解質燃料電池的性能建模”。 J. Electrochem。 Soc。 (電化學協會,公司)142(1):9-15。 doi:10.1149/1.2043959。
2- Jeferson M. Correa,Felix A. Farret,Vladimir A. Popov,Marcelo G. Simoes。 2005。 “對模擬質子交換膜燃料電池的建模參數的靈敏度分析。” IEEE能源轉換(IEEE)20(1):211-218的IEEE交易。 doi:10.1109/tec.2004.842382。
3- Junbom Kim,Seong Lee,Supramaniam Srinivasan,Charles E. Chamberlin。 1995年。 “具有經驗方程的質子交換膜燃料電池性能的建模”。電化學學會雜誌(電化學學會)142(8):2670-2674。 doi:10.1149/1.2050072。
4- I. Sadli,P。 Thounthong,J.-P。馬丁,S。 Rael,B。 Davat。 2006。 “ PEMFC提供低壓靜態轉換器的行為”。電源雜誌(Elsevier)156:119–125。 doi:10.1016/j.jpowsour.2005.08.021。
5- J. Paduls,GW Ault,Jr McDonald。 2000。 “用於電源系統模擬的集成SOFC植物動力學模型”。電源雜誌(Elsevier)86(1-2):495-500。 doi:10.1016/s0378-7753(99)00430-9。
6-豪爾,K.-H。 2001年。 “用於燃料電池汽車硬件和軟件(控件)的分析工具,並應用了替代系統設計的燃料經濟性比較。”博士加利福尼亞大學戴維斯分校的論文,交通技術與政策。
7- A. Saadi,M。 Bechherif,A。 Aboubou,我的Ayad。 2013。 “質子交換膜燃料電池靜態模型的比較”。可再生能源(Elsevier)56:64-71。 doi:dx.doi.org/10.1016/j.renene.2012.10.012。
8-Diego Feroldi,Marta Basualdo。 2012。 “ PEM燃料電池系統的描述”。綠色能源與技術(Springer)49-72。 doi:10.1007/978-1-84996-184-4_2
9- Gottesfeld,Shimshon。 ND聚合物電解質燃料電池:氫燃料電源中的材料問題。 http://physics.oregonstate.edu/~hetheriw/ energy/topics/doc/doc/electrochemistry/fc/basic/the_polymer_electrolyte_fuel_cell.htm
10-穆罕默德·貝克里夫(Mohamed Becherif),艾薩·薩迪(AïchaSaadi),丹尼爾·赫斯塞爾(Daniel Hissel),阿巴納克·阿布布(Abdennacer Aboubou),穆罕默德·亞辛·艾亞德(Mohamed Yacine Ayad)。 2011。 “靜態和動態質子交換膜燃料電池模型”。烴礦與環境研究雜誌2(1)
11- Larminie,J.,Dicks,A。 ,&McDonald,MS 2003。解釋的燃料電池系統(第2卷,第207-225頁)。英國奇切斯特:J。 Wiley。 doi:10.1002/9781118706992。
12- Rho,YW,Srinivasan,S。 ,&Kho,YT 1994。 ''使用O 2/HE,O 2/AR和O 2/N 2混合物II的質子交換膜燃料電池中的質量傳輸現象。理論分析。 ''電化學學會雜誌,141(8),2089-2096。 doi:10.1149/1.2055066。
13- U. Chakraborty,一種新的模型,用於恆定燃料利用和燃料電池中恆定的燃料流量。科學。 9(2019)1066。 https://doi.org/10.3390/App9061066。
如果您在研究中使用OPEM,請引用本文:
@Article {Haghighi2018,
doi = {10.21105/joss.00676},
url = {https://doi.org/10.21105/joss.00676},
年= {2018},
月= {jul},
Publisher = {the Open Journal},
音量= {3},
數字= {27},
頁= {676},
作者= {Sepand Haghighi和Kasra Askari和Sarmin Hamidi和Mohammad Mahdi Rahimi},
title = {{opem}:開源{pem}單元模擬工具},
日記= {開源軟件期刊}
}
下載opem.bib(bibtex格式)
| 喬斯 | |
| Zenodo |
如果這個項目對您有所幫助,請給!
如果您喜歡我們的項目,我們希望您能做到,請您支持我們嗎?我們的項目不是,也永遠不會為盈利而努力。我們需要這筆錢,以便我們可以繼續做自己的工作;-)。