if, else, loop และ String
เรียนรู้ภาษา C สำหรับ HMI ครอบคลุม Conditional Statement, Loop, Function และ String Handling เตรียมพร้อมใช้งาน Barcode Scanner
อัพเดทล่าสุด: 30/1/2569
ราคาชุดอุปกรณ์
บทนำ C Language สำหรับงานบาร์โค้ดใน HMI
บทความนี้เป็นส่วนต่อจากตอนที่ 1 ซึ่งจะครอบคลุมเรื่องสำคัญต่างๆ ของภาษา C สำหรับการใช้งานใน HMI ประกอบด้วย Conditional Statement, Loop, Function การสร้าง และ String Handling ที่จะนำไปใช้กับ Barcode Scanner ในตอนถัดไป
Conditional Statement (เงื่อนไขการทำงาน)
การใช้ IF Statement
IF Statement ใช้สำหรับกำหนดเงื่อนไขการทำงาน หาก condition เป็นจริง code block ข้างในจะถูกประมวลผล
if (LocalBit[0] == 1) {
LocalWord[12] = 555;
}
หมายเหตุ: การใช้ == (Comparison Operator) สำหรับเปรียบเทียบค่า
การใช้ IF-ELSE
เมื่อเงื่อนไขใน IF ไม่เป็นจริง จะทำงานใน ELSE block แทน
if (LocalBit[0] == 1) {
LocalWord[12] = 555;
} else {
LocalWord[12] = 666;
}
การใช้ ELSE IF
สำหรับกรณีที่มีหลายเงื่อนไข สามารถใช้ ELSE IF เพื่อเพิ่มเงื่อนไขระหว่างกลาง
if (LocalWord[13] > 100) {
LocalWord[14] = 1;
} else if (LocalWord[13] < 10) {
LocalWord[14] = 2;
} else {
LocalWord[14] = 3;
}
การทดสอบ Conditional Statement
- สร้าง switch สำหรับ LB0 ด้วย function Invert
- สร้าง Numeric Display สำหรับแสดงผล LW12, LW13, LW14
- เรียกใช้ Script แบบ Global Script ด้วยความถี่ 50 ms
- ทดสอบการทำงานใน Offline Simulate
While Loop (การวนซ้ำ)
ปัญหาของการเขียนแบบ Manual
การ copy ข้อมูลจาก Array ไปยัง Local Word หากทำแบบ manual จะเสียเวลาและไม่มีประสิทธิภาพ
// วิธีที่ไม่ดี
LocalWord[20] = myData[0];
LocalWord[21] = myData[1];
LocalWord[22] = myData[2];
// ... ต่อไปเรื่อยๆ
การใช้ FOR Loop
FOR Loop ประกอบด้วย 3 ส่วน: ค่าเริ่มต้น, เงื่อนไข, การเพิ่มค่า
short myData[5] = {2, 4, 6, 8, 10};
short myDataLength = sizeof(myData) / sizeof(myData[0]);
short i;
for (i = 0; i < myDataLength; i++) {
LocalWord_20[i] = myData[i];
}
การคำนวนขนาด Array
การใช้ sizeof() function เพื่อคำนวนขนาด Array อัตโนมัติ
LocalWord[15] = sizeof(myData); // ผลลัพธ์: 10 bytes (5 x 2 bytes)
LocalWord[16] = sizeof(myData[0]); // ผลลัพธ์: 2 bytes
short myDataLength = LocalWord[15] / LocalWord[16]; // 10 / 2 = 5
เคล็ดลับ: การคำนวนแบบนี้ทำให้สามารถเพิ่ม element ใน Array ได้โดยไม่ต้องแก้ไข code
String Handling (การจัดการข้อความ)
การประกาศ String
String ในภาษา C คือ Character Array
char myChar = 'A'; // ตัวอักษรเดี่ยว
char myString[] = "IoT HMI"; // String (Character Array)
ปัญหาการแสดงผล String
การแสดง String ใน HMI ไม่สามารถใช้วิธีเดียวกับ Character เดี่ยวได้
LocalWord[25] = myChar; // ใช้ได้กับ ASCII Display
LocalWord[26] = myString; // ไม่ทำงาน - ต้องใช้ Memory Copy
Function (การสร้างฟังก์ชัน)
การสร้าง Function
Function ช่วยให้ code สามารถใช้ซ้ำได้และมีโครงสร้างที่ดีขึ้น สร้างโดยการคลิกขวาที่ Sub script
// ในไฟล์ Increment.c
short increment(short number) {
return number + 1;
}
การใช้ Function
- Import function ด้วย
#include - เรียกใช้ function ในโปรแกรมหลัก
#include "increment.c"
// ใช้งานใน Loop
for (short i = 0; i < MyDataLength; i++) {
LocalWord[20 + i] = increment(myData[i]);
}
Memory Copy Function (Memcpy)
Memcpy ใช้สำหรับ copy String ไปยัง memory ที่กำหนด
memcpy(LocalWord[30], myString, strlen(myString));
Parameter ของ Memcpy:
- Destination - ตำแหน่งที่ต้องการ copy ไป
- Source - String ต้นทาง
- Size - ขนาดของข้อมูล (ใช้ strlen() หาขนาด String)
การแสดง String ใน HMI
- ใช้ ASCII Display component
- ตั้งค่า Address เป็น LocalWord ที่ copy String ไว้
- กำหนดความยาวที่เหมาะสม
- ระบุจำนวนตัวอักษรที่ต้องการแสดง
การแก้ปัญหาที่พบบ่อย
Script ไม่ทำงาน
- ตรวจสอบการตั้งค่า Global Script
- ใช้ความถี่ 50ms สำหรับการทดสอบ
- ตรวจสอบ syntax error ใน compiler
String ไม่แสดงผล
- ใช้ memcpy() แทนการ assign โดยตรง
- ตั้งค่า ASCII Display ให้ถูกต้อง
- ตรวจสอบขนาด memory ที่จอง
Array Index Error
- ใช้ sizeof() คำนวนขนาดอัตโนมัติ
- ตรวจสอบ condition ใน FOR loop
เคล็ดลับการใช้งาน
- Dynamic Array Size: ใช้ sizeof() เพื่อให้ code ปรับตัวได้เมื่อเพิ่มข้อมูล
- Memory Management: วางแผนการใช้ LocalWord ให้เป็นระเบียบ
- Function Reusability: สร้าง function สำหรับงานที่ทำซ้ำบ่อย
- String Length: ใช้ strlen() แทนการนับตัวอักษรเอง
สรุป
ตอนที่ 2 นี้ครอบคลุมองค์ประกอบสำคัญของภาษา C สำหรับ HMI ได้แก่ Conditional Statement, FOR Loop, Function การสร้าง และ String Handling เหล่านี้เป็นพื้นฐานสำคัญที่จะนำไปประยุกต์ใช้กับ Barcode Scanner ในตอนถัดไป การเข้าใจเรื่องเหล่านี้จะช่วยให้สามารถเขียน Script ที่มีประสิทธิภาพและบำรุงรักษาได้ง่ายขึ้น
ควรอ่านก่อน:
มีคำถาม? ติดต่อทีมงาน
