บทที่ 14 Validation
ความสำคัญของ Validation
ในการใช้งาน API สำหรับงานวิศวกรรม ความถูกต้องคือกุญแจสำคัญ เราไม่ควรเชื่อค่าจาก API 100% โดยไม่ตรวจสอบ โดยเฉพาะเมื่อมีการอัปเดตเวอร์ชัน ETABS
บทนี้จะแนะนำวิธีการทำ Automated Validation เพื่อตรวจสอบว่าค่าที่ได้จาก API ตรงกับ Hand Calculation หรือ GUI Results
1. Validation Concept
หลักการคือ:
- สร้าง Benchmark Model ที่ทราบค่าคำตอบที่ถูกต้อง (Exact Solution)
- เขียน Python script เพื่ออ่านค่าจาก API
- เปรียบเทียบค่าที่อ่านได้กับค่าที่ถูกต้อง (Allowable Tolerance e.g. < 0.1%)
- ออกรายงาน Pass/Fail
2. ตัวอย่าง: Simple Beam Validation
สมมติคานช่วงเดียว (Simple Beam) ยาว $L=6m$ รับ Uniform Load $w=10 kN/m$
Hand Calc:
- Reaction $R = wL/2 = 30 kN$
- Max Moment $M = wL^2/8 = 45 kN\cdot m$
import comtypes.clientimport math
def validate_simple_beam(): # 1. Connect & Open Model etabs = comtypes.client.GetActiveObject("CSI.ETABS.API.ETABSObject") sap_model = etabs.SapModel
# สมมติว่าเปิดโมเดล "Validation_Beam_01.edb" อยู่
# 2. Run Analysis sap_model.Analyze.RunAnalysis()
# 3. Get Results (B1) sap_model.Results.Setup.DeselectAllCasesAndCombosForOutput() sap_model.Results.Setup.SetCaseSelectedForOutput("DEAD", True)
# อ่าน Frame Force ret, nr, _, obj_sta, _, _, _, _, _, p, v2, _, _, _, m3 = \ sap_model.Results.FrameForce("B1", 0)
# 4. Find Max Values max_shear = max([abs(v) for v in v2]) max_moment = max([abs(m) for m in m3])
# 5. Hand Calc Values expected_shear = 30.0 # kN expected_moment = 45.0 # kN-m tolerance = 0.01 # 1%
# 6. Compare shear_diff = abs(max_shear - expected_shear) / expected_shear moment_diff = abs(max_moment - expected_moment) / expected_moment
print(f"--- Validation Report ---") print(f"Shear: API={max_shear:.3f}, Hand={expected_shear:.3f} -> Diff={shear_diff:.2%}") print(f"Moment: API={max_moment:.3f}, Hand={expected_moment:.3f} -> Diff={moment_diff:.2%}")
if shear_diff < tolerance and moment_diff < tolerance: print("✅ PASSED: API output matches theory.") else: print("❌ FAILED: Significant discrepancy found!")
# run: validate_simple_beam()3. สร้าง Validation Suite
ในโปรเจกต์จริง ควรสร้างไฟล์ test_validation.py และใช้ pytest รันทุกกรณี:
import pytestfrom etabs_helper import connect_etabs
def test_cantilever_deflection(): # ตรวจสอบระยะแอ่นปลายคานยื่น (PL^3/3EI) # ... assert abs(delta - expected) < 0.001
def test_column_axial(): # ตรวจสอบแรงลงเสา (Trib area * Load) # ... assert abs(p - expected) < 0.1Checklist สำหรับ Validation Report
- ระบุ version ของ ETABS ที่ใช้ทดสอบ (เช่น v19.1.0)
- ระบุ unit preferences (ควรใช้ SI หรือ Consistent Units)
- เก็บไฟล์ Benchmark Models (.edb) ไว้ใน folder
tests/models/ - รัน test suite ทุกครั้งที่มีการแก้โค้ดหลัก