ในบทความ Soft Skills คือ Firmware ของวิศวกร เราพูดถึงหลัก “ไม่แน่ใจ = หยุด” แต่ในงาน Commissioning จริง มีสิ่งที่เราไม่แน่ใจเยอะมาก จูนแรงไปไหม ถ้าเซนเซอร์เสียจะเกิดอะไร ถ้าเน็ตเวิร์กหลุดวาล์วจะค้างที่เท่าไหร่
คำตอบที่ดีที่สุดคือ ทดสอบให้รู้ก่อน แต่จะทดสอบเรื่องอันตรายกับเครื่องจริงก็ไม่ได้ นี่คือจุดที่ Digital Twin เข้ามาช่วยครับ
Digital Twin ในมุมคนทำ PLC
ไม่ต้องคิดถึงโรงงานเสมือนสามมิติราคาแพงครับ สำหรับคนทำ Control Digital Twin คือ โมเดลของกระบวนการ ที่ตอบสนองเหมือนของจริงมากพอ จนเอาคอนโทรลเลอร์ตัวเดิมมาทดสอบด้วยได้
หัวใจของมันมีแค่ 3 อย่าง
- โมเดลที่วัดมาจริง ค่า gain, time constant และ dead time ต้องได้จาก step test บนเครื่องจริง ไม่ใช่เดาเอา
- คอนโทรลเลอร์ตัวเดียวกัน ห้ามมีเวอร์ชันสำหรับ simulation กับเวอร์ชันหน้างานแยกกัน
- การเชื่อมต่อที่สลับได้ ไปที่โมเดลหรือไปที่เครื่องจริงด้วยสวิตช์ตัวเดียว
ชุดทดลองที่เค้กทำ: S7-1500 + Simulink + OPC UA
ชุดฝึกนี้เป็นงานสอนวิชา Process Control ร่วมกับอาจารย์มหาวิทยาลัย เค้กรับผิดชอบฝั่ง Simulink กับการเชื่อม OPC UA ส่วนโปรแกรม PLC บนเครื่องมีอีกคนดูแล
ตัวเครื่องมีลูปปั๊ม 1 ลูป ประกอบด้วย Level transmitter, Flow transmitter, Control valve และปั๊มที่ขับด้วยอินเวอร์เตอร์ ควบคุมด้วย S7-1500 ที่เขียนใน TIA Portal V17
ลองกดสวิตช์ดูครับ นี่คือหัวใจของทั้งระบบ
🧪 USE_OPC = 0 คอนโทรลเลอร์คุยกับโมเดลใน Simulink เล่นแรงแค่ไหนก็ไม่มีถังล้นจริง จึงเหมาะกับการลอง test case ที่อันตราย
🏭 USE_OPC = 1 คอนโทรลเลอร์ตัวเดิม ส่ง MV และอ่าน PV ผ่าน OPC UA ของ S7-1500 ไปที่เครื่องจริง ไม่ต้องเขียนโค้ดใหม่
ทำไมเลือก OPC UA
S7-1500 มี OPC UA Server ในตัว ฝั่ง MATLAB ใช้ Industrial Communication Toolbox ต่อเข้าไป browse หา tag แล้วอ่านเขียนด้วยชื่อ tag ได้เลย
- ไม่ต้องซื้อฮาร์ดแวร์หรือ license เพิ่ม
- ไม่ต้องเขียนโปรแกรม PLC ชุดที่สองไว้คุยกับ Simulink
- ชื่อ tag เดียวกันใช้ได้ในทุกโมเดล เพราะทำ Tag contract ไว้ชัดเจนว่าแต่ละลูปมี SP, PV และ Output อะไรบ้าง
Model ก่อน Tune
ลูปสองตัวบนเครื่องนี้พฤติกรรมต่างกันมาก
| ลูป | โมเดล | พฤติกรรม |
|---|---|---|
| Level | Integrating · G(s) = K/s |
ไม่มีจุดนิ่งในตัวเอง ถ้าเข้ามากกว่าออก ถังก็จะเต็มไปเรื่อย ๆ |
| Flow | FOPDT · G(s) = K·e^(−θs)/(τs + 1) |
ตอบสนองเร็ว แต่มี dead time |
ค่าพารามิเตอร์ทั้งหมดมาจาก step test บนเครื่องจริง นี่คือเหตุผลที่ค่าจูนที่หาได้ใน Simulink เอาไปใช้กับเครื่องจริงได้ ถ้าโมเดลมาจากการเดา Twin ก็จะกลายเป็นแค่เกมที่ทำให้เรามั่นใจผิด ๆ
ลองเอง: จูน PID บน Twin
ตัวจำลองด้านล่างเป็นถังแบบ Integrating ที่มี dead time แบบเดียวกับลูป Level Setpoint จะกระโดดจาก 50 % ไป 75 % ที่วินาทีที่ 10 และห้ามชน HH 85 % ค่าเริ่มต้นจูนแรงเกินไปเจตนาให้ถังล้น ลองหาค่าที่ผ่านทุกเกณฑ์ดูครับ
🧪 Step test บน Digital Twin · Tank level
ลองปรับ Kp กับ Ti ให้ผ่านทุกเกณฑ์ โดยไม่ทำให้ถังล้น
Level PV Setpoint Valve output
- ไม่ชน High-High alarm (85 %)
- Overshoot ≤ 15 %
- Settling time ≤ 150 s
สิ่งที่เห็นในตัวจำลองนี้คือเรื่องจริงของ Integrating process ครับ Kp สูงกับ Ti สั้น ทำให้ตอบสนองไว แต่ Overshoot พุ่ง ส่วนจูนอ่อนเกินไปก็ปลอดภัย แต่นิ่งช้าจนตกเกณฑ์ Settling time การหาจุดสมดุลแบบนี้ใน Twin ใช้เวลาไม่กี่นาที ถ้าไปลองบนเครื่องจริง อาจต้องเสียน้ำไปหนึ่งถัง
Cascade: จูนลูปในก่อนเสมอ
บนเครื่องจริงใช้ Level–Flow cascade ลูป Level ข้างนอกไม่ได้สั่งวาล์วเอง แต่ตั้ง Setpoint ให้ลูป Flow แล้วลูป Flow ถึงจะขับ Control valve
ลำดับที่ใช้เสมอคือ
- จูน Flow (ลูปใน) ก่อน ให้เร็วและนิ่ง
- ค่อยจูน Level (ลูปนอก) ให้ช้ากว่าลูปในชัดเจน
- ใส่ disturbance เดียวกันกับทั้ง single-loop และ cascade แล้วเทียบผลบนกราฟ
Test case ที่ควรลองใน Twin ก่อน
ส่วนนี้แหละที่ Twin คุ้มที่สุด เพราะมีบางเคสที่ไม่ควรลองกับเครื่องจริงเลย เราเขียน Test case ก่อนเขียนโค้ด แล้วไล่ทีละข้อแบบนี้
| # | Test case | ใส่อะไรเข้าไป | PLC ต้องทำอะไร | ทดสอบที่ไหน |
|---|---|---|---|---|
| 01 | Setpoint step | เปลี่ยน SP ขึ้น-ลง 25 % | ไม่ชน HH/LL, overshoot และ settling อยู่ในเกณฑ์ | Twin → เครื่องจริง |
| 02 | Disturbance | เปลี่ยน outflow หรือความเร็วปั๊มกะทันหัน | กลับเข้า SP ได้โดยไม่แกว่ง | Twin → เครื่องจริง |
| 03 | Sensor fail | PV ค้างค่าเดิม หรือหลุดช่วง 4–20 mA | ขึ้น Alarm แล้วเปลี่ยนเป็น Manual หรือ Safe output ไม่ไล่ตามค่าผิด | Twin ก่อนเท่านั้น |
| 04 | Valve stuck | MV เปลี่ยนแต่โมเดลไม่ตอบสนอง | ตรวจเจอ deviation นานเกินกำหนด แล้วแจ้ง Operator | Twin ก่อนเท่านั้น |
| 05 | Comms loss | ตัดการเชื่อม OPC UA กลางทาง | PLC ไม่ค้างค่า MV สุดท้าย มี watchdog และ fallback ที่ปลอดภัย | Twin ก่อนเท่านั้น |
| 06 | Saturation | สั่ง SP ที่ทำให้วาล์วเปิดสุด | Anti-windup ทำงาน ไม่ overshoot หนักตอนกลับมา | Twin → เครื่องจริง |
| 07 | Interlock / E-stop | กด Stop ระหว่างลูปกำลังทำงาน | ทุกอย่างเข้า Safe state ตาม Sequence of Operation | เครื่องจริง |
แถว Interlock / E-stop ต้องทดสอบกับฮาร์ดแวร์จริงเสมอ เพราะความปลอดภัยของคนต้องพิสูจน์บนวงจรจริง Twin ช่วยให้มั่นใจเรื่อง logic ได้ แต่ไม่ได้แทน Safety test
สิ่งที่ Twin มักจับได้ก่อนลงหน้างาน
ปัญหาเหล่านี้เจอบ่อยในงาน Commissioning ทั่วไป และเป็นประเภทที่ Twin ช่วยให้เจอได้เร็วมาก
- Scaling ผิดหน่วย PV เป็น 0–100 % แต่ฝั่งหนึ่งคิดเป็น 0–27648 คอนโทรลเลอร์จะเพี้ยนทันทีตั้งแต่วินาทีแรก
- ทิศทาง Action กลับด้าน Direct กับ Reverse สลับกัน วาล์วจะเปิดสวนทางกับที่ควรเป็น
- ลืม Anti-windup หลังวาล์วตันสุดแล้วกลับมา ลูปจะ overshoot แรงผิดปกติ
- Tag ไม่ตรง Contract ชื่อหรือ data type ฝั่ง PLC กับ Simulink ไม่ตรงกัน ซึ่งเจอใน Twin ได้ภายในไม่กี่วินาที
ทุกข้อนี้ถ้าไปเจอตอนเครื่องหมุนจริงต่อหน้าฝ่ายผลิต จะกลายเป็นทั้งความเสี่ยงและความเครียด แต่ถ้าเจอใน Twin มันก็เป็นแค่บรรทัดหนึ่งใน Test log ครับ
เครื่องมือแบบไหนก็เริ่มได้
ไม่จำเป็นต้องมี MATLAB เสมอไป เลือกตามงานได้เลย
- Simulink + OPC UA เหมาะกับงาน Process control ที่ต้องการโมเดลแม่น ๆ แบบชุดฝึกนี้
- Factory I/O + PLCSIM เหมาะกับงาน Sequence และ Discrete เห็นภาพเครื่องจักรเคลื่อนไหวจริง
- PLCSIM Advanced ทดสอบโปรแกรม S7-1500 ได้โดยไม่ต้องมีฮาร์ดแวร์
ตัวอย่างการใช้ Factory I/O เป็น Twin ของลูป Level กับ TIA Portal:
Checklist ก่อนบอกว่า “พร้อม FAT”
✅ Twin test พร้อมหรือยัง?
0 / 7
พร้อมลงหน้างานแล้ว 🚀
สรุป
- Twin ที่ดีมาจากข้อมูลจริง step test ก่อนแล้วค่อยสร้างโมเดล
- คอนโทรลเลอร์ตัวเดียว สวิตช์เดียว ไม่ต้องเขียนโค้ดสองชุด
- เคสอันตรายเล่นใน Twin เคส Safety พิสูจน์บนเครื่องจริง
- เขียน Test case ก่อนเขียนโค้ด แล้วไล่ทีละข้อ นี่คือการคิดเป็นระบบที่จับต้องได้
ทั้งหมดนี้ทำให้วัน Commissioning เหลือแค่การยืนยัน ไม่ใช่การลุ้นครับ ตอนต่อไปของซีรีส์คือฝั่ง Commission จะพาจูน PID บนเครื่องจริงแบบมีหลักฐาน จาก step test ไปถึง IMC λ