บทที่ 10 · ลงมือทำ · UaExpert · Prosys Sim · ฟรี

🧪 Hands-on กับ UaExpert

เวลาที่ใช้ใน Lab นี้ประมาณ 30 นาที — ติดตั้ง UaExpert (Client ฟรี) + Prosys OPC UA Simulation Server (Server จำลอง ฟรี) — Browse, Read, Subscribe, Call Method เห็นทุกอย่างที่อ่านมา 9 บท ทำงานจริง

หมายเหตุ — คู่มือนี้ ไม่มีภาพหน้าจอ เพราะ Software เปลี่ยน UI ตามรุ่น — ทำตามขั้นตอนข้างล่างได้เลย ถ้าหายเจอเมนูไหน ดูใน Search Box ของแต่ละ Application ได้

ก่อนเริ่ม — สิ่งที่ต้องมี

  1. คอมพิวเตอร์ — Windows / Mac / Linux ก็ได้
  2. Java Runtime Environment (JRE) สำหรับ Prosys — ดาวน์โหลด JRE 11 หรือใหม่กว่า ที่ adoptium.net (ฟรี, Open Source)
  3. Internet Connection — สำหรับโหลด Software
  4. เวลาประมาณ 30 นาที

ขั้นที่ 1 — ติดตั้ง Prosys OPC UA Simulation Server

Prosys เป็นบริษัทจากฟินแลนด์ที่ทำ OPC UA SDK — Simulation Server ของเขาเปิดให้ใช้ฟรี สำหรับทดสอบและการเรียน:

  1. ไปที่ prosysopc.com/products/opc-ua-simulation-server/
  2. กด Download — กรอกอีเมล (Free Edition จะส่งลิงก์ดาวน์โหลดให้)
  3. ติดตั้งตาม Installer — Default options พอ
  4. เปิด Prosys OPC UA Simulation Server หลังติดตั้ง
  5. Server จะเริ่มทำงานทันที — มอง "Endpoints" tab เห็น URL ประมาณ:
    opc.tcp://<your-computer>:53530/OPCUA/SimulationServer
    จดเก็บ URL นี้ไว้ใช้ในขั้นต่อไป
Server มีอะไรให้ Browse? — Prosys Sim ให้ Data Tree ที่จำลอง:
  • Sinusoid, Counter, Random — Variables ที่ค่าเปลี่ยนตลอดเวลา (ใช้ทดสอบ Subscribe)
  • StaticData — ตัวอย่าง Variable ที่เขียน/อ่านได้
  • Methods — สำหรับทดสอบ Method Call
  • Events & Alarms — สำหรับทดสอบ Event Subscription

ขั้นที่ 2 — ติดตั้ง UaExpert

UaExpert ทำโดย Unified Automation — Engineering Tool สำหรับ OPC UA ที่นิยมที่สุดในวงการ — ใช้สำหรับ Browse, Read, Write, Debug Server

  1. ไปที่ unified-automation.comProducts → Development Tools → UaExpert
  2. สมัครบัญชี (ฟรี) เพื่อโหลด
  3. ดาวน์โหลด UaExpert สำหรับ OS ของคุณ
  4. ติดตั้งตาม Installer
  5. เปิด UaExpert

ขั้นที่ 3 — เชื่อมต่อ Server

  1. ใน UaExpert ไปที่เมนู Server → Add
  2. ในกล่อง Custom Discovery ใส่ URL ที่ได้จากขั้นที่ 1:
    opc.tcp://<your-computer>:53530/OPCUA/SimulationServer
  3. UaExpert จะ Discovery เห็น Endpoints ที่ Server มี — เลือก:
    • Security Policy: None (สำหรับ Lab — ของจริงเลือก Basic256Sha256)
    • Message Security Mode: None
  4. คลิก OK
  5. ทาง Server side อาจถามให้ Trust Certificate ของ UaExpert — กด Trust (เพราะเรา Self-sign)
  6. ขั้นตอน Authentication — เลือก Anonymous (Default)
  7. คลิก Finish

ถ้าเชื่อมต่อสำเร็จ — Server จะปรากฏใน Project Tree ทางซ้าย — สถานะเป็นสีเขียว

