ข้ามไปยังเนื้อหา

บทที่ 14 Validation

ความสำคัญของ Validation

ในการใช้งาน API สำหรับงานวิศวกรรม ความถูกต้องคือกุญแจสำคัญ เราไม่ควรเชื่อค่าจาก API 100% โดยไม่ตรวจสอบ โดยเฉพาะเมื่อมีการอัปเดตเวอร์ชัน ETABS

บทนี้จะแนะนำวิธีการทำ Automated Validation เพื่อตรวจสอบว่าค่าที่ได้จาก API ตรงกับ Hand Calculation หรือ GUI Results

1. Validation Concept

หลักการคือ:

  1. สร้าง Benchmark Model ที่ทราบค่าคำตอบที่ถูกต้อง (Exact Solution)
  2. เขียน Python script เพื่ออ่านค่าจาก API
  3. เปรียบเทียบค่าที่อ่านได้กับค่าที่ถูกต้อง (Allowable Tolerance e.g. < 0.1%)
  4. ออกรายงาน 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.client
import 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 รันทุกกรณี:

test_validation.py
import pytest
from 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.1

Checklist สำหรับ Validation Report

  • ระบุ version ของ ETABS ที่ใช้ทดสอบ (เช่น v19.1.0)
  • ระบุ unit preferences (ควรใช้ SI หรือ Consistent Units)
  • เก็บไฟล์ Benchmark Models (.edb) ไว้ใน folder tests/models/
  • รัน test suite ทุกครั้งที่มีการแก้โค้ดหลัก