หน้าแรกคู่มือServoระบบ Teaching Servo ควบคุมด้วยมือ | เทคนิคสอน Servo Motor
SERVOขั้นสูง · Advanced25 นาที

ระบบ Teaching Servo ควบคุมด้วยมือ | เทคนิคสอน Servo Motor

สอน Servo ให้เดินตามลำดับด้วยการหมุนเพลาด้วยมือ อ่าน Mechanical Absolute Position (P13-36) จาก Drive ผ่าน Modbus RS485 เก็บทีละ Step ด้วย Index Z0 บันทึกเป็น Recipe บน HMI แล้วสั่งเดินซ้ำด้วย EDRVA บน Samkoon GT-043-16MT กับ Servo S8 750W

หมุนเพลา Servo ด้วยมือขณะยังไม่ Enable แล้วให้ PLC อ่าน Mechanical Absolute Position (P13-36 = H1324) จาก Drive ผ่านคำสั่ง MBUS มาเก็บทีละ Step ที่ D102Z0 โดยขยับ Index Z0 ทีละ 2 จากนั้นบันทึกเป็น Recipe บน HMI และสั่งเดินซ้ำด้วยคำสั่ง EDRVA จนครบจำนวน Step ของสูตร

อัพเดทล่าสุด: 26 ตุลาคม 2569

ชุดอุปกรณ์สำหรับบทความนี้

ราคาชุดอุปกรณ์

฿17,480

ระบบ Teaching ด้วยมือคืออะไร

แทนที่จะพิมพ์ตำแหน่งเป็นตัวเลข เราหมุนหรือลากเพลา Servo ไปยังตำแหน่งที่ต้องการด้วยมือ แล้วกดให้ระบบจำทีละ Step จากนั้นสั่งให้ Servo เดินซ้ำตามลำดับนั้น แนวคิดนี้ใช้ได้กับหลายงาน เช่น หุ่นยนต์เชื่อม หรือ Pick and Place

อุปกรณ์ในคลิป

  • Samkoon GT-043-16MT หน้าจอกับ PLC ในตัวเดียว (2-in-1)
  • Servo S8 750W พร้อม Drive

ตัวอย่างในคลิปเขียนโค้ดเท่าที่จำเป็น (minimal) เพื่อให้เห็นหลักการ

ตัวอย่างการใช้งาน

สอนตำแหน่ง

  1. สั่งรันคำสั่ง MBUS เพื่ออ่านค่า Encoder จาก Drive
  2. เปิดหน้าต่าง Teaching แล้วกด Start หน้าต่างจะแสดง Current step (เริ่มที่ 1) และ Current position
  3. ขณะที่ยังไม่ Enable Servo (เพลายังไม่ล็อก) หมุนเพลาด้วยมือ ค่า Position จะเปลี่ยนตามตำแหน่งเพลา
  4. หมุนไปตำแหน่งแรกแล้วกด Next เพื่อจำ Step นั้น หมุนต่อไปตำแหน่งถัดไปแล้วกด Next ซ้ำ
  5. ครบแล้วกด End เพื่อจบการสอน
  6. เลือกสูตร (P1, P2, …) ใน Recipe Selector แล้วกด Save เพื่อบันทึกตำแหน่งชุดนี้ไว้ใน HMI ผู้ใช้จะได้เลือกโปรแกรมเองได้ทีหลัง

ก่อนสอนโปรแกรมถัดไปต้อง Disable Servo ก่อน เพราะต้องหมุนเพลาด้วยมือ ในคลิปสอนโปรแกรม 1 และ 2 แบบละ 4 Step และโปรแกรม 3 แบบ 8 Step แสดงให้เห็นว่าแต่ละสูตรมีจำนวน Step ไม่เท่ากันได้ ตรวจผลการสอนได้จากหน้าข้อมูล Recipe

สั่งเดินตามที่สอน

  1. Enable Servo
  2. เลือกโปรแกรมแล้วกด Select เพื่อเขียนค่าของสูตรนั้นลง PLC
  3. กด Run Servo จะเดินไปทีละตำแหน่งตามที่สอน พร้อมแสดงว่ากำลังเดิน Step ไหน

การต่อสาย

Drive รุ่น R8 (CN1)

