🧪 Hands-on กับ UaExpert
เวลาที่ใช้ใน Lab นี้ประมาณ 30 นาที — ติดตั้ง UaExpert (Client ฟรี) + Prosys OPC UA Simulation Server (Server จำลอง ฟรี) — Browse, Read, Subscribe, Call Method เห็นทุกอย่างที่อ่านมา 9 บท ทำงานจริง
ก่อนเริ่ม — สิ่งที่ต้องมี
- คอมพิวเตอร์ — Windows / Mac / Linux ก็ได้
- Java Runtime Environment (JRE) สำหรับ Prosys — ดาวน์โหลด JRE 11 หรือใหม่กว่า ที่ adoptium.net (ฟรี, Open Source)
- Internet Connection — สำหรับโหลด Software
- เวลาประมาณ 30 นาที
ขั้นที่ 1 — ติดตั้ง Prosys OPC UA Simulation Server
Prosys เป็นบริษัทจากฟินแลนด์ที่ทำ OPC UA SDK — Simulation Server ของเขาเปิดให้ใช้ฟรี สำหรับทดสอบและการเรียน:
- ไปที่ prosysopc.com/products/opc-ua-simulation-server/
- กด Download — กรอกอีเมล (Free Edition จะส่งลิงก์ดาวน์โหลดให้)
- ติดตั้งตาม Installer — Default options พอ
- เปิด Prosys OPC UA Simulation Server หลังติดตั้ง
-
Server จะเริ่มทำงานทันที — มอง "Endpoints" tab เห็น URL ประมาณ:
จดเก็บ URL นี้ไว้ใช้ในขั้นต่อไปopc.tcp://<your-computer>:53530/OPCUA/SimulationServer
- 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
- ไปที่ unified-automation.com → Products → Development Tools → UaExpert
- สมัครบัญชี (ฟรี) เพื่อโหลด
- ดาวน์โหลด UaExpert สำหรับ OS ของคุณ
- ติดตั้งตาม Installer
- เปิด UaExpert
ขั้นที่ 3 — เชื่อมต่อ Server
- ใน UaExpert ไปที่เมนู Server → Add
-
ในกล่อง Custom Discovery ใส่ URL ที่ได้จากขั้นที่ 1:
opc.tcp://<your-computer>:53530/OPCUA/SimulationServer -
UaExpert จะ Discovery เห็น Endpoints ที่ Server มี — เลือก:
- Security Policy: None (สำหรับ Lab — ของจริงเลือก Basic256Sha256)
- Message Security Mode: None
- คลิก OK
- ทาง Server side อาจถามให้ Trust Certificate ของ UaExpert — กด Trust (เพราะเรา Self-sign)
- ขั้นตอน Authentication — เลือก Anonymous (Default)
- คลิก 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 ค่า
- คลิกที่ Simulation → Counter
-
ดูแผง Attributes ทางขวา — จะเห็น:
- NodeId: ns=3;s=Counter
- BrowseName: Counter
- DisplayName: Counter
- DataType: Int32
- Value: (ค่าปัจจุบัน)
- กดปุ่ม Refresh ที่แผง Attributes — ค่าจะอัพเดท
Read request ไปที่ Server,
Server ส่งค่าปัจจุบันกลับมา — แบบเดียวกับที่บทที่ 04 อธิบาย
ขั้นที่ 6 — Subscribe (เห็นค่าเปลี่ยนตลอดเวลา)
นี่คือฟีเจอร์ที่ Modbus ทำไม่ได้:
- ไปที่ Document → Add → Data Access View (สร้าง Subscription View)
- ลาก Simulation → Counter, Sinusoid, Random จาก Address Space ไปวางใน Data Access View
- สังเกต — ค่าทั้ง 3 จะอัพเดทอัตโนมัติ! UaExpert ไม่ได้ Poll — Server Push ค่าใหม่มาเองทุกครั้งที่เปลี่ยน
ลองเปลี่ยน Sampling Interval ในแถวของแต่ละ Item — เช่นจาก 1000ms เป็น 100ms — จะเห็นค่าอัพเดทบ่อยขึ้น
ขั้นที่ 7 — Write ค่า
ลองหา Variable ที่ เขียนได้:
- ไปที่ MyObjects → MyDevice → MyLevel
- ดู Attribute AccessLevel — ถ้ามี "CurrentWrite" แสดงว่าเขียนได้
- คลิกขวาที่ Variable → Write
- ใส่ค่าใหม่ (เช่น 50.0) → กด Write
- Refresh — เห็นค่าใหม่ที่เขียนลงไป
ขั้นที่ 8 — Call Method
Method คือฟังก์ชันที่ Server ทำงานให้ Client:
- หา Method ใน Address Space — เช่น MyObjects → MyDevice → MyMethod
- คลิกขวา → Call
- ใส่ Input Arguments ตามที่ Method ต้องการ — กด Call
- ดู Output Arguments ที่ Method ส่งกลับมา
เปรียบเทียบ — ใน Modbus คุณต้อง เขียน Magic Value ลง Register แล้ว Poll Bit Status เพื่อรอผล — ใน OPC UA มันคือฟังก์ชันปกติเลย
ขั้นที่ 9 — Events & Alarms
- Prosys Server มี Tab Events ที่ส่ง Event ทุกๆ 2-3 วินาที (ปรับใน Server UI ได้)
- ใน UaExpert ไปที่ Document → Add → Event View
- เลือก Server Node (Objects → Server) เป็น Source ของ Event
-
Event จะปรากฏใน Event View แบบ Real-time พร้อม:
- SourceName
- Time
- Severity (1-1000)
- Message
ขั้นที่ 10 — ตรวจสอบ Performance
UaExpert มี Tab Performance View ที่ใช้ดู:
- Round-trip time ของแต่ละ Service Call
- จำนวน Subscription Notification ที่รับเข้ามา
- Throughput
เปิด Window นี้ขณะ Subscribe — จะเห็นว่า OPC UA Performance ดีกว่าที่คิด
โปรเจ็คเล็กๆ — ลองทำเอง
หลังจากทำตามขั้นตอนข้างบนแล้ว ลอง challenge ตัวเอง:
asyncua หรือ opcua-asyncio เขียน Script Python อ่าน Counter ทุก 1 วินาที — Print ออก Consoleเครื่องมืออื่นๆ ที่ควรรู้
| 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 นี้คุณได้ทำจริง:
- เชื่อมต่อ OPC UA Client (UaExpert) เข้ากับ Server (Prosys Sim)
- Browse Address Space — เห็น Object, Variable, Method, Event แบบที่บทที่ 03 อธิบาย
- Read / Write Attributes
- Subscribe ค่า Real-time — แบบที่ Modbus ทำไม่ได้
- Call Method — ฟังก์ชันจริง รับ Argument ส่งคืน Return
- รับ Events
- เห็น Information Model + Type Hierarchy แบบ OOP จริงๆ
สิ่งที่คุณทำใน Lab นี้ คือสิ่งเดียวกัน ที่ Engineer ของ Renault, Bühler, Equinor ทำในโรงงานจริง — เพียงแต่ Server ของพวกเขาเป็น PLC จริง และ Address Space มีหลายพัน Node แต่หลักการเหมือนกัน
ขั้นต่อไป — ถ้าอยากเรียนต่อ
- เขียน Python Client จริง — Tutorial ดี: FreeOpcUa/opcua-asyncio
- โหลด UaNodeSet จากอุตสาหกรรมจริง — ที่ UA Cloud Library เห็นว่า OPC UA for Robotics, Machinery, IO-Link ใน Production มีโครงสร้างยังไง
-
ลองเขียน OPC UA Server ของตัวเอง — ใช้
asyncuaหรือopen62541ทำเซ็นเซอร์จำลองที่ Publish ค่า Real-time - ลอง OPC UA over MQTT — เชื่อม Local Mosquitto Broker + Publisher/Subscriber Sample จาก UA-IIoT-StarterKit
-
ถ้าทำงานในโรงงาน Mitsubishi — ศึกษา
FX5-OPCModule +OPC UA Module Configuration Toolบน GX Works3 — หรือ MELSEC iQ-R Series ที่มี OPC UA ในตัว
มีคำถาม? เปิด หน้าเอกสารอ้างอิง หรือไปต่อที่ opcfoundation.org ที่มีเอกสารฟรีครบทุก Part