กลับไปยังบล็อก BIM และ IFC
แก้ไขการส่งออก · 2026-06-03 · 8 นาที
ทำไม GUID ใน IFC จึงเปลี่ยนทุกครั้งที่ส่งออก (และวิธีทำให้คงที่)
คุณส่งออกโมเดลเดิมอีกครั้งแล้วส่งให้ผู้ประสานงาน แต่ความคิดเห็นใน BCF ประเด็นการชนกัน และแท็ก FM ทุกรายการกลับชี้ไปยังองค์ประกอบผิดตัว หรือไม่ชี้ไปที่ใดเลย สาเหตุคือ GlobalId ในไฟล์ IFC ของคุณถูกสร้างขึ้นใหม่ บทความนี้อธิบายว่าเหตุใดจึงเกิดขึ้น และจะล็อกค่าให้คงที่ได้อย่างไร
ทำไม GUID ใน IFC จึงเปลี่ยนทุกครั้งที่ส่งออก (และวิธีทำให้คงที่) — IFC Viewer Online article cover
ปัญหา GUID ใน IFC มีสองแบบที่แตกต่างกันโดยสิ้นเชิง แต่มักถูกนำมาปนกันอยู่เสมอ แบบแรกคือ GUID ซ้ำ ซึ่งหมายถึงสององค์ประกอบใช้ GlobalId เดียวกันภายในไฟล์เดียว แบบที่สองซึ่งบทความนี้จะกล่าวถึงคือ GUID ไม่คงที่ นั่นคือองค์ประกอบเดิมได้ GlobalId ใหม่ทุกครั้งที่คุณส่งออก (export) โมเดลซ้ำ ทั้งสองแบบทำให้การประสานงานพัง แต่แบบที่สองสังเกตได้ยากกว่า เพราะไฟล์แต่ละไฟล์เมื่อดูแยกกันก็ถูกต้องทุกประการ
หากคุณประสานงานเรื่องการชนกัน ใช้ขั้นตอนการทำงาน (workflow) แบบ BCF หรือส่งมอบโมเดลให้ฝ่ายบริหารจัดการอาคาร (FM) GlobalId ที่คงที่คือสิ่งจำเป็น ไม่ใช่ทางเลือก เพราะเป็นสิ่งเดียวที่ทำให้เครื่องมือบอกได้ว่า “ผนังนี้ในรีวิชัน 4 คือผนังเดียวกับในรีวิชัน 2” เมื่อค่าเหล่านี้เปลี่ยนไป ทุกการอ้างอิงที่เคยชี้ไปยัง ID เดิมจะกลายเป็นการอ้างอิงที่ไร้ปลายทางโดยไม่มีใครรู้ตัว
- 22 — อักขระใน GUID ของ IFC
- 3 — ค่าสูงสุดของอักขระตัวแรก
- 0 ไบต์ — ที่อัปโหลดเพื่อตรวจสอบ
- 100% — ทำงานในเบราว์เซอร์
GlobalId ที่คงที่ควรเป็นอย่างไร
ทุกเอนทิตี IFC ที่สืบทอดจาก IfcRoot จะมี GlobalId ซึ่งเป็นสตริงยาว 22 อักขระที่ใช้ชุดอักขระ base-64 แบบเฉพาะของ IFC (0–9, A–Z, a–z, _, $) ข้อกำหนดระบุไว้ชัดเจนว่าค่านี้ต้องไม่ซ้ำกันในระดับสากลและคงอยู่ถาวร กล่าวคือองค์ประกอบเชิงตรรกะเดียวกันต้องมี GlobalId เดิมทั้งเมื่อข้ามรีวิชัน และเมื่อไฟล์ถูกส่งไปมาระหว่างซอฟต์แวร์ ความคงที่นี้เองที่ทำให้การติดตามการเปลี่ยนแปลง BCF และทะเบียนทรัพย์สินเป็นไปได้
// Revision 2
#1402 = IFCWALL('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Exterior Wall - 300mm', ...);
// Revision 3 — same wall, regenerated GlobalId. Every reference to the old ID now dangles.
#1402 = IFCWALL('2hQ8pZ_a1ABxKm9dELc0Ru', $, 'Exterior Wall - 300mm', ...);
ทำไม Revit จึงสร้าง GUID ใหม่
ต้นเหตุคือ องค์ประกอบใน Revit กับเอนทิตี IFC ที่ส่งออกไปไม่ได้จับคู่กันแบบหนึ่งต่อหนึ่งอย่างชัดเจนเสมอไป องค์ประกอบเดียวใน Revit อาจแตกออกเป็นหลายเอนทิตี IFC (ราวกันตกหนึ่งชุดกลายเป็นราวบน ลูกกรง และราวจับ) และเมื่อไม่มีความสัมพันธ์ 1:1 ที่คงที่ ตัวส่งออก (exporter) ก็ไม่มีจุดยึดที่เชื่อถือได้สำหรับสร้าง GlobalId ที่สม่ำเสมอ จึงสร้างค่าใหม่ขึ้นมาแทน
เดิมทีพารามิเตอร์ IFC GUID ใน Revit เป็นแบบอ่านอย่างเดียว ทีมงานจึงตรึงค่าไว้ไม่ได้แม้จะต้องการก็ตาม ตัวส่งออกเวอร์ชันใหม่เปลี่ยนให้อ่านและเขียนได้ เพื่อให้เก็บค่าไว้และนำกลับมาใช้ซ้ำได้ แต่คุณยังต้องเปิดการตั้งค่าที่ถูกต้องเอง เพราะในการกำหนดค่าบางแบบ ค่าเริ่มต้นคือการสร้างใหม่
- การแตกเป็นองค์ประกอบย่อย: องค์ประกอบหลัก (host) หนึ่งชิ้นที่ส่งออกเป็นหลายเอนทิตี IFC (ราวกันตก บันได ผนังม่าน หลังคาที่มีเชิงชาย) คือต้นเหตุคลาสสิกที่ทำให้ GUID เปลี่ยน
- การส่งออกซ้ำแบบ “สร้างใหม่”: การตั้งค่าส่งออกบางแบบสร้าง GUID ใหม่ทุกครั้ง แทนที่จะนำค่าที่เก็บไว้กลับมาใช้
- การคัดลอกและวาง รวมถึงการแก้ไขกลุ่ม (group) ในซอฟต์แวร์สร้างโมเดล อาจรีเซ็ต ID ภายในที่ใช้เป็นฐานในการสร้าง GUID
- การส่งไฟล์ผ่านเครื่องมือที่ไม่รักษา GlobalId ไว้ (เปิดแล้วบันทึกซ้ำในโปรแกรมดูหรือโปรแกรมแปลงไฟล์) จะทำให้ค่าเหล่านั้นถูกเขียนใหม่
อีกครึ่งหนึ่งของปัญหา: GUID อยู่นอกช่วงที่ถูกต้อง
ยังมีความผิดพลาดที่เกี่ยวข้องซึ่งสคริปต์ส่งออกที่เขียนขึ้นเองเจออยู่บ่อยครั้ง อักขระตัวแรกของ GlobalId ที่ถูกต้องเข้ารหัสได้เฉพาะค่า 0–3 ในชุดอักขระ 6 บิตเท่านั้น เพราะเมื่อบรรจุ UUID ขนาด 128 บิตลงในอักขระ base-64 จำนวน 22 ตัว กลุ่ม 6 บิตแรกจะเหลือบิตที่มีนัยสำคัญเพียงสองบิต สคริปต์ที่นำ UUID ธรรมดาแบบเลขฐานสิบหก 32 ตัวมาตัดทอนหรือเข้ารหัสใหม่อย่างไม่ถูกวิธี จะได้อักขระตัวแรกที่อยู่นอกช่วงนี้
ค่า GUID อยู่นอกช่วงที่ถูกต้อง หากอักขระตัวแรกเป็นค่าอื่นที่ไม่ใช่ 0, 1, 2 หรือ 3 ค่านั้นไม่ใช่ GlobalId ที่เป็นไปตามข้อกำหนดของ IFC
buildingSMART Forums — ข้อผิดพลาดที่พบบ่อยในการส่งออก IFC
GlobalId ที่อยู่นอกช่วงจะผ่านไปได้เงียบ ๆ ในตัวแยกวิเคราะห์ (parser) ที่ผ่อนปรน แต่จะถูกปฏิเสธในตัวที่เข้มงวด ไฟล์เดียวกันจึง “ใช้ได้” ในเครื่องมือหนึ่ง แต่ไม่ผ่านการตรวจสอบในอีกเครื่องมือหนึ่ง ซึ่งวินิจฉัยได้ยากมากหากไม่มีเครื่องมือตรวจสอบที่แจ้งเรื่องช่วงค่าอย่างชัดเจน
วิธีตรวจหา GUID ที่ไม่คงที่หรือไม่ถูกต้อง
คุณมองไม่เห็นการเปลี่ยนของ GUID จากการดูไฟล์เดียว ต้องเปรียบเทียบไฟล์ที่ส่งออกสองครั้ง หรือตรวจหารูปแบบที่ไม่ถูกต้องและค่าซ้ำภายในไฟล์เดียว เปิดทั้งสองรีวิชันในเครื่องมือตรวจสอบ ระบบจะแจ้ง GlobalId ที่อยู่นอกช่วงที่ถูกต้อง ซ้ำกันภายในไฟล์ หรือมีรูปแบบผิด ภายในเวลาไม่ถึง 30 วินาที โดยทำงานในเบราว์เซอร์ของคุณทั้งหมด ไม่มีการอัปโหลดใด ๆ
ตรวจสอบ GlobalId ในโมเดลจริง
เปิดโมเดล Duplex ของ buildingSMART เพื่อดูว่ารายงาน GlobalId ที่ไม่มีปัญหาเป็นอย่างไร จากนั้นลากไฟล์ที่ส่งออกสองครั้งติดกันจากโมเดลของคุณเองมาวาง เพื่อดูว่าองค์ประกอบใดถูกสร้าง ID ใหม่
IFC2x3 · 2.4 MB
เปิดโปรแกรมดู IFC แบบอินเทอร์แอกทีฟ
วิธีทำให้ GUID คงที่
Revit
ใช้ตัวส่งออก IFC แบบโอเพนซอร์ส แล้วไปที่ File → Export → IFC → Modify Setup → Advanced ตั้งค่า "Export IFC GUIDs" เป็น "Keep Existing" (ห้ามใช้ "Generate New") วิธีนี้จะนำ GlobalId ที่คงที่ซึ่ง Revit เก็บไว้ในแต่ละองค์ประกอบกลับมาใช้ แทนการสร้างค่าใหม่ทุกครั้งที่ส่งออก สำหรับองค์ประกอบที่แตกเป็นหลายเอนทิตี IFC ต้องยอมรับว่าเอนทิตีย่อยอาจไม่คงที่สมบูรณ์ ให้ยึด ID ขององค์ประกอบหลัก (host) เป็นฐานในการประสานงาน
ArchiCAD
ในการตั้งค่า IFC Translator ให้เปิดใช้ "Write stable GlobalIDs (from AC internal IDs)" หากไม่เปิด ArchiCAD จะสร้าง GlobalId ด้วยวิธีที่อาจเปลี่ยนไประหว่างการส่งออกแต่ละครั้ง
แก้ไขค่าที่เปลี่ยนไปแล้ว
หากไฟล์มี GlobalId ที่ไม่ถูกต้องหรือซ้ำกันอยู่แล้ว เครื่องมือตรวจสอบสามารถแก้ไขอัตโนมัติได้ โดยสร้าง GlobalId ใหม่ยาว 22 อักขระที่เป็นไปตามข้อกำหนด ใช้ชุดอักขระ base-64 ที่ถูกต้อง และมีอักขระตัวแรกอยู่ในช่วง 0–3 ใช้วิธีนี้ซ่อมรูปแบบของไฟล์ที่ส่งมอบไปแล้ว แต่ต้องแก้การตั้งค่าส่งออกที่ต้นทางด้วย มิฉะนั้นการส่งออกครั้งถัดไปจะทำให้ GUID เปลี่ยนอีก
อ่านเพิ่มเติมเกี่ยวกับกรณี GUID ซ้ำ (สององค์ประกอบ หนึ่ง ID) และการตรวจสอบเชิงโครงสร้างทั้งหมด ได้ที่ GUID ซ้ำในไฟล์ IFC และ ข้อผิดพลาดในการตรวจสอบ IFC ที่พบบ่อยที่สุด 7 ข้อ ในบล็อกนี้
ทำไม GUID ใน IFC จึงเปลี่ยนทุกครั้งที่ส่งออก (และวิธีทำให้คงที่)