- หน้าแรก
- คลังความรู้
- ออกแบบระบบโซลาร์เซลล์
- พยากรณ์ · เฝ้าติดตาม
// บทที่ 16.11 · ออกแบบระบบโซลาร์เซลล์ · PV Forecasting & Monitoring
พยากรณ์กำลังผลิตโซลาร์ล่วงหน้าและการเฝ้าติดตาม: clear-sky พยากรณ์อากาศ ML และตรวจจับความผิดปกติ
การคาดการณ์รายปี (หน้าก่อน) ตอบว่าควรลงทุนไหม แต่เมื่อระบบเดินแล้ว คำถามเปลี่ยนเป็น “พรุ่งนี้บ่ายจะผลิตได้เท่าไร” เพื่อวางแผนชาร์จแบต ตั้งเวลาโหลด ซื้อขายไฟ หรือให้ศูนย์ควบคุมของการไฟฟ้าเตรียมโรงไฟฟ้าสำรอง และ “วันนี้ผลิตน้อยเพราะเมฆหรือเพราะระบบเสีย” หน้านี้ครอบคลุมทั้งการพยากรณ์ล่วงหน้าและการเฝ้าติดตามที่ใช้ตอบสองคำถามนี้
- แยกส่วนแน่นอน (ดวงอาทิตย์ → clear-sky) ออกจากส่วนไม่แน่นอน (เมฆ → clear-sky index)
- นาที: กล้องท้องฟ้า · ชั่วโมง: ดาวเทียม · วันถึงหลายวัน: แบบจำลองอากาศ NWP + ML
- รายงานความแม่นเป็น skill score เทียบ persistence เสมอ
- เฝ้าติดตามด้วย “พลังงานที่ควรได้” จากแสงจริง แล้วเทียบสตริงกันเอง
ใครต้องการพยากรณ์ และต้องการล่วงหน้าแค่ไหน พื้นฐาน
| ผู้ใช้ | ใช้ทำอะไร | ระยะล่วงหน้า |
|---|---|---|
| บ้าน/อาคารที่มีแบตเตอรี่ | ตัดสินใจว่าคืนนี้ควรชาร์จแบตจากกริดราคาถูก (TOU off-peak) หรือรอแดดพรุ่งนี้ | 12–36 ชั่วโมง |
| โรงงาน | ตั้งเวลาโหลดยืดหยุ่น (ห้องเย็น ปั๊ม ชาร์จรถยก) ลด peak demand | ชั่วโมง–1 วัน |
| โซลาร์ฟาร์ม/ผู้รวมไฟ (VPP) | แจ้งกำลังผลิตล่วงหน้าตามสัญญาหรือข้อกำหนดของผู้ควบคุมระบบ | วันถัดไป และปรับระหว่างวัน |
| ศูนย์ควบคุมระบบไฟฟ้า | เตรียมกำลังสำรอง (reserve) และ ramp ของโรงไฟฟ้าอื่น | นาที–หลายวัน |
| ระบบ hybrid ที่ microgrid/เกาะ | จัดการเครื่องปั่นไฟและแบต ลดน้ำมัน | นาที–ชั่วโมง |
ระยะพยากรณ์และวิธีที่เหมาะ กลาง
| ระยะ | วิธี | ข้อมูลที่ใช้ |
|---|---|---|
| วินาที–30 นาที (nowcasting) | กล้องถ่ายท้องฟ้า (all-sky imager) ติดตามการเคลื่อนของเมฆ · ข้อมูลกำลังผลิตล่าสุด | ภาพท้องฟ้า, SCADA |
| 30 นาที–6 ชั่วโมง | Cloud motion vector จากภาพดาวเทียม (Himawari สำหรับเอเชีย ทุก 10 นาที) | ดาวเทียม |
| 6 ชั่วโมง–7 วัน | แบบจำลองอากาศเชิงตัวเลข (NWP) เช่น ECMWF IFS, NOAA GFS, WRF ระดับภูมิภาค + การแก้ค่าเชิงสถิติ/ML | NWP, ข้อมูลย้อนหลังของโรงไฟฟ้า |
| เดือน–ฤดู | ค่าเฉลี่ยระยะยาว + ดัชนีภูมิอากาศ (ENSO) | ภูมิอากาศวิทยา |
ในประเทศไทย ความยากอยู่ที่เมฆก่อตัวเร็ว (convective clouds) ช่วงบ่ายในฤดูฝน และหมอกควันในภาคเหนือช่วงต้นปี ส่วนฤดูแล้งท้องฟ้าค่อนข้างคงที่ พยากรณ์แม่นกว่า
แยกส่วนแน่นอนออกด้วย clear-sky กลาง
A1 Clear-sky index ดัชนีท้องฟ้าแจ่มใส
A2 Haurwitz clear-sky model แบบจำลองท้องฟ้าแจ่มใสอย่างง่าย
แบบจำลองนี้ใช้เพียงมุมเซนิท (R4) แบบจำลองที่แม่นกว่า (Ineichen–Perez, REST2, McClear) ใช้ความขุ่นของบรรยากาศ (Linke turbidity, aerosol, ไอน้ำ) ซึ่งสำคัญในไทยเพราะหมอกควันและความชื้นสูง
แสงฟ้าใสตอนเที่ยงที่กรุงเทพฯ วันที่ 21 มีนาคม
มุมเงย 75.8° (ตัวอย่าง R-2) → ,
ถ้าวัดได้ 650 W/m² → มีเมฆบางส่วน · ถ้าพรุ่งนี้พยากรณ์ ที่เวลาเดียวกัน → W/m²
A3 (Smart) persistence baseline การพยากรณ์อ้างอิงแบบคงสภาพ
Persistence คือ “พรุ่งนี้เหมือนวันนี้” หรือ “อีก 15 นาทีเหมือนตอนนี้” เป็นคู่แข่งที่เอาชนะยากในระยะสั้นมาก ทุกวิธีพยากรณ์ต้องเทียบกับมันก่อน
Machine learning และการพยากรณ์เชิงความน่าจะเป็น ขั้นสูง
แนวทางที่ใช้ได้ผลในทางปฏิบัติคือ ให้ NWP บอกสภาพอากาศ แล้วให้ ML แปลงเป็นกำลังของโรงไฟฟ้านั้น (model output statistics) เพราะ ML เรียนรู้ความลำเอียงของ NWP ในพื้นที่ และพฤติกรรมเฉพาะของระบบ (เงา clipping ฝุ่น) จากข้อมูลย้อนหลัง
- คุณลักษณะ (features): GHI/k* จาก NWP หลายจุดรอบโรงไฟฟ้า เมฆต่ำ/กลาง/สูง อุณหภูมิ ความชื้น ลม มุมดวงอาทิตย์ ชั่วโมง วันในปี กำลังผลิตล่าสุด (สำหรับระยะสั้น)
- แบบจำลอง: gradient boosting (XGBoost/LightGBM) ทำงานดีกับข้อมูลตาราง · LSTM/Temporal CNN/Transformer สำหรับลำดับเวลา · CNN กับภาพดาวเทียม
- เชิงความน่าจะเป็น: พยากรณ์ quantile (P10, P50, P90) ด้วย quantile regression หรือ ensemble ของ NWP ให้ผู้ใช้ตัดสินใจด้วยความเสี่ยง เช่น สำรองแบตไว้เผื่อกรณี P10
- ข้อควรระวัง: แบ่งข้อมูล train/test ตามเวลา (ห้ามสุ่มปน) ตรวจข้อมูลช่วงไฟดับ/ตัด export ที่ไม่ใช่สภาพอากาศ และ retrain เมื่อระบบเปลี่ยน
# พยากรณ์ day-ahead แบบย่อ: NWP + gradient boosting (scikit-learn)
import pandas as pd
from sklearn.ensemble import GradientBoostingRegressor
df = pd.read_csv("plant_hourly.csv", parse_dates=["time"]) # กำลังจริง + NWP ของวันก่อนหน้า
df = df[df.sun_elev > 0] # เฉพาะกลางวัน
X = df[["nwp_ghi", "nwp_cloud_low", "nwp_cloud_mid", "nwp_temp", "sun_elev", "hour", "doy"]]
y = df["p_ac_kw"]
cut = df.time < "2026-01-01" # แบ่งตามเวลา ไม่สุ่ม
model = GradientBoostingRegressor(n_estimators=400, max_depth=4, learning_rate=0.05)
model.fit(X[cut], y[cut])
pred = model.predict(X[~cut]).clip(0, df.p_ac_max.iloc[0]) # ไม่ติดลบ ไม่เกินพิกัด
nmae = (abs(pred - y[~cut])).mean() / df.p_ac_max.iloc[0]
วัดความแม่นของการพยากรณ์ กลาง
A4 Error metrics ตัวชี้วัดความคลาดเคลื่อน
A5 Forecast skill score คะแนนทักษะเทียบ persistence
พยากรณ์พลังงานรายวัน 5 วัน (MWh)
| วัน | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| จริง | 3.2 | 4.1 | 4.6 | 3.9 | 2.1 |
| พยากรณ์ | 3.0 | 4.4 | 4.3 | 3.5 | 2.9 |
| Persistence (เท่าเมื่อวาน) | 3.5 | 3.2 | 4.1 | 4.6 | 3.9 |
ความคลาดเคลื่อนของพยากรณ์: −0.2, +0.3, −0.3, −0.4, +0.8 → MAE = 2.0/5 = 0.40 MWh
MWh
MWh
A5: — ดีกว่า persistence 54 % · วันที่ 5 พลาดมากสุด (พายุฝนที่พยากรณ์ไม่ทัน) RMSE ลงโทษความผิดพลาดใหญ่มากกว่า MAE
ระบบเฝ้าติดตามและ KPI พื้นฐาน
- ข้อมูล: อินเวอร์เตอร์ส่งค่าผ่าน Modbus RTU/TCP (โปรไฟล์ SunSpec) หรือคลาวด์ของผู้ผลิต: กำลัง AC/DC แรงดันและกระแสแต่ละ MPPT/สตริง อุณหภูมิ รหัสความผิดพร่อง · มิเตอร์ที่จุดต่อ · เซนเซอร์แสงบนระนาบแผง (เซลล์อ้างอิงหรือไพราโนมิเตอร์) และอุณหภูมิแผงสำหรับระบบเชิงพาณิชย์
- KPI ตาม IEC 61724-1: พลังงาน, , PR (และ PR ปรับอุณหภูมิ), availability, ความผิดพร่องและเวลาซ่อม
- ระบบบ้าน: แอปของผู้ผลิตอินเวอร์เตอร์เพียงพอ ตั้งการแจ้งเตือนเมื่อพลังงานรายวันต่ำกว่าค่าคาดหมายหรือมี error
- ระบบใหญ่: SCADA/แพลตฟอร์ม monitoring ที่รวมหลายยี่ห้อ ตรวจรายสตริงด้วยตัวเลขเชิงสถิติ และส่งงานให้ทีม O&M
A6 Expected power and performance index กำลังที่ควรได้และดัชนีสมรรถนะ
A7 String deviation from the median ค่าเบี่ยงเบนของสตริงจากค่ามัธยฐาน
ระบบ 5.8 kWp ผลิตน้อยหรือแค่มีเมฆ
เวลา 11:00 น. เซนเซอร์วัด = 820 W/m² อุณหภูมิแผง 55 °C อินเวอร์เตอร์จ่าย 3.2 kW (สาย ฝุ่น อินเวอร์เตอร์) ≈ 0.92
kW
— ต่ำกว่าปกติ 20 % ทั้งที่แสงดี ไม่ใช่เพราะเมฆ
ดูข้อมูลราย MPPT: MPPT1 7.6 A, MPPT2 4.9 A ขณะที่ทั้งสองทิศเดียวกัน → (เทียบ MPPT1)
แรงดัน MPPT2 ต่ำกว่าปกติราว 1/3 ของแผงหนึ่งแผง → สงสัยบายพาสไดโอดลัดหรือเงาใหม่ ส่งช่างตรวจด้วยกล้องความร้อนและวัด รายแผง (ดู ตารางอาการเสีย)
การตรวจจับความผิดปกติที่ใช้ได้จริง
- เทียบกันเอง: สตริงเทียบสตริง อินเวอร์เตอร์เทียบอินเวอร์เตอร์ในทิศเดียวกัน — ไม่ต้องมีเซนเซอร์แสงก็ใช้ได้
- เทียบกับที่ควรได้: PI จากแสงและอุณหภูมิจริง หรือจากข้อมูลดาวเทียมเมื่อไม่มีเซนเซอร์
- รูปร่างกราฟรายวัน: ยอดแบน = clipping หรือจำกัดกำลัง · ตกเป็นศูนย์กลางวัน = trip (แรงดันกริดเกิน ฉนวนต่ำ) · ไม่สมมาตรเช้า-บ่าย = เงาข้างเดียว
- แนวโน้มระยะยาว: soiling ratio ระหว่างรอบล้าง และอัตราการเสื่อมรายปีด้วยวิธี year-on-year (เช่น ไลบรารี RdTools ของ NREL)
- ML: isolation forest / autoencoder กับข้อมูลหลายตัวแปร สำหรับระบบใหญ่ที่มีข้อมูลมาก (และต้องมีวิศวกรตรวจสอบผล)
ประเด็นระดับปริญญาโท ขั้นสูง
- Spatio-temporal forecasting ใช้ข้อมูลโรงไฟฟ้าข้างเคียงเป็นเซนเซอร์เมฆที่ลอยมา (graph neural networks)
- Regional/aggregate forecasting ของ PV บนหลังคาที่ไม่มีมิเตอร์แยก (behind-the-meter) สำหรับผู้ควบคุมระบบ — upscaling จากระบบตัวอย่าง
- Probabilistic evaluation: CRPS, pinball loss, reliability diagram
- Forecast-driven control: MPC สำหรับแบตเตอรี่และโหลดยืดหยุ่น การเสนอราคาในตลาดไฟฟ้าภายใต้ความไม่แน่นอน
- Physics-informed ML และ digital twin ของโรงไฟฟ้าสำหรับ O&M เชิงพยากรณ์
คำถามที่พบบ่อย
พยากรณ์กำลังผลิตโซลาร์ล่วงหน้าทำได้แม่นแค่ไหน?
ขึ้นกับระยะเวลาล่วงหน้าและสภาพอากาศ พยากรณ์ล่วงหน้า 1 วันสำหรับโรงไฟฟ้าเดี่ยวมักมีความคลาดเคลื่อนเฉลี่ยสัมบูรณ์ประมาณ 5–10 % ของกำลังติดตั้งในเวลากลางวัน ฤดูฝนที่เมฆเปลี่ยนเร็วคลาดเคลื่อนมากกว่าฤดูแล้ง การรวมหลายโรงไฟฟ้าในพื้นที่กว้างช่วยลดความคลาดเคลื่อนลงมาก
Clear-sky index คืออะไร?
คืออัตราส่วนระหว่างแสงที่วัดหรือพยากรณ์ได้กับแสงที่จะได้ถ้าท้องฟ้าแจ่มใสในเวลาเดียวกัน ค่า 1 คือฟ้าใส ค่าต่ำคือมีเมฆ การพยากรณ์ค่า clear-sky index แทนการพยากรณ์แสงโดยตรงช่วยแยกส่วนที่คำนวณได้แน่นอน (ตำแหน่งดวงอาทิตย์) ออกจากส่วนที่ไม่แน่นอน (เมฆ)
จะรู้ได้อย่างไรว่าระบบโซลาร์ผลิตไฟน้อยผิดปกติ?
เทียบพลังงานจริงกับพลังงานที่ควรผลิตได้จากแสงและอุณหภูมิจริงของช่วงเวลานั้น ไม่ใช่เทียบกับเดือนก่อน ถ้า performance index ต่ำกว่าประมาณ 0.9 ต่อเนื่องให้ตรวจ และเทียบกระแสของแต่ละสตริงกันเอง สตริงที่ต่ำกว่าค่ามัธยฐานเกินประมาณ 10 % ในวันฟ้าใสบ่งชี้แผงสกปรก เงาใหม่ ขั้วต่อเสีย หรือบายพาสไดโอดลัด