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

บทที่ 11 Daily Runbook

Pre-flight Checklist

ก่อนรัน script ทุกวัน ตรวจสอบ:

  • ETABS เปิดอยู่ + โมเดลเปิดอยู่
  • Save โมเดลก่อนรัน (หรือ Save As สำเนา)
  • venv เปิดอยู่ ((.venv) ขึ้นที่ terminal)
  • Units ตั้งถูกต้อง (ตรวจจากสคริปต์)

ขั้นตอนรันจริง

%%{init: {
  "theme": "base",
  "flowchart": {
    "curve": "basis",
    "htmlLabels": true,
    "nodeSpacing": 42,
    "rankSpacing": 56,
    "padding": 16
  }
}}%%
flowchart LR
    A["1. เปิด ETABS"] --> B["2. เปิดโมเดล"]
    B --> C["3. เปิด Terminal"]
    C --> D["4. activate venv"]
    D --> E["5. python main.py"]
    E --> F["6. ตรวจ output"]

1. Command Line

Terminal window
cd C:\Projects\MyEtabsApp
# เปิด venv
.venv\Scripts\Activate.ps1
# รัน script
python main.py

2. ตรวจ Output

Terminal window
# ตรวจไฟล์ที่ export
dir output\
# ดู CSV ใน terminal
Get-Content output\frame_forces.csv | Select-Object -First 5

Automation Scripts

Batch File (.bat)

สร้างไฟล์ run_etabs.bat:

Terminal window
@echo off
echo [%DATE% %TIME%] Starting ETABS extraction...
cd /d C:\Projects\MyEtabsApp
call .venv\Scripts\activate.bat
python main.py
if %ERRORLEVEL% neq 0 (
echo ❌ Script failed!
pause
exit /b 1
)
echo ✅ Done!
pause

PowerShell Script (.ps1)

สร้างไฟล์ run_etabs.ps1:

Terminal window
$ErrorActionPreference = "Stop"
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
Write-Host "[$timestamp] Starting ETABS extraction..." -ForegroundColor Cyan
Set-Location "C:\Projects\MyEtabsApp"
& ".venv\Scripts\Activate.ps1"
try {
python main.py
Write-Host "✅ Done!" -ForegroundColor Green
} catch {
Write-Host "❌ Failed: $_" -ForegroundColor Red
exit 1
}

Jupyter Notebook Workflow

ติดตั้งและเริ่มใช้

Terminal window
pip install jupyter
# เปิด Jupyter Notebook
jupyter notebook

ตัวอย่าง Notebook Cells

Cell 1 — Connect:

import comtypes.client
import pandas as pd
etabs = comtypes.client.GetActiveObject("CSI.ETABS.API.ETABSObject")
sap_model = etabs.SapModel
print(f"✅ Connected: {sap_model.GetModelFilename()}")

Cell 2 — Explore frames:

ret, count, names = sap_model.FrameObj.GetNameList()
print(f"Frames: {count}")
for n in names[:10]:
print(f" • {n}")

Cell 3 — Analyze and get results:

sap_model.Analyze.RunAnalysis()
sap_model.Results.Setup.DeselectAllCasesAndCombosForOutput()
sap_model.Results.Setup.SetCaseSelectedForOutput("DEAD", True)
ret, nr, *data = sap_model.Results.FrameForce("B1", 0)
print(f"Results: {nr} rows")

Cell 4 — Cleanup (สำคัญ!):

import gc
del sap_model
del etabs
gc.collect()
print("🧹 Cleanup done")

Task Scheduler (ตั้งเวลารันอัตโนมัติ)

ขั้นตอน

  1. เปิด Task Scheduler (ค้น “Task Scheduler” จาก Start)
  2. เลือก Create Basic Task…
  3. ตั้งค่า:
    • Name: ETABS Daily Export
    • Trigger: Daily, 8:00 AM (หรือตามต้องการ)
    • Action: Start a program
    • Program: C:\Projects\MyEtabsApp\.venv\Scripts\python.exe
    • Arguments: main.py
    • Start in: C:\Projects\MyEtabsApp

Batch Processing: หลายโมเดลพร้อมกัน

"""Process หลายโมเดล ETABS ผ่าน CreateObject"""
import comtypes.client
import gc
from pathlib import Path
model_files = [
r"C:\Models\Building_A.EDB",
r"C:\Models\Building_B.EDB",
r"C:\Models\Building_C.EDB",
]
for model_path in model_files:
etabs = None
sap_model = None
try:
print(f"\n{'' * 50}")
print(f"Processing: {Path(model_path).name}")
print(f"{'' * 50}")
# สร้าง ETABS instance ใหม่
etabs = comtypes.client.CreateObject(
"CSI.ETABS.API.ETABSObject"
)
etabs.ApplicationStart()
sap_model = etabs.SapModel
# เปิดโมเดล
ret = sap_model.File.OpenFile(model_path)
if ret != 0:
print(f"❌ Cannot open: {model_path}")
continue
# Analyze + Export
sap_model.SetPresentUnits(6)
sap_model.Analyze.RunAnalysis()
sap_model.Results.Setup.DeselectAllCasesAndCombosForOutput()
sap_model.Results.Setup.SetCaseSelectedForOutput("DEAD", True)
# ... export results ...
print(f"✅ Done: {Path(model_path).name}")
except Exception as e:
print(f"❌ Error: {e}")
finally:
if sap_model:
del sap_model
if etabs:
del etabs
gc.collect()

Log Output

บันทึก log สำหรับ tracking:

import logging
from pathlib import Path
from datetime import datetime
# ตั้งค่า logging
log_dir = Path("logs")
log_dir.mkdir(exist_ok=True)
log_file = log_dir / f"run_{datetime.now():%Y%m%d_%H%M}.log"
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
handlers=[
logging.FileHandler(log_file, encoding="utf-8"),
logging.StreamHandler(),
],
)
logger = logging.getLogger(__name__)
logger.info("Starting ETABS extraction...")

Checklist — Daily Run

ขั้นตอน
เปิด ETABS + โมเดล
Save ก่อนรัน
Activate venv
รัน python main.py
ตรวจ output CSV/Excel
Cleanup (script ทำให้อัตโนมัติ)
git commit output (ถ้ามี)