กลับไปยังบล็อก BIM และ IFC
แก้ไขการส่งออก · 2026-05-20 · 8 นาที
GUID ซ้ำในไฟล์ IFC: ข้อผิดพลาดเงียบที่ทำให้ทุกอย่างพัง
ผ่านไปสามสัปดาห์กับประเด็นประสานงานใน BCF คุณเพิ่งรู้ว่าความคิดเห็นอ้างถึงองค์ประกอบที่หายไปจากโมเดลแล้ว โมเดลดูปกติดี แต่ข้อผิดพลาดคือมีสององค์ประกอบใช้ GlobalId เดียวกัน และเครื่องมือปลายทางทุกตัวก็สับสนมาตั้งแต่วันแรกโดยไม่มีใครรู้
GUID ซ้ำในไฟล์ IFC: ข้อผิดพลาดเงียบที่ทำให้ทุกอย่างพัง — IFC Viewer Online article cover
GlobalId ใน IFC คืออะไร
ทุกเอนทิตีในไฟล์ IFC ที่สืบทอดจาก IfcRoot ซึ่งรวมถึงองค์ประกอบทางกายภาพ พื้นที่ (space) ชั้น อาคาร และที่ตั้งโครงการ (site) ทุกรายการ จะมีแอตทริบิวต์ GlobalId ซึ่งเป็นสตริงยาว 22 อักขระที่ใช้ชุดอักขระ base-64 แบบเฉพาะ และควรไม่ซ้ำกันในระดับสากล คงที่ข้ามรีวิชัน และคงอยู่แม้ไฟล์จะถูกส่งไปมาระหว่างซอฟต์แวร์
#100 = IFCWALL('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Exterior Wall - 300mm', $, $, #88, #92, $, .NOTDEFINED.);
#101 = IFCDOOR('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Door D001', $, $, #89, #93, $, .NOTDEFINED.);
// Both elements share the same GlobalId — IFC schema violation.
ข้อกำหนด IFC (ISO 10303-21) ห้ามมี GlobalId ซ้ำ แต่ข้อกำหนดเองบังคับเรื่องนี้ไม่ได้ ตัวอ่านไฟล์จะโหลดทุกอย่างที่ได้รับ และตัวอ่านส่วนใหญ่ไม่ได้ตรวจเรื่องนี้ด้วยซ้ำ ผลลัพธ์คือไฟล์ที่ถูกต้องตามโครงสร้าง แต่มีสององค์ประกอบอ้างตัวตนเดียวกัน
ทำไมจึงเกิด GUID ซ้ำ
- การส่งออกซ้ำจาก Revit: โดยค่าเริ่มต้น การตั้งค่าส่งออกของ Revit บางแบบจะสร้าง GUID ใหม่ทุกครั้งที่ส่งออก การส่งออกโมเดลเดียวกันสองครั้งจึงได้ GUID ต่างกัน และหากการส่งออกครั้งที่สามคัดลอกองค์ประกอบมาจากไฟล์รุ่นเก่า ก็จะเกิด GUID ชนกัน
- การคัดลอกและวางในซอฟต์แวร์สร้างโมเดล: การทำสำเนาอินสแตนซ์ของ Family โดยไม่ได้สั่งให้สร้าง GUID ใหม่ ซึ่งพบบ่อยใน ArchiCAD และ Vectorworks จะได้สององค์ประกอบที่มี GlobalId เหมือนกัน
- การรวมโมเดล: การรวมไฟล์ IFC สองไฟล์โดยไม่ตรวจหา GUID ที่ชนกันระหว่างไฟล์ เป็นวิธีที่ทำให้เกิด GUID ซ้ำได้อย่างแน่นอน โดยเฉพาะเมื่อทั้งสองไฟล์ส่งออกมาจากโมเดลต้นทางเดียวกัน
- GUID ที่สร้างด้วยสคริปต์: สคริปต์ส่งออกที่เขียนขึ้นเองซึ่งสร้าง GUID จาก UUID ธรรมดา (เลขฐานสิบหก 32 ตัว) แล้วตัดให้เหลือ 22 อักขระโดยไม่เข้ารหัส base-64 ให้ถูกต้อง ทำให้ได้สตริงที่อาจซ้ำกันหรือมีรูปแบบไม่ถูกต้อง
GUID ซ้ำทำให้อะไรพังบ้าง
การประสานงานด้วย BCF
ประเด็นใน BCF อ้างอิงองค์ประกอบด้วย GlobalId เมื่อมี GUID ซ้ำ ความคิดเห็นจะไปผูกกับองค์ประกอบใดก็ตามที่เครื่องมือฝั่งผู้รับบังเอิญโหลดก่อน ส่วนอีกองค์ประกอบหนึ่งจะอ้างอิงถึงไม่ได้เลย
ลิงก์ IFC ใน Revit
ตัวจัดการลิงก์ IFC ของ Revit ใช้ GlobalId ติดตามเวอร์ชันขององค์ประกอบข้ามการอัปเดตโมเดล GUID ซ้ำทำให้องค์ประกอบสลับตัวตนกันแบบสุ่มระหว่างการอัปเดต จนการติดตามการเปลี่ยนแปลงใช้งานไม่ได้
ทะเบียนทรัพย์สินใน CDE
สภาพแวดล้อมข้อมูลร่วม (CDE) อย่าง ACC และ ProjectWise จัดทำดัชนีองค์ประกอบ IFC ด้วย GlobalId สำหรับข้อมูลการส่งมอบ GUID ซ้ำทำให้เกิดทรัพย์สินผี (phantom asset) ที่ปรากฏในทะเบียนแต่หาไม่พบในโมเดล
การส่งออก COBie
ชีต COBie ผูกข้อมูลการบริหารจัดการอาคาร (FM) เข้ากับ GlobalId ของ IfcSpace และ IfcAsset พื้นที่ที่ซ้ำกันจะทำให้เกิดแถวซ้ำในชุดข้อมูลส่งมอบสำหรับงาน FM
วิธีตรวจหา GUID ซ้ำ
รันการตรวจสอบก่อนส่งงานเข้า CDE ทุกครั้ง กฎ RULE_DUPLICATE_GUID จะแจ้งทุกองค์ประกอบที่ใช้ GlobalId ร่วมกับองค์ประกอบอื่น และแก้ไขอัตโนมัติได้ หมายความว่าเครื่องมือตรวจสอบสามารถสร้าง GUID ใหม่ที่เป็นไปตามข้อกำหนดให้กับรายการที่ซ้ำได้ในคลิกเดียว
ตรวจสอบโมเดล Duplex แบบสด
เปิดโมเดล Duplex ของ buildingSMART ในโปรแกรมดู เพื่อดูว่ารายงานการตรวจสอบที่ไม่มีปัญหาเป็นอย่างไร จากนั้นลองเปิดไฟล์โครงการของคุณเองเพื่อตรวจหา GUID ซ้ำ
IFC2x3 · 2.4 MB
เปิดโปรแกรมดู IFC แบบอินเทอร์แอกทีฟ
วิธีแก้ GUID ซ้ำ
ทางเลือกที่ 1: แก้ไขอัตโนมัติในเครื่องมือตรวจสอบ
เครื่องมือตรวจสอบของ IFC Viewer ระบุว่าประเด็น GUID ซ้ำเป็นประเด็นที่แก้ไขอัตโนมัติได้ คลิกไอคอนแก้ไขข้างประเด็น RULE_DUPLICATE_GUID รายการใดก็ได้ ระบบจะสร้าง GlobalId ใหม่ที่เป็นไปตามข้อกำหนด ซึ่งเป็นสตริง 22 อักขระที่ใช้ชุดอักขระ base-64 ของ IFC ที่ถูกต้อง (0–9, A–Z, a–z, _, $) และมีอักขระตัวแรกอยู่ในช่วง 0–3
ทางเลือกที่ 2: แก้ใน Revit
ใน Revit ที่ใช้ตัวส่งออก IFC แบบโอเพนซอร์ส: File → Export → IFC → Modify Setup → แท็บ Advanced → ตั้งค่า "Export IFC GUIDs" เป็น "Keep Existing" วิธีนี้จะรักษา GlobalId ที่คงที่ซึ่ง Revit กำหนดไว้ภายใน แทนที่จะสร้างใหม่ทุกครั้งที่ส่งออก
ทางเลือกที่ 3: แก้ใน ArchiCAD
ใน ArchiCAD: File → Save As → IFC 2x3 → Settings → IFC Translation Settings → เปิดใช้ "Write stable GlobalIDs (from AC internal IDs)" หากไม่เปิดตัวเลือกนี้ ArchiCAD จะสร้าง GUID ใหม่ทุกครั้งที่ส่งออก
GUID ซ้ำในไฟล์ IFC: ข้อผิดพลาดเงียบที่ทำให้ทุกอย่างพัง