ขาสัญญาณต่อกับ
35PS_24V24V
43PULS-Y0 (Pulse)
39SIGN-Y1
9DI1Y2 (Enable ล็อก Servo)
11COM24V
12485/ARS485 A ของ PLC
14485/BRS485 B ของ PLC
เปลือกGND / PEกราวด์

ขา Enable จะใช้ Y ตัวไหนก็ได้ แต่ Pulse กับ Direction ต้องใช้ Y0–Y3 เพราะเป็น Y ที่ออก Pulse ได้ถึง 200 kHz ส่วนขา 12 กับ 14 (RS485) สำคัญที่สุดสำหรับงานนี้ เพราะต้องอ่าน Mechanical Absolute Position จาก Drive เพื่อรู้ว่าเพลาหมุนไปเท่าไรแล้ว

Drive รุ่น S8

  • รุ่น S8 มี Control pin น้อยกว่า R8 สัญญาณพื้นฐาน (Pulse, DI) ต่อที่ Terminal Block ได้เลย ไม่ต้องทำสาย Control pin แต่สัญญาณควบคุมอื่นๆ จะน้อยกว่า สำหรับงานพื้นฐานถือว่าเพียงพอ
  • RS485 อยู่ที่พอร์ต RJ45 ด้านบนของ Drive (CN3/CN4): ขา 4 = RS485+ (A) และ ขา 5 = RS485- (B)
  • ในคลิปต่อขา 4 และ 5 ของสาย LAN เข้าที่ 485A และ 485B ของ GT-043-16MT

ตั้งค่าการสื่อสาร

ตามคู่มือ Drive ค่า Baud rate เริ่มต้นของ RS485 คือ 57600 ดังนั้นใน SamSoar2022 ไปที่ Config → Project Setting → Communication แล้วตั้งพอร์ต COM 1 (485) ที่ต่อกับ Drive

ช่องค่า
Baudrate57600
Databits8
Stopbits1
CheckcodeNONE
ProtocolModbus master

PLC เป็น Master ส่วน Drive เป็น Slave ซึ่งมี Slave ID เริ่มต้นเป็น 1

สถานะบนหน้าจอ Drive

  • Prd (Position mode ready) — จ่ายไฟแล้วแต่ยังไม่ Enable เป็นสถานะที่หมุนเพลาด้วยมือได้
  • Pru — หลังสั่ง DI1 (Enable) แล้ว Servo ล็อกและพร้อมเดิน

คอยดูสถานะนี้ระหว่างสอน

อ่าน Mechanical Absolute Position ผ่าน Modbus

ข้อมูล Encoder อยู่ใน Drive ที่พารามิเตอร์ P13-36 Mechanical absolute position counting (command unit) ช่วงค่า -2147483648 ถึง 2147483647 (อ่านอย่างเดียว) ต้องอ่านพารามิเตอร์นี้เข้า PLC

แปลงเลขพารามิเตอร์เป็น Address: คงเลขกลุ่ม 13 ไว้ แล้วแปลงเลข 2 หลักท้ายจากฐาน 10 เป็นฐาน 16 คือ 36 = 0x24 จึงได้ H1324

คลิกขวาสร้าง Modbus Table (ในคลิปชื่อ servo) แล้วกำหนดดังนี้

แถวPortHandle codeSlave registerSlave countMaster registerTriggerMode
0K10x03 (Read holding register)H130CK2D0ModbusMode_Loop
1K10x03 (Read holding register)H1324K2D2ModbusMode_Loop
2K10x03 (Read holding register)H1350K2D4ModbusMode_Loop

แถวที่ใช้สอนจริงมีแค่ H1324 → D2 อ่าน 2 Word เพราะเป็นค่า Double Word ส่วน H130C (จำนวน Pulse ที่ Drive ได้รับจาก PLC) และ H1350 (Total Run Time) เป็นข้อมูลเสริม ไม่ต้องใช้

จากนั้นเขียนคำสั่ง MBUS โดยระบุ Com: K1, Table: servo, Code: D5000 (MBUS Error Code) และ Index: D5001 (MBUS Command Index) เมื่อ Monitor จะเห็น Index วนเป็น Loop และค่าตำแหน่งเข้ามาที่ D2

ส่วนนี้ไม่ได้อยู่ในคลิป: นับ Address จากเท่าไร

