บัญชี

หน้าแรกคู่มือHMIพื้นฐาน HMI และ SKTool7.1ใช้ Barcode กำหนดสูตรการผลิต
HMI
ขั้นสูง
17 นาที

ใช้ Barcode กำหนดสูตรการผลิต

เรียนรู้การสร้างระบบเก็บประวัติ Barcode ย้อนหลัง 10 ชุดข้อมูลและการเชื่อมต่อกับระบบ Recipe ใน HMI พร้อมตัวอย่าง Script และการสร้าง ASCII Display

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

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

฿6,990

การเก็บประวัติ Barcode และการจัดการ Recipe

บทความนี้จะแนะนำวิธีการสร้างระบบเก็บประวัติ Barcode ย้อนหลัง 10 ชุดข้อมูล และการเชื่อมต่อกับระบบ Recipe ใน HMI

แนวคิดการเก็บ Historical Barcode

ระบบจะทำการเลื่อนข้อมูลจากตำแหน่งปัจจุบันไปยังตำแหน่งถัดไป ตามลำดับดังนี้:

  • ข้อมูลใหม่: บันทึกที่ LW10000
  • ข้อมูลที่ 1: LW10000 → LW10050
  • ข้อมูลที่ 2: LW10050 → LW10100
  • ข้อมูลที่ 3: LW10100 → LW10150

กระบวนการนี้จะดำเนินต่อไปเรื่อยๆ จนถึงข้อมูลชุดสุดท้าย (LW10500-LW10549) ซึ่งจะเก็บประวัติทั้งหมด 10 ชุด

การเขียน Script สำหรับ Historical Data

1. การประกาศตัวแปร

c
int i, j;  // ประกาศตัวแปรสำหรับ loop

2. การสร้าง Loop ซ้อน

c
// Loop นอกสำหรับการเลื่อนข้อมูล 10 ชุด
for(i = NumberOfBarcodes; i > 0; i--) {
    // Loop ในสำหรับการ copy ข้อมูลแต่ละตัวอักษร (50 ตัว)
    for(j = 0; j < MaxDataLength; j++) {
        LocalWord[SaveDataStart + (MaxDataLength * i) + j] = LocalWord[SaveDataStart + (MAXDATMaxDataLengthALEN * (i-1)) + j];
    }
}

3. การแก้ไข Bug ข้อมูลค้างใน Memory

เพิ่มการ Clear Data ก่อนการ Scan ใหม่:

c
// Clear scan data area
for(i = 0; i < MaxDataLength; i++) {
    LocalWord[ScanDataStart + i] = ' ';  // กำหนดเป็น space
}

การสร้าง ASCII Display สำหรับแสดงประวัติ

การใช้ Multiple Copies

  1. เลือก ASCII Display object
  2. คลิกขวา → เลือก Multiple Copies
  3. กำหนดค่า:
    • Offset: 50 (เพิ่ม Address ทีละ 50)
    • Direction: Increase Pull Down
    • Copies: 10 ชุด
    • Interval: ระยะห่างระหว่างแต่ละ Display

การเชื่อมต่อกับ Recipe System

1. การตรวจสอบข้อมูล Barcode

c
// ตรวจสอบ Barcode "AB"
if(LocalWord[SaveDataStart] == 0x4241) {
    RWIWord[0] = 0;  // กำหนด Recipe ID = 0
    LocalBit[DownloadRecipeTriggerBit] = 1;  // Trigger download
}
// ตรวจสอบ Barcode "CD"
else if(LocalWord[SaveDataStart] == 0x4443) {
    RWIWord[0] = 1;  // กำหนด Recipe ID = 1
    LocalBit[DownloadRecipeTriggerBit] = 1;
}
// ตรวจสอบ Barcode "CDEF"
else if(LocalWord[SAVEDATASTART] == 0x4443 && LocalWord[SAVEDATASTART + 1] == 0x4645) {
    RWIWord[0] = 2;  // กำหนด Recipe ID = 2
    LocalBit[DownloadRecipeTriggerBit] = 1;
}

2. การใช้ตัวดำเนินการ AND

สำหรับการตรวจสอบ Barcode ที่มีความยาวมากกว่า 2 ตัวอักษร ใช้ตัวดำเนินการ && (AND):

c
if(condition1 && condition2) {
    // ทำงานเมื่อทั้งสองเงื่อนไขเป็นจริง
}

การทดสอบระบบ

เคล็ดลับการ Debug

  1. ตรวจสอบ Hexadecimal:
    • 'A' = 0x41, 'B' = 0x42, 'C' = 0x43, 'D' = 0x44
    • สังเกตลำดับ byte ที่กลับกัน (Little Endian)
  2. การจัดลำดับเงื่อนไข:
    • เงื่อนไขที่เฉพาะเจาะจงต้องอยู่ก่อนเงื่อนไขทั่วไป
    • เช่น "CDEF" ต้องเช็คก่อน "CD"

ตัวอย่างการทำงาน PLC


// ตรวจสอบค่า Recipe และควบคุมไฟ
[D0 = 1] ——— M8160 ——— Y0  // กระพิบ 1 วินาที
[D0 = 4] ——— M8159 ——— Y0  // กระพิบ 100ms  
[D0 = 7] ——————————— Y0     // ติดค้าง

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

1. ข้อมูลแสดงผิด

  • สาเหตุ: Memory ค้างจากการ Scan ก่อนหน้า
  • วิธีแก้: เพิ่ม Clear Data routine ก่อน Scan ใหม่

2. Recipe ไม่เปลี่ยน

  • สาเหตุ: ลำดับเงื่อนไขผิด หรือ Hexadecimal ไม่ถูกต้อง
  • วิธีแก้: ตรวจสอบค่า ASCII และจัดลำดับเงื่อนไขใหม่

3. Loop ทำงานผิดพลาด

  • สาเหตุ: Index calculation ผิด
  • วิธีแก้: ทดสอบด้วยการแทนค่าตัวอย่าง

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

  • การออกแบบ Address: วางแผน Memory map ให้ชัดเจนก่อนเริ่มเขียน
  • การ Debug: ใช้การแทนค่าเพื่อตรวจสอบ Logic ของ Loop
  • การ Optimize: พิจารณาใช้ String function หากมีใน HMI

สรุป

การสร้างระบบเก็บประวัติ Barcode และเชื่อมต่อกับ Recipe ต้องอาศัยความเข้าใจในเรื่อง Loop ซ้อน การจัดการ Memory และการใช้เงื่อนไขแบบซับซ้อน ระบบนี้จะช่วยให้สามารถติดตามประวัติการสแกนและปรับเปลี่ยนพารามิเตอร์การผลิตแบบอัตโนมัติได้อย่างมีประสิทธิภาพ

การเรียนรู้เทคนิคเหล่านี้จะเป็นพื้นฐานสำหรับการพัฒนาระบบ HMI ที่ซับซ้อนมากขึ้น รวมถึงการประยุกต์ใช้กับระบบ IoT และการเชื่อมต่อกับอุปกรณ์อื่นๆ ในอนาคต