PLC
เริ่มต้น
16 นาที

Encoder และ High Speed Counter

เรียนรู้การเชื่อมต่อและเขียนโปรแกรม Encoder กับ PLC ใช้ High Speed Counter อ่านตำแหน่ง ทิศทางการหมุน ความเร็วรอบ พร้อมตัวอย่างโค้ด Ladder

อัพเดทล่าสุด: 1/2/2569

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

฿3,690

การใช้งาน Encoder กับ High Speed Input ใน PLC

Encoder เป็นเซนเซอร์ที่มีความสำคัญมากในระบบอัตโนมัติอุตสาหกรรม โดยเฉพาะ Rotary Encoder ที่นิยมใช้กันอย่างแพร่หลายในโรงงาน สามารถติดตั้งกับอุปกรณ์ที่หมุนได้ เช่น มอเตอร์ พัลเลย์ สายพาน เพื่อให้ข้อมูลสำคัญ 3 อย่าง คือ ตำแหน่ง ทิศทางการหมุน และความเร็วรอบ

หิลลักการทำงานของ A-B Phase Encoder

โครงสร้างภายใน

  • มีแผ่น disk ที่ติดกับแกนหมุน
  • ระบบดักจับสัญญาณแสงที่ผ่านรูบนแผ่น disk
  • รูบนแผ่น disk เหลื่อมกันอยู่ 90 องศา

การสร้างสัญญาณ A-B Phase

เมื่อหมุน Encoder สัญญาณ A และ B จะเหลื่อมกัน 90 องศา ทำให้ PLC สามารถ:

  • นับค่าสัญญาณขึ้นลง ได้ด้วยตัวเอง
  • ระบุทิศทางการหมุน จากลำดับสัญญาณ:
    • หมุนไป: สัญญาณ A มาก่อน B
    • หมุนกลับ: สัญญาณ B มาก่อน A

การเชื่อมต่อ Encoder กับ PLC

การต่อสายไฟ

Encoder A-B Phase มีสายทั้งหมด 5 เส้น:

ขา A     → X0 (Input ของ PLC)
ขา B     → X1 (Input ของ PLC)
24V      → แหล่งจ่ายไฟ 24V
0V       → กราวด์
Shield   → สายกราวด์

การกำหนด Counter

  • ใช้ Counter C251 สำหรับ Channel X0-X1
  • อ้างอิงจากตารางการกำหนด Channel ของ PLC

การเขียนโปรแกรมพื้นฐาน

1. การตั้งค่า High Speed Counter

HCNT — High Speed Counter (Encoder)
CV251 = Counter Value Register 32-bit. K2000 = Preset Value
N0
M400 ON → เริ่มนับ pulse จาก Encoder (X0/X1)
M400HCNTCV251, K2000
Network count: 1, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

คำอธิบาย:

  • HCNT: คำสั่ง High Speed Counter
  • CV251: Counter Value Register (32-bit) ที่ใช้อ่านค่าจาก Encoder — ใช้ CV251 ใน operand ของ HCNT/MOVD/DTOF ส่วน C251 (ไม่มี V) คือ contact/bit
  • K2000: Set Value (ตัวอย่าง)
  • M400: Contact เปิด/ปิดการทำงาน

2. การคำนวณตำแหน่ง (Position)

คำนวณตำแหน่งจริง (มม.)
แปลง Counter value → Float แล้วคูณด้วยความละเอียด (D302)
N0
CV251 (32-bit int) → D402 (Float)
M400DTOFCV251, D402
D404 = D402 × D302 (pulses × mm/pulse)
M400MULFD402, D302, D404
Network count: 1, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

ตัวแปรที่ใช้:

  • D302: ค่าความละเอียด (เช่น 0.1 มม./pulse)
  • D402: ค่า Pulse ในรูปแบบ Float
  • D404: ตำแหน่งจริง (มม.)

การหาทิศทางการหมุน

วิธีการตรวจสอบทิศทาง

