แก้ปัญหาเฟรม Modbus ขาดกลางทางบน MT200: ตั้ง GapTime, Bufsize, FrameLen, FrameTime และ Tag 0x55/0xAA | VR Automation

แก้ปัญหาเฟรม Modbus ขาดกลางทางบน MT200: ตั้ง GapTime, Bufsize, FrameLen, FrameTime และ Tag 0x55/0xAA

วันที่ 19 สิงหาคม 2569 | คู่มือใช้งาน | VR Automation

แก้ปัญหาเฟรม Modbus ขาดกลางทางบน MT200: ตั้ง GapTime, Bufsize, FrameLen, FrameTime และ Tag 0x55/0xAA

อาการที่วิศวกรระบบเจอบ่อยที่สุดเวลาแปลงพอร์ตอนุกรมขึ้นเน็ตเวิร์ก คือฝั่งเซิร์ฟเวอร์ได้ข้อมูลไม่ครบเฟรม บางครั้งได้ครึ่งเดียว บางครั้งเฟรมสองอันติดกันมาเป็นก้อนเดียว ปัญหานี้แทบไม่เกี่ยวกับสายหรือบอดเรต แต่เกี่ยวกับกลไกที่เกตเวย์ใช้ตัดสินว่า “เฟรมหนึ่งจบตรงไหน” เนื่องจาก Modbus RTU ไม่มีไบต์เริ่มต้นหรือไบต์ปิดท้าย แต่ใช้ช่วงเงียบบนบัสเป็นตัวแบ่งเฟรมแทน เกตเวย์ MT200 จึงมีพารามิเตอร์สำหรับควบคุมเรื่องนี้อยู่หลายตัว บทความนี้อธิบายทั้งสามโหมดพร้อมค่าที่ตั้งได้จริงตามคู่มือ

โหมดที่ 1 — Free Framing แบ่งเฟรมด้วยช่วงเงียบ

โหมดนี้เป็นค่าเริ่มต้น เกตเวย์จะตรวจช่วงเวลาระหว่างสองไบต์ที่ติดกันตลอดเวลา ถ้าช่วงเวลานั้นมากกว่าค่าที่ตั้งไว้ ถือว่าเฟรมจบแล้วและส่งต่อออกช่องซ็อกเก็ตทันที ถ้ายังไม่เกิน จะรับข้อมูลต่อไปจนกว่าจะเต็มบัฟเฟอร์

ค่าช่วงเวลานี้ตั้งด้วย UART/Buf/GapTime ค่าเริ่มต้นคือ 50 ms และปรับได้ในช่วง 10–1000 ms คู่มือระบุคำเตือนสำคัญไว้ว่า ถ้าตั้งไว้ต่ำถึง 10 ms แต่ไมโครคอนโทรลเลอร์ฝั่งผู้ใช้ไม่สามารถรับประกันได้ว่าจะส่งไบต์ถัดไปภายใน 10 ms ข้อมูลจะถูกตัดกลางเฟรม ซึ่งคืออาการเฟรมขาดที่เจอกันบ่อย

ส่วนขนาดบัฟเฟอร์ตั้งด้วย UART/Buf/Bufsize ค่าเริ่มต้น 512 ไบต์ ช่วงที่ตั้งได้คือ 32–8192 ไบต์ คู่มืออธิบายว่าถ้าข้อมูลที่รับมามากกว่าค่านี้ ข้อมูลชุดนั้นจะถูกอัปโหลดเป็นหนึ่งเฟรมและส่วนที่เหลือถูกเก็บไว้ในบัฟเฟอร์ต่อ พารามิเตอร์นี้ต้องรีสตาร์ตจึงจะมีผล ต่างจาก GapTime ที่มีผลทันที

โหมดที่ 2 — Automatic Framing สำหรับเฟรมความยาวคงที่

