ในโลกของ Industrial IoT ที่มีเซ็นเซอร์และอุปกรณ์หลายพันตัวส่งข้อมูลกลับไปยังศูนย์กลางทุกวินาที MQTT ได้กลายเป็นโปรโตคอลยอดนิยมเพราะตัวมันเองเบา ใช้พลังงานต่ำ และรองรับสถาปัตยกรรม Publish/Subscribe แต่ MQTT เวอร์ชันพื้นฐานมีจุดอ่อนสำคัญเมื่อนำมาใช้ในโรงงานจริง นั่นคือ “ไม่มีการจัดการสถานะของอุปกรณ์” ทำให้ระบบ SCADA ไม่ทราบว่าข้อมูลที่ได้รับยังสดอยู่หรือไม่ บทความนี้จะเจาะลึก Sparkplug B สเปกที่เติมเต็ม MQTT ให้กลายเป็นมาตรฐาน IIoT อย่างแท้จริง
MQTT คืออะไร? ทบทวนพื้นฐานกันก่อน
MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอลสื่อสารแบบ Publish/Subscribe ที่ออกแบบมาสำหรับอุปกรณ์ที่มีทรัพยากรจำกัด ถูกพัฒนาขึ้นในปี 1999 เพื่อใช้ติดตามท่อส่งน้ำมันผ่านดาวเทียม โดยมี Broker ทำหน้าที่เป็นตัวกลางกระจายข้อความ ส่วนหัวของ MQTT เล็กเพียง 2 ไบต์ ทำให้เหมาะกับเครือข่ายแบนด์วิดท์ต่ำ
QoS Levels ทั้ง 3 ระดับของ MQTT
| QoS Level | ชื่อ | การรับประกัน | การสลับแพ็กเก็ต |
|---|---|---|---|
| 0 | At most once | Fire and forget ส่งครั้งเดียว ไม่มีการยืนยัน | 1 ข้อความ |
| 1 | At least once | รับประกันว่าส่งถึง อาจซ้ำ (PUBACK) | 2 ข้อความ |
| 2 | Exactly once | รับประกันส่งถึง 1 ครั้ง ไม่ซ้ำ (4-step) | 4 ข้อความ |
ทำไม MQTT ธรรมดาไม่พอสำหรับ IIoT?
แม้ MQTT จะมีคุณสมบัติที่ดี แต่เมื่อนำไปใช้ในโรงงานจริงก็เจอปัญหาใหญ่ 3 ข้อ ดังนี้
- ไม่มี Topic Namespace มาตรฐาน — แต่ละทีมพัฒนาออกแบบ topic structure ของตัวเอง ทำให้ระบบต่างผู้ผลิตสื่อสารกันไม่ได้
- ปัญหา Stale Data — เมื่อ Edge Node หยุดส่งข้อมูล SCADA ไม่ทราบว่าอุปกรณ์นั้นยังออนไลน์อยู่หรือไม่ อาจแสดงค่าเดิมซ้ำๆ ทำให้ผู้ควบคุมตัดสินใจผิด
- ไม่มี Device Lifecycle Management — เมื่ออุปกรณ์เชื่อมต่อใหม่ SCADA ไม่ทราบว่าต้องดึงค่าอะไรบ้าง เพราะ MQTT ไม่ได้บังคับให้ส่งรายการ metric ทั้งหมดตอนเริ่มต้น
Sparkplug B แก้ปัญหาอย่างไร?
Sparkplug B เป็นสเปกที่กำหนดโครงสร้าง Topic และ Payload ที่ชัดเจนบน MQTT โดยใช้ Protocol Buffers ในการเข้ารหัสข้อมูลเพื่อลดขนาด payload มีโครงสร้าง Topic เป็นดังนี้
spBv1.0/{group_id}/{message_type}/{edge_node_id}/{device_id}
โดย message_type แบ่งเป็นชนิดข้อความหลักที่จัดการวงจรชีวิตของอุปกรณ์ ดังนี้
- NBIRTH / DBIRTH — Birth Certificate ส่งเมื่อ Edge Node หรือ Device เริ่มออนไลน์ ประกาศรายการ metric ทั้งหมดที่จะส่ง พร้อมค่าเริ่มต้น
- NDATA / DDATA — Data Message ส่งข้อมูลเป็นระยะ ไม่จำเป็นต้องส่งทุก metric ทุกครั้ง
- NDEATH / DDEATH — Death Certificate ส่งเมื่อ Edge Node หรือ Device ออฟไลน์ ทำให้ SCADA ทราบทันที
- NCMD / DCMD — Command Message ให้ SCADA สั่งเขียนค่ากลับไปยังอุปกรณ์ได้
Key Insight: กลไก Birth/Death Certificate ทำให้ระบบ SCADA ทราบสถานะของทุกอุปกรณ์แบบ Real-Time เมื่ออุปกรณ์ตัดการเชื่อมต่อ หน้าจอ HMI จะแสดงสถานะ “Stale” หรือ “Offline” ทันที แทนที่จะโชว์ค่าเก่าที่อาจทำให้ผู้ควบคุมเข้าใจผิด
Primary Host: หัวใจของ Stateful Monitoring
Sparkplug B ยังมีกลไก Primary Host ที่ใช้ topic พิเศษ spBv1.0/STATE/{host_id} เพื่อบอก Edge Node ทุกตัวว่า SCADA หลักยังออนไลน์อยู่หรือไม่ หาก SCADA หลักล่ม Edge Node จะหยุดส่งข้อมูลชั่วคราวและรอจนกว่า SCADA จะกลับมา จากนั้นส่ง Birth Certificate ใหม่ เพื่อให้ SCADA ได้ snapshot ข้อมูลล่าสุดทันที ไม่ต้องรอรอบส่งข้อมูลปกติ
เปรียบเทียบ MQTT ธรรมดา vs Sparkplug B
| คุณสมบัติ | MQTT ธรรมดา | Sparkplug B |
|---|---|---|
| Topic Namespace | อิสระ แต่ละทีมกำหนดเอง | มาตรฐาน 4 ระดับ |
| Payload Format | JSON / String / Binary | Protocol Buffers (เล็กกว่า 60-70%) |
| State Management | ไม่มี | Birth/Death Certificate |
| Stale Data Detection | ต้อง implement เอง | Built-in ผ่าน Death Certificate |
| Primary Host Monitoring | ไม่มี | มี ผ่าน STATE topic |
| Interoperability | ต่ำ (ทุกระบบทำคนละแบบ) | สูง (มาตรฐานเดียวกัน) |
| Bidirectional Control | ต้องออกแบบเอง | มี NCMD/DCMD มาตรฐาน |
กรณีศึกษา: Sparkplug B ในโรงงานผลิตชิ้นส่วน
โรงงานผลิตชิ้นส่วนอัตโนมัติแห่งหนึ่งใช้ MQTT ธรรมดาเก็บข้อมูลจากเซ็นเซอร์อุณหภูมิ 200 จุด ปรากฏว่าเมื่อ Edge Gateway ที่จุดหนึ่งหยุดทำงานเพราะไฟดับ หน้าจอ SCADA ยังคงแสดงค่าอุณหภูมิเดิมนานถึง 15 นาที กว่าพนักงานจะสังเกตเห็นว่าค่าไม่เปลี่ยนแปลง เมื่อเปลี่ยนมาใช้ Sparkplug B ระบบสามารถแจ้งเตือนสถานะ “Device Offline” ภายใน ไม่กี่วินาที ผ่าน Death Certificate และเมื่อกลับมาออนไลน์ Birth Certificate จะส่งค่าล่าสุดทั้งหมดกลับมาทันที
การนำไปใช้งานจริง
Sparkplug B ได้รับการสนับสนุนจาก Eclipse Foundation ผ่านโปรเจกต์ Eclipse Tahu และกลายเป็นมาตรฐานที่ MQTT Broker เกรดอุตสาหกรรมรองรับแทบทุกตัว ในไทยหลายโรงงานที่ใช้ SCADA Platform แบบ Web-Based ก็เริ่มเปลี่ยนมาใช้ Sparkplug B เป็นโปรโตคอลหลักในการเชื่อม Edge Node เข้ากับระบบกลาง เพราะลดภาระการพัฒนา custom topic structure และทำให้ข้อมูลมีความน่าเชื่อถือสูงขึ้นอย่างมีนัยสำคัญ
Key Takeaways
- MQTT มีหัวข้อขนาดเพียง 2 ไบต์ เหมาะกับเครือข่ายแบนด์วิดท์ต่ำ แต่เวอร์ชันพื้นฐานขาดการจัดการสถานะอุปกรณ์
- QoS 0/1/2 รับประกันการส่งข้อมูลต่างกัน — QoS 2 แลกกับการสลับข้อความ 4 ครั้ง
- Birth/Death Certificate ของ Sparkplug B แก้ปัญหา Stale Data ที่ MQTT ธรรมดาไม่มี
- Sparkplug B ใช้ Protocol Buffers ทำให้ payload เล็กกว่า JSON ประมาณ 60-70%
- Primary Host ผ่าน STATE topic ช่วยให้ Edge Node รู้ว่า SCADA หลักยังออนไลน์อยู่ และส่ง snapshot ใหม่เมื่อกลับมา
- Topic Namespace มาตรฐาน 4 ระดับ ทำให้ระบบต่างผู้ผลิตสื่อสารกันได้โดยไม่ต้อง custom mapping
- กรณีศึกษาจริงแสดงว่า Sparkplug B ลดเวลาตรวจจับอุปกรณ์ออฟไลน์จาก 15 นาที เหลือเพียงไม่กี่วินาที
