diff --git a/docs/끓는점-계산방법-FROM-MSDS.md b/docs/끓는점-계산방법-FROM-MSDS.md new file mode 100644 index 0000000..a65a962 --- /dev/null +++ b/docs/끓는점-계산방법-FROM-MSDS.md @@ -0,0 +1,136 @@ +# 진공압력에 따른 끓는점 계산 (FROM MSDS) + +> 목적: MSDS의 상압 비점·증기압 정보로부터 **임의의 진공압력에서의 끓는점**을 계산하는 방법 정리. +> 배경: 본 공정은 감압 증류 → 단별 온도(reb-A>T_B>T_C>T_D)가 **진공압력에 종속**. 따라서 제품·진공이 정해지면 끓는점이 결정됨. +> 참조: [`docs/MSDS_PMA_PGMEA_EL.md`](MSDS_PMA_PGMEA_EL.md) + +--- + +## 1. 끓는점의 정의 + +끓는점 = **포화증기압(P_sat)이 외부(계) 압력과 같아지는 온도**. + +- 상압(760 mmHg)에서 끓는 온도 = 상압 비점 (PMA 146℃, EL 154℃). +- 진공(예: 113 mmHg)에서는 더 낮은 온도에서 P_sat가 그 압력에 도달 → **끓는점이 낮아짐**. + +즉 "진공압력 P가 주어졌을 때의 끓는점" = **P_sat(T) = P 를 만족하는 T**. +그래서 온도↔증기압 관계식만 있으면 역산으로 끓는점이 나온다. 그 관계식이 **Antoine 식**. + +--- + +## 2. Antoine 식과 상수 A, B, C + +### 2.1 식 + +$$\log_{10} P = A - \frac{B}{C + T}$$ + +- **P** : 포화증기압 +- **T** : 온도 +- **A, B, C** : 물질별 경험상수 (Antoine 상수) + +끓는점을 구하려면 P에 목표 압력(진공값)을 넣고 T에 대해 푼다: + +$$T_b = \frac{B}{A - \log_{10} P} - C$$ + +### 2.2 각 상수의 의미 + +| 상수 | 물리적 의미 | 영향 | +|---|---|---| +| **A** | 증기압 곡선의 절편(스케일). 대략 고온 극한에서의 log P 수준 | A↑ → 전체 증기압↑ → 같은 압력에서 끓는점↓ | +| **B** | 곡선의 기울기. **증발잠열(ΔH_vap)에 비례** (B ≈ ΔH_vap / (2.303·R) 근사) | B↑ → 온도에 따른 증기압 변화 급함(잠열 큰 물질) | +| **C** | 온도축 보정항(offset). 저온에서 식이 발산하지 않도록 곡선을 이동 | 정확도 핵심. 0으로 두면 단순 Clausius–Clapeyron으로 퇴화 | + +### 2.3 ⚠ 반드시 주의할 점 — 단위·로그·온도기준 + +Antoine 상수는 **출처마다 단위계가 다르다.** 그대로 쓰면 안 되고 세트로 확인: + +1. **압력 단위** : mmHg(Torr) / kPa / bar — 출처마다 다름. +2. **온도 단위** : ℃ 기준 상수 vs K 기준 상수. (NIST는 보통 K + bar, 화학공학 핸드북은 ℃ + mmHg) +3. **로그 밑** : `log10` (대부분) vs `ln` (일부 DIPPR 형식은 5상수 확장식). +4. **유효 온도범위** : Antoine 상수는 **특정 온도구간에서만 fitting**된 값. 구간 밖 외삽은 오차 큼 → 저압(저온)일수록 다른 상수세트가 필요할 수 있음. + +> 출처: NIST WebBook, DIPPR, Yaws' Handbook, Perry's Chemical Engineers' Handbook 등. + +--- + +## 3. MSDS만으로 가능한가? + +| 가진 정보 | 가능한 계산 | 정확도 | +|---|---|---| +| **Antoine 상수(A,B,C)** | $T_b = B/(A-\log_{10}P) - C$ 로 직접 역산 | ★★★ 최선 | +| 상압비점 + 증기압 1점(예: 3.7 mmHg@20℃) | 2점(상압비점=760mmHg, 그 1점)으로 **Clausius–Clapeyron 2-점 근사** | ★★ 근사 | +| 상압비점만 | ΔH_vap 가정 필요 → Clausius–Clapeyron | ★ 거침 | + +MSDS에는 보통 **상압비점 + 증기압 1점**만 있어 **2-점 Clausius–Clapeyron**까지는 즉시 가능하고, **정밀하려면 Antoine 상수(외부 DB)** 가 필요하다. + +### 3.1 Clausius–Clapeyron 2-점 근사 (MSDS만으로) + +$$\ln\frac{P_2}{P_1} = -\frac{\Delta H_{vap}}{R}\left(\frac{1}{T_2}-\frac{1}{T_1}\right)\quad(T\text{는 K})$$ + +- 점1 = 증기압 1점 (예: PMA `P_1=3.7\,\text{mmHg}, T_1=20℃=293.15K`) +- 점2 = 상압비점 (`P_2=760\,\text{mmHg}, T_2=146℃=419.15K`) +- 두 점으로 ΔH_vap를 역산 → 이후 목표압력 P에서 T_b 계산. + +--- + +## 4. 본 프로젝트 물질 (MSDS 발췌) + +| 물질 | CAS | 상압비점 | 증기압(1점) | +|---|---|---|---| +| PMA / PGMEA | 108-65-6 | 146 ℃ | 3.7 mmHg @ 20℃ | +| EL (Ethyl Lactate) | 97-64-3 | 154 ℃ | 1.5 mmHg @ 20℃ | + +> PMA·PGMEA는 동일물질(동일 증기압 곡선). EL은 별도. +> **본 문서의 Antoine 상수는 MSDS에 없으므로, 정밀계산 시 NIST/DIPPR에서 물질별 (A,B,C,단위,유효범위)를 확보해 채워야 한다.** (아래 표는 자리표시자) + +| 물질 | A | B | C | 압력단위 | 온도단위 | 유효범위 | 출처 | +|---|---|---|---|---|---|---|---| +| PMA/PGMEA | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | +| EL | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | _TBD_ | + +--- + +## 5. 계산 예시 코드 (Python, 참고) + +```python +import math + +# --- Antoine 역산: 목표 압력에서의 끓는점 --- +# 주의: A,B,C는 (압력단위, 온도단위) 세트가 일치해야 함. 아래는 mmHg + ℃ 가정. +def boiling_point_antoine(P_mmHg, A, B, C): + """log10(P) = A - B/(C+T) → T = B/(A - log10 P) - C""" + return B / (A - math.log10(P_mmHg)) - C + +# --- MSDS만으로: Clausius–Clapeyron 2-점 근사 --- +R = 8.314 # J/mol/K +def dHvap_from_two_points(P1, T1_C, P2, T2_C): + T1, T2 = T1_C + 273.15, T2_C + 273.15 + return -R * math.log(P2 / P1) / (1/T2 - 1/T1) # J/mol + +def boiling_point_CC(P_target, P_ref, Tb_ref_C, dHvap): + """P_ref(상압비점 압력)·Tb_ref에서 dHvap로 P_target에서의 Tb 역산""" + Tb_ref = Tb_ref_C + 273.15 + inv_T = 1/Tb_ref - (R/dHvap) * math.log(P_target / P_ref) + return 1/inv_T - 273.15 # ℃ + +# 예) PMA: 상압비점 146℃@760mmHg, 증기압 3.7mmHg@20℃ → 113mmHg에서 끓는점? +dH = dHvap_from_two_points(3.7, 20, 760, 146) +print(round(boiling_point_CC(113, 760, 146, dH), 1), "℃ @113mmHg (PMA, CC근사)") +``` + +> Clausius–Clapeyron 2-점 근사는 ΔH_vap를 온도무관 상수로 보므로 넓은 압력범위에서 오차가 커진다. +> 운전구간(예: 113 mmHg 부근) 한정이면 충분히 쓸 만하나, 정밀도가 필요하면 §2의 Antoine 식 사용. + +--- + +## 6. 본 시스템에서의 활용 (연결점) + +- 온도프로파일 기준밴드(`{col}_tempref.json`)는 **데이터에서 산출**한 실측 median/σ다. +- 본 계산식은 그 기준밴드와 **교차검증/물리적 해석**에 쓸 수 있다: + - "현재 진공 113 mmHg에서 PMA 끓는점 이론값 ≈ X℃" ↔ 실측 reb-A median 비교. + - 제품 식별 보조: 진공압력 보정한 이론 끓는점으로 어느 제품인지 가늠. +- 단, 단탑 온도는 끓는점 외에 조성·환류비 영향도 받으므로 **이론 끓는점은 참고선**, 운전 기준은 실측 밴드 우선. + +--- + +*상압비점·증기압은 MSDS 발췌. Antoine 상수는 외부 물성 DB(NIST/DIPPR) 확보 필요 — §4 표 채우기 전까지는 §3.1 Clausius–Clapeyron 근사를 사용.*