ถ้าข้อมูลบนพอร์ตอนุกรมมีความยาวคงที่ทุกเฟรม การเปิดโหมดประกอบเฟรมอัตโนมัติจะให้ประสิทธิภาพการส่งต่อสูงที่สุด เปิดใช้โดยตั้ง UART/Proto เป็น Frame แล้วกำหนดสองพารามิเตอร์

UART/Frame/FrameLen คือความยาวเฟรมที่ใช้ทริกเกอร์ เมื่อเกตเวย์รับข้อมูลครบตามจำนวนไบต์ที่กำหนดจะประกอบเป็นเฟรมและส่งออกเน็ตเวิร์กทันที ค่าเริ่มต้น 8 ไบต์ ช่วงที่ตั้งได้ 8–1400 ไบต์

UART/Frame/FrameTime คือเวลาที่ใช้ทริกเกอร์ หากภายในเวลานี้ข้อมูลที่รับได้ยังไม่ครบตามความยาวที่ตั้งไว้ เกตเวย์จะส่งเท่าที่มีออกไปก่อน ค่าเริ่มต้น 100 ms ช่วงที่ตั้งได้ 100–10000 ms ทั้งสองค่ามีผลทันทีหลังตั้งค่า

💡 Pro Tip: มาตรฐาน Modbus RTU กำหนดช่วงเงียบระหว่างเฟรมไว้ที่ 3.5 เท่าของเวลาส่งหนึ่งอักขระ ซึ่งที่ 9600 บอดจะอยู่ราว 3.6 ms เท่านั้น ค่า GapTime เริ่มต้น 50 ms ของ MT200 จึงกว้างกว่ามากและปลอดภัยสำหรับอุปกรณ์ส่วนใหญ่ ควรลดค่านี้ลงก็ต่อเมื่อต้องการรอบโพลลิงถี่จริง ๆ และควรลดทีละขั้น เช่น 50 → 30 → 20 ms พร้อมเฝ้าดูอัตราการเกิด CRC error ที่ฝั่งมาสเตอร์ทุกครั้ง

โหมดที่ 3 — Tag กรองเฉพาะข้อมูลที่ต้องการ

เมื่อเปิดฟังก์ชัน Tag ด้วย UART/Frame/Tag Enable เกตเวย์จะส่งออกเน็ตเวิร์กเฉพาะข้อมูลที่อยู่ระหว่างไบต์หัวแท็กกับไบต์ท้ายแท็กเท่านั้น ข้อมูลที่อยู่ก่อนหัวแท็กและหลังท้ายแท็กจะถูกกรองทิ้ง

ค่าเริ่มต้นของหัวแท็กคือ 0x55 และท้ายแท็กคือ 0xAA ทั้งคู่เป็นข้อมูลไบต์เดียว ฟังก์ชันนี้เหมาะมากกับอุปกรณ์เก่าที่พ่นข้อมูลขยะหรือข้อความสถานะปนออกมากับข้อมูลจริงตลอดเวลา เพราะช่วยให้เซิร์ฟเวอร์ปลายทางได้รับเฉพาะเพย์โหลดที่ต้องการ ไม่ต้องเขียนโค้ดกรองเองที่ฝั่งเซิร์ฟเวอร์

เลือกโปรโตคอลพอร์ตอนุกรมให้ถูกงาน

คำสั่ง UART/Proto กำหนดวิธีที่เกตเวย์จัดการข้อมูลพอร์ตอนุกรม รองรับ 3 ค่า

NONE คือค่าเริ่มต้น ทำงานแบบส่งผ่านโปร่งใส ไม่แปลงข้อมูลใด ๆ เหมาะกับโปรโตคอลเฉพาะทางที่เซิร์ฟเวอร์ปลายทางเข้าใจอยู่แล้ว

