ใช้ Barcode กำหนดสูตรการผลิต
เรียนรู้การสร้างระบบเก็บประวัติ Barcode ย้อนหลัง 10 ชุดข้อมูลและการเชื่อมต่อกับระบบ Recipe ใน HMI พร้อมตัวอย่าง Script และการสร้าง ASCII Display
อัพเดทล่าสุด: 30/1/2569
ราคาชุดอุปกรณ์
การเก็บประวัติ 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
- เลือก ASCII Display object
- คลิกขวา → เลือก Multiple Copies
- กำหนดค่า:
- 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
- ตรวจสอบ Hexadecimal:
- 'A' = 0x41, 'B' = 0x42, 'C' = 0x43, 'D' = 0x44
- สังเกตลำดับ byte ที่กลับกัน (Little Endian)
- การจัดลำดับเงื่อนไข:
- เงื่อนไขที่เฉพาะเจาะจงต้องอยู่ก่อนเงื่อนไขทั่วไป
- เช่น "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 และการเชื่อมต่อกับอุปกรณ์อื่นๆ ในอนาคต
ควรอ่านก่อน:
มีคำถาม? ติดต่อทีมงาน
