ปกติแล้วการเชื่อมต่อระหว่าง HMI กับ PLC นั้นจะถือว่า HMI เป็น Master (หรือ Client ในระบบ Ethernet) และ PLC เป็น Slave (หรือ Server ในระบบ Ethernet) นั่นคือ โดยปกติแล้วจอ HMI จะสามารถอ่านเขียนข้อมูลใน PLC ได้ แต่ในทางกลับกัน PLC จะไม่สามารถทำอะไรกับ HMI ได้เลย
ดังนั้นด้วยการเชื่อมต่อระหว่าง PLC กับ HMI โดยพื้นฐานแล้ว PLC จะไม่สามารถทำการเขียนหรือสั่งงานให้ HMI เปลี่ยนหน้าจอได้เลยหาก HMI ไม่ได้มีการเตรียมพื้นที่พิเศษเพื่อการนี้โดยเฉพาะ
เทคนิคการให้ PLC สามารถสั่งเปลี่ยนหน้าจอนั้นทำได้หลายวิธีดังที่จะกล่าวในบทความนี้ โดยจะถือว่าผู้ใช้งานสามารถสร้าง Connection ระหว่างจอ HMI ไปหา PLC ได้แล้ว หรือก็คือจอสามารถสื่อสารกับ PLC ได้แล้วนั่นเอง
บทความนี้จะถือว่า HMI Connection ได้ถูกสร้างเอาไว้แล้ว
1. ที่ PLC ให้ทำการสร้าง PLC tag ที่จะใช้เปลี่ยนหน้าขึ้นมาก่อน
2. ทำการ link tag นี้ไปหา HMI tag แล้วตั้ง Properties ให้ Acquisition mode เป็นแบบ Cyclic continuous
เหตุผลที่ต้องตั้ง Acquisition mode เป็น Cyclic continuous ก็เพราะเราต้องการให้ tag นี้ถูก update ค่าตลอดเวลา แม้ว่าจะไม่มีค่าของ tag นี้วางไว้ที่หน้าจอก็ตาม
3. จากนั้นให้ตั้ง Event ของ tag นี้ให้เป็นแบบ Value change -> ActivateScreenByNumber แล้วเลือก tag ที่ใช้เปลี่ยนหน้าจอในส่วนของ Screen number
ด้วยวิธีนี้ เมื่อ tag MyScreenData มีการเปลี่ยนค่า ก็จะส่งผลให้หน้าจอเปลี่ยนไปยังหน้านั้นๆด้วยเช่นกัน แต่หากค่าที่เปลี่ยนนั้นเป็นค่าที่ไม่มีหน้าจออยู่จริง ก็จะไม่กระทบอะไรกับหน้าจอโดยจอจะค้างอยู่ที่หน้าล่าสุดเอาไว้
และหากหน้าจอมีการเปลี่ยนหน้าโดยการที่เรากดหน้าจอตามปกติ ค่าของหน้าจอปัจุจุบันก็จะไม่ส่งผลถึง tag ที่เราตั้งเอาวไว้ (MyScreenData) ใดๆทั้งสิ้น
จึงเห็นได้ว่าวิธีนี้ใช้งานได้ค่อนข้างง่าย แต่จะเปลี่ยนหน้าได้ก็ต่อเมื่อ tag ที่ใช้มีการเปลี่ยนแปลงค่าเท่านั้นเพราะเราใช้ Event ที่เป็น Value change
ตัวอย่างที่จะไม่เกิดการเปลี่ยนหน้าคือสมมติว่าตอนนี้ tag เปลี่ยนค่าเป็น 3 ก็จะทำให้หน้าจอเปลี่ยนไปหน้า 3 จากนั้นเราทำการกดเปลี่ยนหน้าที่หน้าจอไปหน้าอื่นๆแล้ว PLC จะไม่สามารถสั่งให้ HMI กลับมาหน้า 3 ได้อีกเพราะค่าล่าสุดของ PLC ยังค้างอยู่ที่หน้า 3 นั่นเอง Event Value change จึงไม่เกิดขึ้นและจึงไม่สามารถสั่งเปลี่ยนหน้าจอได้
จริงๆแล้ววิธี Area Pointer นี้เป็นวิธีที่เป็นทางการที่สุดเพื่อที่จะให้ PLC สามารถเปลี่ยนหน้าจอ HMI ได้ แต่ก็ต้องมีการตั้งค่าและทราบถึงเงื่อนไขการใช้งานมากกว่าวิธีแรกด้วย
1. ในหัวข้อ Connections ของหน้าจอ ให้เรา Enable Job mailbox ในส่วนของ Area pointer แล้วเลือกตั้ง Address มาตัวหนึ่งโดยสังเกตว่า Job mailbox จะมี Length = 4 นั่นหมายความว่าหากเราเลือก address เป็น %MW80 ดังรูป จะกินพื้นที่ทั้งหมด 4 words คือ %MW80, %MW82, %MW84 และ %MW86 นั่นเอง
2. จริงๆแล้วหากต้องการเข้าใจว่า Job mailbox ใช้ทำอะไรทั้งหมดได้บ้าง เราต้องศึกษาจากหัวข้อ Area pointer อย่างละเอียดเสียก่อน แต่กรณีนี้เพื่อความรวดเร็วขออนุญาตข้ามรายละเอียดส่วนอื่นไปก่อน โดยหากเราต้องการใช้ Job mailbox เพื่อเปลี่ยนหน้า ให้เรากำหนด word แรกเป็นค่า 51 เท่านั้น และ word ถัดไปจะเป็นตัวระบุเพื่อเปลี่ยนหน้านั่นเอง
3. เมื่อเราทำการใส่ค่าให้ตัวแปรให้เหมาะสมตามเงื่อนไขดังที่กล่าวมาแล้ว หน้าจอ HMI ก็จะเปลี่ยนไปหน้าที่เราต้องการได้นั่นเอง
สังเกตว่า word แรกจะ fix ค่าที่ 51 และ word ที่สองใช้เป็นตัวเปลี่ยนหน้า
ข้อดีของการใช้วิธีนี้คือเมื่อเราทำการใส่ค่าให้กับ Job mailbox ทั้ง 2 word แล้ว ค่าของทั้ง 2 word จะเปลี่ยนกลับเป็น 0 เมื่อทำการเปลี่ยนหน้าสำเร็จ นั่นหมายความว่าจะไม่เกิดเหตุการณ์ที่ไม่สามารถเปลี่ยนหน้าจอได้ดังกรณีแรก เพราะเมื่อค่าในทั้ง 2 word เป็น 0 แล้ว เราก็สามารถใส่ค่าใดๆให้ 2 word นี้อีกครั้งทำให้สามารถเปลี่ยนไปหน้าใดก็ได้ แม้ว่าหน้าจอจะถูกเปลี่ยนหน้าจากการกดที่หน้าจอไปแล้วก็ตาม
แต่ข้อเสียของวิธีนี้คือ เราจำเป็นต้องมีการจองพื้นที่ใช้งาน Job mailbox ถึง 4 word และต้องมีการศึกษาการใช้งาน Job mailbox ด้วยว่าทำอย่างไรจึงจะใช้งาน Job mailbox ให้เปลี่ยนหน้าได้
จากการที่เราใช้งานให้ PLC มาสั่งเปลี่ยนหน้าจอ HMI ทั้งสองแบบแล้วนั้น เราสามารถสั่งให้ HMI เปลี่ยนหน้าได้ก็จริง แต่จะเห็นว่าตอนนี้ PLC จะยังไม่รู้เลยว่าตอนนี้ HMI อยู่ที่หน้าไหนแล้ว ซึ่งในส่วนนี้ต้องอาศัยการตั้งค่าเพิ่มเติมด้วยเช่นเดียวกัน
โดยการตั้งค่านี้จะอยู่ในส่วนของ Connections -> Global area pointer of HMI device แล้วทำการตั้งค่าในส่วนของ Screen number
รายละเอียดของการใช้งาน Screen number ทั้ง 5 word แสดงดังรูปข้างล่างนี้
แม้ว่าจะกินพื้นที่ 5 words แต่หากเราต้องการดูหน้าจอปัจจุบัน เราจะดูแค่ word ที่ 2 ก็พอ ดังนั้นจากการตั้งค่าของเราที่เริ่มที่ %MW90 ค่าหน้าจอปัจจุบันจะอยู่ที่ %MW92 นั่นเอง
![]() |
![]() |
![]() |