บทที่ 07 · Domain-specific · VDMA · 430+ Models

Companion Specifications

ทำไม Robot ของ KUKA, ABB, Yaskawa, FANUC ถึงพูดภาษาเดียวกันได้? เพราะมี OPC UA Companion Specification ที่นิยามว่า "Robot ในมาตรฐาน OPC UA หน้าตาแบบไหน" — ปัจจุบันมีกว่า 430+ Models ครอบคลุมแทบทุกอุตสาหกรรม

ปัญหา — แต่ละโรงงานสร้าง Information Model ของตัวเอง

สมมุติว่า Robot 3 ตัวในโรงงานเดียวกัน ผู้ผลิตต่างกัน ทุกตัวเป็น OPC UA Server พร้อม Address Space:

# Robot ของ Vendor A
RobotA
  ├─ position_x          : Double
  ├─ position_y          : Double
  ├─ joint_angles[6]     : Double[]
  ├─ gripper_open()      : Method
  └─ ...

# Robot ของ Vendor B
KUKARobot1
  ├─ X                   : Float
  ├─ Y                   : Float
  ├─ J1, J2, J3, J4, J5, J6 : Double
  ├─ OpenTool()          : Method
  └─ ...

# Robot ของ Vendor C
RoboT_3
  ├─ posX                : Real32
  ├─ ...                 (โครงสร้างต่างไปอีก)

ผลคือ — MES ของโรงงานต้องเขียน Code 3 ชุด เพื่ออ่านข้อมูลเดียวกัน ถ้าเปลี่ยน Vendor ก็ต้องเขียนใหม่ — ปัญหาเหมือนกับ Modbus เลย แค่ใน Layer ที่สูงขึ้น

คำตอบ — Companion Specifications

Companion Specification (CS) คือ มาตรฐานเฉพาะอุตสาหกรรม ที่กำหนดว่า:

ทุก Vendor ที่อ้างว่าสนับสนุน OPC UA for Robotics ต้องทำตาม CS นี้ — ผลคือ Client เขียน Code ครั้งเดียว ใช้กับ Robot ทุกยี่ห้อ

VDMA เรียก Companion Specs ว่า "The Global Production Language" — VDMA คือสมาคมผู้ผลิตเครื่องจักรของเยอรมัน เป็นคนเริ่มต้นมาตรฐานเหล่านี้ร่วมกับ OPC Foundation

หมวดหมู่ของ Companion Specifications

ปัจจุบันมีกว่า 60 Companion Specifications แบ่งเป็นหมวด:

🏭 Generic Device Models (พื้นฐานที่ทุกอุปกรณ์ใช้)

🤖 Manufacturing Devices (เครื่องจักรผลิต)

⚡ Energy

📦 Enterprise & Packaging

🔌 Field Communication (เชื่อม Fieldbus เดิม)

🏢 Building & Misc

รายการเต็มอยู่ที่ opcfoundation.org ทุก Spec โหลด PDF ฟรี และมี UaNodeSet XML สำหรับโหลดเข้า Server โดยตรง

ตัวอย่างจริง — Robotics Companion Spec

OPC 40010 (UA for Robotics) นิยาม ObjectType ที่สำคัญ:

MotionDeviceSystemType
  ├─ MotionDevices (Folder)
  │   └─ MotionDevice : MotionDeviceType
  │        ├─ Manufacturer    : LocalizedText
  │        ├─ Model           : LocalizedText
  │        ├─ SerialNumber    : String
  │        ├─ MotionDeviceCategory : Int32  (Articulated, SCARA, Cartesian, ...)
  │        ├─ Axes (Folder)
  │        │    └─ Axis_1 : AxisType
  │        │         ├─ ActualPosition  : Double
  │        │         ├─ ActualSpeed     : Double
  │        │         └─ ...
  │        ├─ FlangeLoad       : LoadType
  │        ├─ Power            : Boolean
  │        └─ ...
  ├─ Controllers (Folder)
  │   └─ Controller : ControllerType
  │        ├─ SoftwareName     : String
  │        ├─ SoftwareRevision : String
  │        ├─ ComponentName    : String
  │        ├─ TaskControls (Folder)
  │        └─ ...
  └─ SafetyStates (Folder)
       └─ EmergencyStop : Boolean

ทุก Robot ที่อ้างว่าสนับสนุน OPC UA for Robotics — Kuka, ABB, FANUC, Universal Robots, Yaskawa, Mitsubishi, … จะมีโครงสร้างนี้ — Client เขียน read_value('Axes/Axis_1/ActualPosition') ครั้งเดียวใช้ได้กับทุกตัว

UaNodeSet — แชร์ Information Model

แต่ละ Companion Spec มาพร้อมไฟล์ UaNodeSet.xml — XML ที่อธิบายโครงสร้าง Address Space ทั้งหมด Server โหลดไฟล์นี้แล้วได้ Type Hierarchy ของ Spec นั้นทันที — ไม่ต้องเขียนเองทุก Node

<UANodeSet xmlns="...">
  <NamespaceUris>
    <Uri>http://opcfoundation.org/UA/Robotics/</Uri>
  </NamespaceUris>
  <UAObjectType NodeId="ns=1;i=1002" BrowseName="1:MotionDeviceType">
    <DisplayName>MotionDevice</DisplayName>
    <References>
      <Reference ReferenceType="HasSubtype" IsForward="false">
        i=58 <!-- BaseObjectType -->
      </Reference>
    </References>
  </UAObjectType>
  ...
</UANodeSet>

UA Cloud Library — รวม Models ไว้ที่เดียว

OPC Foundation มี UA Cloud Library ที่ uacloudlibrary.opcfoundation.org — Repository ออนไลน์ของ UaNodeSet ทุกตัว ทั้งจาก OPC Foundation และจาก Member ทั่วโลก:

Harmonization — เพื่อไม่ให้ Models ขัดกัน

Companion Spec เกิดจากหลายอุตสาหกรรม ที่บางครั้ง แก้ปัญหาเดียวกันคนละแบบ เช่น "หน่วย Engineering Unit" บาง Spec ใช้ EUInformation จาก Core, บางตัวสร้าง Type ของตัวเอง

OPC Foundation จึงมี Harmonization Working Group ที่:

เป้าหมาย: "ทำสิ่งที่คล้ายกันให้คล้ายกัน, ทำสิ่งที่เหมือนกันให้เหมือนกันเป๊ะ"

สรุปบทที่ 07

บทต่อไป — OPC UA FX — เอา OPC UA ลงไปถึงระดับ Field (เซ็นเซอร์/แอคชูเอเตอร์) แทน Fieldbus เดิม