Address นับจาก 0 — H1324, H130C และ H1350 เป็น Address ใน Frame Modbus ตามคู่มือ Drive (นับจาก 0) ใส่ในช่อง Slave register ของ Modbus Table ได้ตรงๆ เป็นแนวทางทั่วไปของ Factonation

โครงสร้างโปรแกรม PLC

คำสั่งพื้นฐาน (ไม่เกี่ยวกับการสอนโดยตรง)

ส่วนนี้ทำไว้ช่วยปรับตำแหน่งเพลาทางโปรแกรม เช่น ใช้ Jog แทนการหมุนด้วยมือ

  • M1 (Enable Servo) → OUT Y002 (ต่อ DI1)
  • M2 (Jog Fwd) → JOG Freq K10000, T K500, Pulse Y000, Direction Y001 และ M3 (Jog Rev) ใช้ Freq K-10000
  • EDRVI (เดินแบบ Increment ตามจำนวน Pulse ใน D7500) และ EDRVA (เดินแบบ Absolute) ใช้ Freq K10000, Accelerate K500, Decelerate K500, Pulse Y000, Direction Y001

แนวคิด Index Z

Address ที่ต่อท้ายด้วย Z จะเลื่อนตามค่าใน Z เช่น D102Z0

ค่า Z0Address จริง
0D102
1D103
2D104

ตำแหน่งแต่ละ Step เป็นค่า Double Word (2 Word) จึงต้องขยับ Z0 ทีละ 2 เพื่อไปที่ D102, D104, D106, …

หน่วยความจำที่ใช้ (จากโน้ตในโปรแกรม)

Addressหน้าที่
D8140Pulse ใน PLC
D2Mechanical Absolute Position จาก Servo
D100จำนวน Step ของสูตร
D102, D104, …ตำแหน่งของแต่ละ Step (DWord)
Z0Index ใช้ทั้งตอนสอนและตอนสั่งเดิน

โน้ตในโปรแกรมยังระบุว่าก่อนสอน ผู้ใช้ควร Home Servo ก่อน และโค้ดไม่ต้องกำหนดล่วงหน้าว่าจะสอนกี่ Step แต่ต้องคำนึงถึงจำนวน Step สูงสุดตอนกำหนด Recipe

ส่วนสอนตำแหน่ง

เงื่อนไขคำสั่งหน้าที่
M5 (Start Teaching)SET M6 K1M6 = กำลังสอน
M5 (Start Teaching)MOVD D2 D6จำตำแหน่งตอนเริ่มสอนไว้เป็น Reference
M6SUBD D2 D6 D8D8 = ตำแหน่งปัจจุบันลบ Reference
M6MOVD D8 D102Z0เขียนค่าลงตำแหน่งของ Step ปัจจุบัน
M6DIV Z0 K2 D98จำนวน Step (นับจาก 0)
M6ADD D98 K1 D100จำนวน Step (นับจาก 1) เก็บที่ D100
M7 (Next) ขอบขาขึ้นADD Z0 K2 Z0ขยับ Index ไป Step ถัดไป
M8 (End)MOV K0 Z0 และ RST M6 K1คืน Index เป็น 0 และจบการสอน

เหตุผลที่จำค่าเริ่มต้นไว้ที่ D6 เพราะก่อนเริ่มสอนเพลาอาจถูกหมุนไปอยู่ตรงไหนก็ได้ โปรแกรมนี้จึงเก็บตำแหน่งเป็น "ระยะที่หมุนไปจากจุดเริ่มสอน" ถ้าต้องการจุดอ้างอิงแบบอื่นก็ปรับโค้ดส่วนนี้ได้

ตัวอย่างในคลิป: กด Next แล้ว Z0 เปลี่ยนเป็น 2 ค่าที่หมุนต่อจะไปเขียนที่ D104 แทน กดไปเรื่อยๆ Index จะเลื่อนจาก D102 เป็น D104, D106, D108 เมื่อกด End ระบบ MOV K0 ไปที่ Z0 แล้ว Reset M6 ตำแหน่งทั้งหมดจะอยู่ใน PLC พร้อมให้ผู้ใช้เลือกสูตรแล้วกด Save

ส่วนสั่งเดินตามลำดับ

เงื่อนไขคำสั่งหน้าที่
M10 (Start Run Sequence)SET M11 K1M11 = กำลังเดินตามลำดับ
M11 และ M8151DIV Z0 K2 D398 แล้ว ADD D398 K1 D400D400 = Step ปัจจุบัน (นับจาก 1) ไว้แสดงบนหน้าจอ
M11 และ M8151SUB D100 K1 D298 แล้ว MULD D298 K2 D300D300 = ขอบเขตของ Z0 ตามจำนวน Step
M11EDRVA D102Z0 K10000 K500 K500 Y000 Y001เดินไปยังตำแหน่งของ Step ปัจจุบัน
M11 และ M8134 ขอบขาลงADD Z0 K2 Z0ถึงตำแหน่งแล้ว ขยับไป Step ถัดไป
M11 และ Z0 W> D300RST M11 K1 และ MOV K0 Z0เดินครบ Step สุดท้ายแล้ว หยุดและคืน Index
M12 (RST Sequence)RST M11 K1หยุดการเดิน

EDRVA ตอบสนองต่อค่า Frequency และตำแหน่งเป้าหมายแบบ Real-time พอค่าใน D102Z0 เปลี่ยนเพราะ Z0 ขยับ มันก็จะขับไปตำแหน่งใหม่ทันที เมื่อขับถึงตำแหน่ง M8134 (Pulse output ของ Y000) จะเปลี่ยนจาก ON เป็น OFF ขอบขาลงนี้ใช้ขยับ Index

ตัวอย่างขอบเขต: สูตร P1 มี 4 Step จึงได้ D300 = (4 − 1) × 2 = 6 ส่วนสูตรที่ D100 = 6 จะได้ D300 = 10

ฝั่งหน้าจอ HMI

Recipe

สร้าง Recipe ใน HMI (ในคลิปชื่อ MovesRecipe)

ช่องค่า
Recipe length10
Recipe total10
Data type32-Bit Signed Int
Write Recipe To PLCติ๊ก, Write address D100
Read Recipe Form PLCติ๊ก, Read Address Identical to Write Address (D100)

ข้อมูลทุกตำแหน่งไม่ได้กำหนดตายตัวไว้ใน HMI ผู้ใช้เป็นคนสอนเอง ระวังเรื่องหน่วยความจำ: ข้อมูลแต่ละตัวเป็น Double Word ใช้ 2 Word ตั้ง 10 × 10 ก็จองไป 200 Word (RW1–RW200) ถ้าอยากให้สอนได้ถึง 100 Step ก็จะมีจำนวนสูตรเยอะมากไม่ได้ เลือกค่าที่เหมาะสม ไม่มากหรือน้อยเกินไป

หน้าต่าง Teaching

  • ปุ่ม Start, Next และ End สั่ง M5, M7 และ M8
  • Bit Lamp "Teaching" Monitor Address M6 ให้ผู้ใช้รู้ว่ากำลังสอนอยู่
  • Current step แสดงค่า D100
  • Current position ใช้ Address D102 แบบ Offset ด้วย Z0
  • Recipe Selector กับปุ่ม Save เป็น Function Button แบบ Recipe reading and save

หน้าสั่งเดิน

  • Recipe Selector กับปุ่ม Select เป็น Function Button แบบ Write Recipe To PLC เลือกสูตรแล้วกดเพื่อเขียนค่า D100, D102, … ลง PLC
  • ปุ่มสั่งเดิน (M10) ไฟแสดงสถานะว่ากำลังเดิน และตัวเลขแสดง Step ปัจจุบัน (D400)
  • ตรวจข้อมูลที่บันทึกไว้ได้ด้วย Recipe Data Display

สรุปหลักการ

  1. ต่อสาย RS485 ระหว่าง Drive กับ PLC แล้วใช้คำสั่ง MBUS อ่าน Mechanical Absolute Position (P13-36) ออกมาให้ได้
  2. ตอนสอน เขียนตำแหน่งลง D102Z0 แล้วขยับ Index Z0 ทีละ 2 ทุกครั้งที่กด Next
  3. บันทึกชุดตำแหน่งเป็น Recipe บน HMI
  4. ตอนเดิน ใช้ EDRVA ขับไปที่ D102Z0 ขยับ Index เมื่อถึงตำแหน่ง และหยุดเมื่อ Index เกินขอบเขตตามจำนวน Step ของสูตร

บทถัดไป

ดึงข้อมูลจาก Servo Drive มาที่ PLC ผ่าน Modbus RS485

2 นาทีปานกลาง · Intermediate