หน้าแรกคู่มือPLCเทคนิคขั้นสูงการใช้งาน Index และ Offset ใน PLC HMI - Data Sampling

บทที่ 6 จาก 17 ใน เทคนิคขั้นสูง

PLCปานกลาง · Intermediate12 นาที

การใช้งาน Index และ Offset ใน PLC HMI - Data Sampling

สอนใช้ Index Z ใน Samkoon PLC เก็บค่า D0 ทุก 100 ms ลง D10 เป็นต้นไปแล้ววาดกราฟด้วย Data Group Display และใช้ Offset ของ Bit Button ใน HMI เลือก Output Y0–Y7 จากปุ่มเดียว

เอา Z มาต่อท้าย Address เช่น D10Z0 หรือ M200Z1 แล้ว PLC จะอ่านเป็น D10 + Z0 หรือ M200 + Z1 ใช้เก็บค่า D0 ทุก 100 ms ลง D10, D11, D12 … เพื่อวาดกราฟ ส่วนฝั่ง HMI ใช้ช่อง Offset ของ Bit Button เลื่อนปุ่ม M400 ไปเป็น M401–M407 ได้โดยไม่ต้องสร้างปุ่มใหม่

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

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

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

฿2,590

Index กับ Offset ช่วยอะไร

ถ้าเข้าใจเรื่อง Index (หรือ Offset) เราจะเปลี่ยนตำแหน่งของ Data Register ใน PLC หรือ HMI ได้อย่างอิสระ คลิปนี้ยกตัวอย่าง 2 ระบบ

  1. Data Sampling — เก็บค่าที่อ่านเข้ามา (ในคลิปจำลองด้วย D0) ทุก 100 ms ไว้หลายตำแหน่งเรียงกัน แล้วเอาไปแสดงเป็นกราฟบน HMI หรือส่งให้อุปกรณ์อื่น ถ้าไม่รู้เรื่อง Index ต้องเขียนโค้ดยาวมาก
  2. Offset Coil — ให้ผู้ใช้เลือกช่อง Output (Y0–Y7) จากหน้าจอ แล้วกดปุ่มเดียวสั่ง Output ช่องนั้น เหมาะกับกรณีที่ยังไม่รู้ว่าปลายทางลูกค้าจะต่อสายอุปกรณ์เข้ากับ Output ช่องไหน

อุปกรณ์ในคลิปคือ PLC FAT-16MT-DC-E ต่อกับหน้าจอ Samkoon 7 นิ้ว เขียนโปรแกรมด้วย SamSoar2022 และ SKTool

หลักการทำงานของ Index Z

ปกติเรารู้จัก Input = X, Coil = Y, Coil ตัวช่วย (Auxiliary Coil) = M และเก็บข้อมูลใน Data Register = D ตัวที่เพิ่มเข้ามาคือ Z ซึ่งเอาไปต่อท้าย Address ได้ เช่น M200Z1 หมายถึง M200 + ค่าใน Z1

ค่า Z1M200Z1 คือ
0M200
1M201
2M202

ในคลิปเขียนโปรแกรมทดสอบไว้ใน Network "How index works" — ถ้า M100 ติดให้ M200Z1 ติด และกด M101 (ขอบขาขึ้น) เพื่อ INC ค่า Z1 ทีละ 1 ส่วน M200, M201, M202 ต่อไปขับ M300, M301, M302 เพื่อให้เห็นว่าตอนนี้ Coil ตัวไหนติด

ทดลอง Index Z1 กับ M200
M100 ติด → M(200 + Z1) ติด, M101 ขอบขาขึ้น → Z1 เพิ่มทีละ 1
N0How index works
M100 ติด → Coil M200Z1 (= M200 + Z1) ติด
M100M200Z1
กด M101 (ขอบขาขึ้น) → เพิ่มค่า Z1 ทีละ 1
M101↑INCZ1, Z1
M200 ติด → M300 ติด
M200M300
M201 ติด → M301 ติด
M201M301
M202 ติด → M302 ติด
M202M302
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

ผลที่เห็นในคลิป

  • Z1 = 0 → M100 ติดแล้ว M200 ติด (M300 ติดตาม)
  • กด M101 หนึ่งครั้ง Z1 = 1 → M100 ติดแล้ว M201 ติดแทน
  • กดอีกครั้ง Z1 = 2 → M202 ติด

