ระบบ 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
ระบบ Teaching ด้วยมือคืออะไร
แทนที่จะพิมพ์ตำแหน่งเป็นตัวเลข เราหมุนหรือลากเพลา Servo ไปยังตำแหน่งที่ต้องการด้วยมือ แล้วกดให้ระบบจำทีละ Step จากนั้นสั่งให้ Servo เดินซ้ำตามลำดับนั้น แนวคิดนี้ใช้ได้กับหลายงาน เช่น หุ่นยนต์เชื่อม หรือ Pick and Place
อุปกรณ์ในคลิป
- Samkoon GT-043-16MT หน้าจอกับ PLC ในตัวเดียว (2-in-1)
- Servo S8 750W พร้อม Drive
ตัวอย่างในคลิปเขียนโค้ดเท่าที่จำเป็น (minimal) เพื่อให้เห็นหลักการ
ตัวอย่างการใช้งาน
สอนตำแหน่ง
- สั่งรันคำสั่ง MBUS เพื่ออ่านค่า Encoder จาก Drive
- เปิดหน้าต่าง Teaching แล้วกด Start หน้าต่างจะแสดง Current step (เริ่มที่ 1) และ Current position
- ขณะที่ยังไม่ Enable Servo (เพลายังไม่ล็อก) หมุนเพลาด้วยมือ ค่า Position จะเปลี่ยนตามตำแหน่งเพลา
- หมุนไปตำแหน่งแรกแล้วกด Next เพื่อจำ Step นั้น หมุนต่อไปตำแหน่งถัดไปแล้วกด Next ซ้ำ
- ครบแล้วกด End เพื่อจบการสอน
- เลือกสูตร (P1, P2, …) ใน Recipe Selector แล้วกด Save เพื่อบันทึกตำแหน่งชุดนี้ไว้ใน HMI ผู้ใช้จะได้เลือกโปรแกรมเองได้ทีหลัง
ก่อนสอนโปรแกรมถัดไปต้อง Disable Servo ก่อน เพราะต้องหมุนเพลาด้วยมือ ในคลิปสอนโปรแกรม 1 และ 2 แบบละ 4 Step และโปรแกรม 3 แบบ 8 Step แสดงให้เห็นว่าแต่ละสูตรมีจำนวน Step ไม่เท่ากันได้ ตรวจผลการสอนได้จากหน้าข้อมูล Recipe
สั่งเดินตามที่สอน
- Enable Servo
- เลือกโปรแกรมแล้วกด Select เพื่อเขียนค่าของสูตรนั้นลง PLC
- กด Run Servo จะเดินไปทีละตำแหน่งตามที่สอน พร้อมแสดงว่ากำลังเดิน Step ไหน
การต่อสาย
Drive รุ่น R8 (CN1)
| ขา | สัญญาณ | ต่อกับ |
|---|---|---|
| 35 | PS_24V | 24V |
| 43 | PULS- | Y0 (Pulse) |
| 39 | SIGN- | Y1 |
| 9 | DI1 | Y2 (Enable ล็อก Servo) |
| 11 | COM | 24V |
| 12 | 485/A | RS485 A ของ PLC |
| 14 | 485/B | RS485 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
| ช่อง | ค่า |
|---|---|
| Baudrate | 57600 |
| Databits | 8 |
| Stopbits | 1 |
| Checkcode | NONE |
| Protocol | Modbus 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) แล้วกำหนดดังนี้
| แถว | Port | Handle code | Slave register | Slave count | Master register | TriggerMode |
|---|---|---|---|---|---|---|
| 0 | K1 | 0x03 (Read holding register) | H130C | K2 | D0 | ModbusMode_Loop |
| 1 | K1 | 0x03 (Read holding register) | H1324 | K2 | D2 | ModbusMode_Loop |
| 2 | K1 | 0x03 (Read holding register) | H1350 | K2 | D4 | ModbusMode_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
| ค่า Z0 | Address จริง |
|---|---|
| 0 | D102 |
| 1 | D103 |
| 2 | D104 |
ตำแหน่งแต่ละ Step เป็นค่า Double Word (2 Word) จึงต้องขยับ Z0 ทีละ 2 เพื่อไปที่ D102, D104, D106, …
หน่วยความจำที่ใช้ (จากโน้ตในโปรแกรม)
| Address | หน้าที่ |
|---|---|
| D8140 | Pulse ใน PLC |
| D2 | Mechanical Absolute Position จาก Servo |
| D100 | จำนวน Step ของสูตร |
| D102, D104, … | ตำแหน่งของแต่ละ Step (DWord) |
| Z0 | Index ใช้ทั้งตอนสอนและตอนสั่งเดิน |
โน้ตในโปรแกรมยังระบุว่าก่อนสอน ผู้ใช้ควร Home Servo ก่อน และโค้ดไม่ต้องกำหนดล่วงหน้าว่าจะสอนกี่ Step แต่ต้องคำนึงถึงจำนวน Step สูงสุดตอนกำหนด Recipe
ส่วนสอนตำแหน่ง
| เงื่อนไข | คำสั่ง | หน้าที่ |
|---|---|---|
| M5 (Start Teaching) | SET M6 K1 | M6 = กำลังสอน |
| M5 (Start Teaching) | MOVD D2 D6 | จำตำแหน่งตอนเริ่มสอนไว้เป็น Reference |
| M6 | SUBD D2 D6 D8 | D8 = ตำแหน่งปัจจุบันลบ Reference |
| M6 | MOVD D8 D102Z0 | เขียนค่าลงตำแหน่งของ Step ปัจจุบัน |
| M6 | DIV Z0 K2 D98 | จำนวน Step (นับจาก 0) |
| M6 | ADD 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 K1 | M11 = กำลังเดินตามลำดับ |
| M11 และ M8151 | DIV Z0 K2 D398 แล้ว ADD D398 K1 D400 | D400 = Step ปัจจุบัน (นับจาก 1) ไว้แสดงบนหน้าจอ |
| M11 และ M8151 | SUB D100 K1 D298 แล้ว MULD D298 K2 D300 | D300 = ขอบเขตของ Z0 ตามจำนวน Step |
| M11 | EDRVA D102Z0 K10000 K500 K500 Y000 Y001 | เดินไปยังตำแหน่งของ Step ปัจจุบัน |
| M11 และ M8134 ขอบขาลง | ADD Z0 K2 Z0 | ถึงตำแหน่งแล้ว ขยับไป Step ถัดไป |
M11 และ Z0 W> D300 | RST 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 length | 10 |
| Recipe total | 10 |
| Data type | 32-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
สรุปหลักการ
- ต่อสาย RS485 ระหว่าง Drive กับ PLC แล้วใช้คำสั่ง MBUS อ่าน Mechanical Absolute Position (P13-36) ออกมาให้ได้
- ตอนสอน เขียนตำแหน่งลง
D102Z0แล้วขยับ Index Z0 ทีละ 2 ทุกครั้งที่กด Next - บันทึกชุดตำแหน่งเป็น Recipe บน HMI
- ตอนเดิน ใช้ EDRVA ขับไปที่
D102Z0ขยับ Index เมื่อถึงตำแหน่ง และหยุดเมื่อ Index เกินขอบเขตตามจำนวน Step ของสูตร
บทถัดไป
ดึงข้อมูลจาก Servo Drive มาที่ PLC ผ่าน Modbus RS485
มีคำถาม? ติดต่อทีมงาน