ขั้นที่ 4 — Browse Address Space

ใน Tab Address Space (ทางซ้าย) คลิกที่ Server ที่เชื่อมต่อ แล้วขยาย:

Root
  └─ Objects
       ├─ Server                    ← Built-in (server info)
       ├─ Simulation
       │    ├─ Counter             ← Int32 (เพิ่มขึ้นตลอด)
       │    ├─ Random              ← Double (ค่าสุ่ม)
       │    ├─ Sawtooth            ← Double (Sawtooth wave)
       │    ├─ Sinusoid            ← Double (Sine wave)
       │    ├─ Square              ← Double (Square wave)
       │    ├─ Triangle            ← Double (Triangle wave)
       │    └─ ...
       ├─ MyObjects
       │    ├─ MyDevice
       │    │    ├─ MyLevel        ← Variable
       │    │    ├─ MyMethod()     ← Method
       │    │    └─ ...
       └─ StaticData
            └─ AnalogItems
                 ├─ Int32AnalogItem
                 ├─ DoubleAnalogItem
                 └─ ...

สังเกต: นี่คือ Address Space แบบที่บทที่ 03 อธิบาย — ทุก Variable มี Type, Unit, AccessLevel ที่อ่านได้จากแผง Attributes ทางขวา

ขั้นที่ 5 — Read ค่า

  1. คลิกที่ Simulation → Counter
  2. ดูแผง Attributes ทางขวา — จะเห็น:
    • NodeId: ns=3;s=Counter
    • BrowseName: Counter
    • DisplayName: Counter
    • DataType: Int32
    • Value: (ค่าปัจจุบัน)
  3. กดปุ่ม Refresh ที่แผง Attributes — ค่าจะอัพเดท
นี่คือ Read Service ตัวจริง — UaExpert ส่ง Read request ไปที่ Server, Server ส่งค่าปัจจุบันกลับมา — แบบเดียวกับที่บทที่ 04 อธิบาย

ขั้นที่ 6 — Subscribe (เห็นค่าเปลี่ยนตลอดเวลา)

นี่คือฟีเจอร์ที่ Modbus ทำไม่ได้:

  1. ไปที่ Document → Add → Data Access View (สร้าง Subscription View)
  2. ลาก Simulation → Counter, Sinusoid, Random จาก Address Space ไปวางใน Data Access View
  3. สังเกต — ค่าทั้ง 3 จะอัพเดทอัตโนมัติ! UaExpert ไม่ได้ Poll — Server Push ค่าใหม่มาเองทุกครั้งที่เปลี่ยน

ลองเปลี่ยน Sampling Interval ในแถวของแต่ละ Item — เช่นจาก 1000ms เป็น 100ms — จะเห็นค่าอัพเดทบ่อยขึ้น

ขั้นที่ 7 — Write ค่า

ลองหา Variable ที่ เขียนได้:

  1. ไปที่ MyObjects → MyDevice → MyLevel
  2. ดู Attribute AccessLevel — ถ้ามี "CurrentWrite" แสดงว่าเขียนได้
  3. คลิกขวาที่ Variable → Write
  4. ใส่ค่าใหม่ (เช่น 50.0) → กด Write
  5. Refresh — เห็นค่าใหม่ที่เขียนลงไป

ขั้นที่ 8 — Call Method

Method คือฟังก์ชันที่ Server ทำงานให้ Client:

  1. หา Method ใน Address Space — เช่น MyObjects → MyDevice → MyMethod
  2. คลิกขวา → Call
  3. ใส่ Input Arguments ตามที่ Method ต้องการ — กด Call
  4. ดู Output Arguments ที่ Method ส่งกลับมา

เปรียบเทียบ — ใน Modbus คุณต้อง เขียน Magic Value ลง Register แล้ว Poll Bit Status เพื่อรอผล — ใน OPC UA มันคือฟังก์ชันปกติเลย

ขั้นที่ 9 — Events & Alarms

  1. Prosys Server มี Tab Events ที่ส่ง Event ทุกๆ 2-3 วินาที (ปรับใน Server UI ได้)
  2. ใน UaExpert ไปที่ Document → Add → Event View
  3. เลือก Server Node (Objects → Server) เป็น Source ของ Event
  4. Event จะปรากฏใน Event View แบบ Real-time พร้อม:
    • SourceName
    • Time
    • Severity (1-1000)
    • Message