Z ต่อท้ายได้ทั้งตัว M และตัว D แล้วแต่งาน

ตัวอย่างที่ 1: Data Sampling ทุก 100 ms

โปรแกรม PLC

Data Sampling ด้วย Index Z0
เก็บค่า D0 ลง D10Z0 ทุก 100 ms แล้วเพิ่ม Z0 ทีละ 1
N0Data Sampling
M10 ติด → INC D0 ทุก Scan เพื่อจำลองข้อมูลที่วิ่งไปเรื่อยๆ
M10INCD0, D0
M0 เริ่มเก็บข้อมูล และ M1 (NC) รีเซ็ต Timer ทุกรอบ → T0 ติดทุก 100 ms
M0M1TONTV0, K1
T0 ขอบขาขึ้น → เก็บ D0 ลง D10Z0, เพิ่ม Z0 และสั่ง M1 เพื่อรีเซ็ต Timer
T0↑MOVD0, D10Z0INCZ0, Z0M1
Z0 = 9 → ตั้ง Z0 กลับเป็น 0
Z0 = K9MOVK0, Z0
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

อธิบายทีละขั้น

  1. สร้างข้อมูลจำลอง — M10 ติดแล้ว INC D0 แบบไม่ใช้ขอบขาขึ้น จึงเพิ่มทุก Scan และวิ่งเร็วมาก D0 เป็นค่า 16 bit มีเครื่องหมาย จึงวิ่งจาก -32768 ขึ้นไปถึง 32767 แล้ววนรอบใหม่ (ในงานจริง D0 คือค่าที่อ่านจากเซนเซอร์)
  2. Timer 100 ms — ถ้า M0 ติดและ M1 (หน้าสัมผัส NC) ไม่ติด จะเรียก TON ที่ TV0 ฐานเวลา 100 ms ตั้ง Set Value เป็น K1 คือครบทุก 100 ms (จะใช้ Coil พิเศษที่กะพริบทุก 100 ms แทนก็ได้ แต่ในคลิปใช้ TON)
  3. เก็บค่าตาม Index — เมื่อ T0 ติด (ขอบขาขึ้น) จะ MOV ค่า D0 ไปเก็บที่ D10Z0 แล้ว INC Z0 เพิ่มอีก 1 และสั่ง M1 ติด
  4. รีเซ็ต Timer — M1 ติดทำให้หน้าสัมผัส NC ในขั้นที่ 2 เปิด Timer ถูกรีเซ็ตแล้วนับใหม่ รอบถัดไป T0 ติดอีกครั้ง ค่าจะไปเก็บที่ D10 + 1 = D11, D12, D13 … ต่อไปเรื่อยๆ
  5. วนกลับ — เมื่อ Z0 เท่ากับ 9 จะ MOV K0 ไปที่ Z0 ให้กลับไปเริ่มเก็บที่ D10 ใหม่

สังเกตจาก Monitor ในคลิป — D10–D18 มีค่า แต่ D19 เป็น 0 ตลอด เพราะ Z0 ถูกตั้งกลับเป็น 0 ทันทีที่ขึ้นถึง 9 ในรอบเดียวกัน โปรแกรมนี้จึงเก็บจริง 9 ค่า (D10–D18) ถ้าต้องการให้ครบ 10 ค่า (D10–D19) ให้เปลี่ยนเงื่อนไขเป็น Z0 = K10

หน้าจอ HMI

หน้า Data Sampling ในคลิปมีปุ่ม M10 (Generate Data) ช่องแสดงค่า D0 ปุ่ม M0 (เริ่มเก็บข้อมูลทุกๆ 100ms) และกราฟ ซึ่งใช้ออบเจกต์ Data Group Display (Datagroup display) จากแถบเครื่องมือด้านขวาของ SKTool

Data Group Display ต่างจาก Trend Chart ตรงที่ Trend Chart สนใจ Address เดียว เช่น D0 ว่าย้อนหลังไป 1 ชั่วโมงมีค่าอะไรบ้าง ส่วน Data Group Display วาดค่าของ Address หลายตัวที่เรียงกัน (D10 ถึง D19) ณ เวลานั้น

ค่าที่ตั้งในคลิป