Modbus แปลง Modbus RTU เป็น Modbus TCP ซึ่งเป็นค่าที่ควรใช้เมื่อฝั่งบนเป็น SCADA หรือ HMI ที่พูด Modbus TCP โดยตรง เพราะเกตเวย์จะจัดการเรื่องหัวเฟรม MBAP และการตัด CRC ให้เอง

Frame เปิดโหมดประกอบเฟรมอัตโนมัติตามที่อธิบายไว้ข้างต้น

นอกจากนี้ยังมีการควบคุมการไหลของข้อมูล ตั้งด้วย UART/FlowCtrl ซึ่งค่าเริ่มต้นคือ Half-Duplex หมายถึงเปิดโหมดครึ่งดูเพล็กซ์สำหรับ RS485 โดยใช้ขา UART0_RTS ควบคุมชิป RS485 คู่มือระบุว่าฟังก์ชัน RS485 เปิดใช้งานโดยค่าเริ่มต้น และการควบคุมการไหลด้วยซอฟต์แวร์มีลำดับความสำคัญสูงกว่าฮาร์ดแวร์ โดยใช้ Xon เริ่มต้น 0x11 และ Xoff เริ่มต้น 0x13

พารามิเตอร์ คำสั่ง CLI ค่าเริ่มต้น ช่วงที่ตั้งได้ มีผลเมื่อ
ช่วงเงียบแบ่งเฟรม UART/Buf/GapTime 50 ms 10–1000 ms ทันที
ขนาดบัฟเฟอร์ UART/Buf/Bufsize 512 ไบต์ 32–8192 ไบต์ หลังรีสตาร์ต
ความยาวเฟรมทริกเกอร์ UART/Frame/FrameLen 8 ไบต์ 8–1400 ไบต์ ทันที
เวลาทริกเกอร์เฟรม UART/Frame/FrameTime 100 ms 100–10000 ms ทันที
หัวแท็ก / ท้ายแท็ก UART/Frame/Tag 0x55 / 0xAA ไบต์เดียว ทันที
บอดเรต UART/Baudrate 115200 300 ถึง 460800 ทันที
โปรโตคอลพอร์ตอนุกรม UART/Proto NONE NONE / Modbus / Frame ทันที
ตารางสรุป uart framing gaptime mt200
พารามิเตอร์ประกอบเฟรมพอร์ตอนุกรม MT200 — ค่าอ้างอิงจากคู่มือผู้ผลิต

การนำไปใช้งานในอุตสาหกรรม

  • งานอ่านมิเตอร์ไฟฟ้าผ่าน RS485 — ตั้ง Proto เป็น Modbus แล้วปล่อย GapTime ที่ค่าเริ่มต้น จะได้เฟรมครบและ SCADA อ่านได้ตรง
  • อุปกรณ์ชั่งน้ำหนักที่ส่งข้อความยาวคงที่ — ใช้โหมด Automatic Framing ตั้ง FrameLen ให้ตรงกับความยาวข้อความ ทำให้ส่งต่อได้เร็วที่สุดโดยไม่ต้องรอครบ GapTime
  • เครื่องเก่าที่พ่นข้อความสถานะปนมาตลอด — เปิดฟังก์ชัน Tag แล้วกำหนดหัวและท้ายให้ตรงกับเพย์โหลดจริง เซิร์ฟเวอร์จะได้ข้อมูลสะอาดโดยไม่ต้องเขียนตัวกรอง

ดูสินค้าในหมวดที่เกี่ยวข้องได้ที่ เกตเวย์ RS485 เป็นอีเทอร์เน็ตและอุปกรณ์เครือข่าย หรือเลือกชมสินค้าทั้งหมดที่ ร้านค้า VR Automation

คำถามที่พบบ่อย (FAQ)

ตั้ง GapTime ต่ำสุด 10 ms ได้เลยไหมเพื่อให้เร็วขึ้น