ขั้นที่ 10 — ตรวจสอบ Performance

UaExpert มี Tab Performance View ที่ใช้ดู:

เปิด Window นี้ขณะ Subscribe — จะเห็นว่า OPC UA Performance ดีกว่าที่คิด

โปรเจ็คเล็กๆ — ลองทำเอง

หลังจากทำตามขั้นตอนข้างบนแล้ว ลอง challenge ตัวเอง:

CHALLENGE 1
Subscribe ด้วย Deadband
Subscribe ที่ Sinusoid โดยตั้ง Deadband Absolute = 0.5 — สังเกตว่าค่าอัพเดทเฉพาะตอนเปลี่ยนเกิน 0.5
CHALLENGE 2
Historical Access
Prosys Server บันทึก History ของ Variable บางตัว — หาวิธีอ่านย้อนหลัง 1 นาที
CHALLENGE 3
Python Client
ใช้ asyncua หรือ opcua-asyncio เขียน Script Python อ่าน Counter ทุก 1 วินาที — Print ออก Console
CHALLENGE 4
Security ระดับ Sign+Encrypt
ลองเปลี่ยน Endpoint จาก None → Basic256Sha256 SignAndEncrypt — ดูว่า Certificate Exchange ทำงานยังไง

เครื่องมืออื่นๆ ที่ควรรู้

Toolใช้ทำอะไรLicense
UaModeler (Unified Automation) ออกแบบ Information Model + Generate UaNodeSet XML Commercial · Trial 30 วัน
open62541 OPC UA SDK ในภาษา C — เขียน Server/Client เอง Open Source (MPLv2)
asyncua / opcua-asyncio OPC UA SDK สำหรับ Python Open Source (LGPL)
node-opcua OPC UA SDK สำหรับ Node.js / TypeScript Open Source (MIT)
UA-.NETStandard OPC UA SDK สำหรับ .NET (Official ของ OPC Foundation) Open Source (GPLv2 / Commercial)
UA Cloud Library Repository ของ Information Models — ดู Models จริงๆ ของอุตสาหกรรม Free

สรุป Lab

ผ่าน Lab นี้คุณได้ทำจริง:

สิ่งที่คุณทำใน Lab นี้ คือสิ่งเดียวกัน ที่ Engineer ของ Renault, Bühler, Equinor ทำในโรงงานจริง — เพียงแต่ Server ของพวกเขาเป็น PLC จริง และ Address Space มีหลายพัน Node แต่หลักการเหมือนกัน

ขั้นต่อไป — ถ้าอยากเรียนต่อ

  1. เขียน Python Client จริง — Tutorial ดี: FreeOpcUa/opcua-asyncio
  2. โหลด UaNodeSet จากอุตสาหกรรมจริง — ที่ UA Cloud Library เห็นว่า OPC UA for Robotics, Machinery, IO-Link ใน Production มีโครงสร้างยังไง
  3. ลองเขียน OPC UA Server ของตัวเอง — ใช้ asyncua หรือ open62541 ทำเซ็นเซอร์จำลองที่ Publish ค่า Real-time
  4. ลอง OPC UA over MQTT — เชื่อม Local Mosquitto Broker + Publisher/Subscriber Sample จาก UA-IIoT-StarterKit
  5. ถ้าทำงานในโรงงาน Mitsubishi — ศึกษา FX5-OPC Module + OPC UA Module Configuration Tool บน GX Works3 — หรือ MELSEC iQ-R Series ที่มี OPC UA ในตัว
จบคู่มือแล้ว! หวังว่าคุณเห็นภาพว่า OPC UA ไม่ใช่แค่ "Modbus ที่ใหม่กว่า" — แต่เป็น ภาษากลาง ที่ทำให้อุตสาหกรรมยุค Industrie 4.0 ทำงานร่วมกันได้
มีคำถาม? เปิด หน้าเอกสารอ้างอิง หรือไปต่อที่ opcfoundation.org ที่มีเอกสารฟรีครบทุก Part