ช่องค่าความหมาย
Read Trigger bitM0Bit ที่ติดแล้วเริ่มอ่านข้อมูลมาแสดงบนกราฟ
Control addressD10ตำแหน่งเริ่มต้นของข้อมูล
Display points10จำนวนจุดที่อ่าน (D10 เป็นต้นไป 10 ตัว)
Clear Trigger bitLB0Bit สำหรับล้างข้อมูลในกราฟ
Data type16-Bit Signed Intให้ตรงกับชนิดข้อมูลที่เก็บ

ช่วงของแกน X และแกน Y ตั้งได้ที่แท็บ XY axis (ในคลิปแกน Y ตั้ง Min -32768 และ Max 32767 ตามช่วงของ D0)

ตัวอย่างที่ 2: Offset Coil เลือก Output จากหน้าจอ

ผู้ใช้เลือกค่าใน LW0 (Local Word ของหน้าจอ) เช่นเลือก 6 แล้วกดปุ่ม Output Y6 จะติด เลือก 7 ก็ไปออก Y7 ระบบแบบนี้ทำด้วย Index Z ฝั่ง PLC ก็ได้ แต่ HMI มีฟังก์ชัน Offset ของปุ่มที่ช่วยทุ่นแรง ตัวอย่างนี้จึงใช้ Offset จาก HMI

โปรแกรม PLC

ฝั่ง PLC เขียนแค่บรรทัดเดียว คือ map M400–M407 ไปที่ Y0–Y7

Map M400–M407 → Y0–Y7
M8151 ติดตลอดเมื่อ PLC Run → MOV K8M400 ไปที่ K8Y0
N0Usecase with HMI offset
M8151 (Always On) → K8M400 (M400–M407) ไปที่ K8Y0 (Y0–Y7)
M8151MOVK8M400, K8Y0
นำเข้าไฟล์ใน SamSoar2022: File → Import → เลือกไฟล์ .csv

K8M400 คือ M400 จำนวน 8 ตัว (M400–M407) และ K8Y0 คือ Y0 จำนวน 8 ตัว (Y0–Y7) ดังนั้น M400 ติด → Y0 ติด, M405 ติด → Y5 ติด, M407 ติด → Y7 ติด

หน้าจอ HMI

  1. สร้าง Stepping Button ที่ Write address = LW0 ตั้ง Total States = 8 (State Type: Value, Data Type 16-Bit Unsigned Int) จะได้ปุ่มที่กดเลือกค่า 0–7
  2. สร้าง Bit Button ตัวเดียว (Function: Invert, Mode: Press execute) ให้ผู้ใช้กดสั่ง Output
  3. ที่ Write Address ใส่ M400 แล้วติ๊ก Offset และใส่ LW0 (ช่อง Monitor Address ที่ตั้งให้ตรงกับ Write Address ก็มี Offset = LW0 เช่นกัน)

ค่าที่ใช้เป็น Offset จะเป็น LW ของหน้าจอหรือค่า D ใน PLC ก็ได้ ขอให้เป็นตัวเลข เช่นให้ผู้ใช้กรอกเองว่าจะเลื่อนไป 5 หรือ 6 ตำแหน่ง

ผลการทำงาน

  • LW0 = 0 → กดปุ่มแล้ว M400 ติด → Y0 ติด
  • LW0 = 3 → ปุ่มกลายเป็น M403 → Y3 ติด
  • LW0 = 7 → ปุ่มกลายเป็น M407 → Y7 ติด

ตอนเปลี่ยนค่า LW0 ปุ่มจะกะพริบนิดหนึ่ง เพราะเหมือนเปลี่ยนไปเป็นปุ่มอีกตัว

สรุป

  • ใช้ Index Z ทำ Data Sampling เก็บค่าลง Data Register ที่เรียงกันโดยไม่ต้องเขียนโค้ดทีละตำแหน่ง
  • ใช้ Offset ของปุ่มใน HMI เปลี่ยน Address ที่ปุ่มสั่งงาน โดยไม่ต้องสร้างปุ่มแยกทุก Address
  • ระบบจะ Dynamic ขึ้น เพราะตัวแปรที่โค้ดใช้งานเปลี่ยนได้ตามค่าที่รับเข้ามา

บทถัดไป

คำสั่ง FMOV ใน Samkoon PLC - Move ข้อมูลหลายตัวแปรพร้อมกัน

2 นาทีเริ่มต้น · Beginner