ตรวจทิศทางการหมุน
ใช้ M8159 (100ms pulse) เพื่อ sample Counter ทุก 100ms แล้วเทียบ current กับ previous
N0
M403 ON + M8159 falling edge → เก็บค่าปัจจุบันที่ D406
M403M8159MOVDCV251, D406
M403 ON + M8159 rising edge → copy D406 ไป D408 (previous)
M403M8159MOVDD406, D408
D406 > D408 → Clockwise → SET M404
D406 > D408SETM404, K1
D406 > D408 → RST M405 ด้วย
D406 > D408RSTM405, K1
D406 < D408 → Counterclockwise → SET M405
D406 < D408SETM405, K1
D406 < D408 → RST M404 ด้วย
D406 < D408RSTM404, K1
Network count: 1, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

คำอธิบาย:

  • M8159: Special Register ที่ติด-ดับทุก 100ms
  • D406: Current Pulse
  • D408: Previous Pulse
  • M404: Flag หมุนไป
  • M405: Flag หมุนกลับ

การคำนวณความเร็ว (RPM)

สูตรคำนวณ RPM

RPM = (Pulse × 60) ÷ (PPR × Time)

ตัวอย่างการคำนวณ:

  • Pulse ใน 100ms = 20 pulse
  • PPR (Pulse Per Revolution) = 200
  • Time = 0.1 วินาที
RPM = (20 × 60) ÷ (200 × 0.1) = 60 RPM

การเขียนโปรแกรมคำนวณ RPM

คำนวณ RPM จากผลต่าง pulse
M406 ON: หาผลต่าง แล้วคำนวณ RPM เมื่อมี pulse เปลี่ยนแปลง (กันค่า 0)
N0
D410 = D406 - D408 (ผลต่าง pulse ใน 100ms)
M406SUBDD406, D408, D410
D410 ≠ 0 → D412 = D410 × 3 (RPM)
M406D410 <> K0MULDD410, K3, D412
Network count: 1, gap: 12
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

ตัวแปรที่ใช้:

  • D410: ผลต่าง Pulse ใน 100ms
  • K3: Coefficient (จากสูตรที่คำนวณ)
  • D412: ค่า RPM

เคล็ดลับการใช้งาน

1. การปรับ Response Time

  • สามารถเปลี่ยนจาก 100ms เป็น 10ms เพื่อ response ที่เร็วขึ้น
  • ใช้ Special Register M8158 สำหรับ 10ms timing

2. การเก็บค่า RPM ล่าสุด

  • ใส่เงื่อนไข [LDD<> D410 K0] เพื่อคำนวณเฉพาะเมื่อมี pulse เปลี่ยนแปลง
  • ป้องกันการได้ค่า RPM = 0 เมื่อหยุดหมุน

3. การกำหนด PPR

  • ตรวจสอบ PPR (Pulse Per Revolution) ของ Encoder ที่ใช้
  • ปรับค่า coefficient ตามสูตรให้เหมาะสมกับ PPR และเวลา sampling

การแก้ปัญหาที่พบบ่อย

ปัญหาค่า Counter ไม่เปลี่ยน

สาเหตุ: คำสั่ง HCNT ไม่ได้เปิดใช้งาน วิธีแก้: ตรวจสอบ Contact ที่เปิด/ปิดคำสั่ง HCNT

ปัญหาทิศทางการหมุนผิด

สาเหตุ: สายสัญญาณ A-B สลับกัน วิธีแก้: สลับสาย A กับ B หรือแก้ logic ในโปรแกรม

ปัญหาค่า RPM กระตุก

สาเหตุ: Sampling time สั้นเกินไป วิธีแก้: เพิ่ม sampling time หรือใช้ moving average

สรุป

การใช้งาน Encoder กับ High Speed Input ใน PLC ช่วยให้สามารถควบคุมและตรวจสอบการเคลื่อนไหวของระบบได้อย่างแม่นยำ โดยสามารถหาค่าตำแหน่ง ทิศทางการหมุน และความเร็วได้ การเขียนโปรแกรมต้องใช้ความรู้เรื่อง Function Block การคำนวณ และ Logic การเปรียบเทียบมาประยุกต์ใช้ ซึ่งเป็นการฝึกฝนทักษะการเขียนโปรแกรม PLC ในระดับสูงขึ้น