ตั้งได้แต่ไม่แนะนำให้ทำโดยไม่ทดสอบ คู่มือเตือนไว้ตรง ๆ ว่าถ้าไมโครคอนโทรลเลอร์ฝั่งอุปกรณ์ไม่สามารถรับประกันการส่งไบต์ถัดไปภายใน 10 ms ข้อมูลพอร์ตอนุกรมอาจถูกตัดกลางเฟรม ควรลดทีละขั้นและตรวจอัตราความผิดพลาดควบคู่กันเสมอ

ต่างกันอย่างไรระหว่าง Bufsize กับ FrameLen

Bufsize คือขนาดพื้นที่พักข้อมูลของพอร์ตอนุกรม ทำหน้าที่เป็นเพดานว่าเฟรมหนึ่งใหญ่ได้แค่ไหนก่อนถูกบังคับส่ง ส่วน FrameLen คือความยาวที่ใช้ทริกเกอร์การประกอบเฟรมในโหมดอัตโนมัติ ซึ่งจะทำงานก็ต่อเมื่อตั้ง Proto เป็น Frame เท่านั้น

เปิดฟังก์ชัน Tag แล้วข้อมูลหายไปเลย เกิดจากอะไร

ให้ตรวจว่าไบต์หัวแท็กและท้ายแท็กที่ตั้งไว้ตรงกับข้อมูลจริงหรือไม่ เพราะเมื่อเปิดฟังก์ชันนี้ ข้อมูลที่ไม่มีทั้งหัวและท้ายแท็กจะถูกกรองทิ้งทั้งหมด ค่าเริ่มต้นคือหัว 0x55 และท้าย 0xAA ซึ่งอุปกรณ์ส่วนใหญ่ไม่ได้ใช้ค่านี้

สรุป

ปัญหาเฟรมขาดหรือเฟรมติดกันบนเกตเวย์อนุกรมแทบทั้งหมดแก้ได้ที่พารามิเตอร์สามกลุ่มนี้ กลุ่มแรกคือ GapTime กับ Bufsize สำหรับโหมดแบ่งเฟรมด้วยช่วงเงียบ กลุ่มที่สองคือ FrameLen กับ FrameTime สำหรับข้อมูลความยาวคงที่ และกลุ่มที่สามคือ Tag สำหรับกรองเฉพาะเพย์โหลดที่ต้องการ เลือกโหมดให้ตรงกับพฤติกรรมของอุปกรณ์ปลายทาง แล้วตั้ง Proto ให้ถูก จะได้ข้อมูลครบเฟรมโดยไม่ต้องไปแก้โค้ดที่ฝั่งเซิร์ฟเวอร์เลย

แหล่งข้อมูลและมาตรฐานอ้างอิง

  1. Catalog: Mortise and tenon series product software functions_20250312.pdf (75 หน้า) — VR Automation (เอกสารเทคนิคจากผู้ผลิต)
  2. PLC Programming Blog — Modbus RTU Protocol Explained: Frames, Timing and Wiring — อ้างอิงหลักการแบ่งเฟรม Modbus RTU ด้วยช่วงเงียบบนบัส
  3. Industrial Monitor Direct — Modbus-RTU Silent Interval Calculation: 3.5 Character Times — อ้างอิงการคำนวณช่วงเงียบ 3.5 อักขระและตัวเลขที่ 9600 บอด
  4. MinimalModbus — Serial communication documentation — อ้างอิงพฤติกรรมช่วงเวลาระหว่างอักขระบนลิงก์อนุกรม
ติดต่อ VR Automation

สนใจ เกตเวย์ MT200 สำหรับงาน Modbus RTU และ RS485?

VR Automation จำหน่ายและให้บริการติดตั้ง พร้อมทีมช่างผู้เชี่ยวชาญ

โทรสอบถามราคา: 083-848-8314

อีเมล: [email protected]

Line: @vrautomation

vrautomation.co.th

สต๊อกกรุณาสอบถาม | รับประกันสินค้า | บริการหลังการขาย | ออกใบกำกับภาษีได้

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *