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 ข้างในจะถูกประมวลผล
c
if (LocalBit[0] == 1) {
LocalWord[12] = 555;
}
หมายเหตุ: การใช้ == (Comparison Operator) สำหรับเปรียบเทียบค่า
การใช้ IF-ELSE
เมื่อเงื่อนไขใน IF ไม่เป็นจริง จะทำงานใน ELSE block แทน
c
if (LocalBit[0] == 1) {
LocalWord[12] = 555;
} else {
LocalWord[12] = 666;
}
การใช้ ELSE IF
สำหรับกรณีที่มีหลายเงื่อนไข สามารถใช้ ELSE IF เพื่อเพิ่มเงื่อนไขระหว่างกลาง
c
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 จะเสียเวลาและไม่มีประสิทธิภาพ
c
// วิธีที่ไม่ดี
LocalWord[20] = myData[0];
LocalWord[21] = myData[1];
LocalWord[22] = myData[2];
// ... ต่อไปเรื่อยๆ
การใช้ FOR Loop
FOR Loop ประกอบด้วย 3 ส่วน: ค่าเริ่มต้น, เงื่อนไข, การเพิ่มค่า
c
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 อัตโนมัติ
c
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
c
char myChar = 'A'; // ตัวอักษรเดี่ยว
char myString[] = "IoT HMI"; // String (Character Array)
ปัญหาการแสดงผล String
การแสดง String ใน HMI ไม่สามารถใช้วิธีเดียวกับ Character เดี่ยวได้
c
LocalWord[25] = myChar; // ใช้ได้กับ ASCII Display
LocalWord[26] = myString; // ไม่ทำงาน - ต้องใช้ Memory Copy
Function (การสร้างฟังก์ชัน)
การสร้าง Function
Function ช่วยให้ code สามารถใช้ซ้ำได้และมีโครงสร้างที่ดีขึ้น สร้างโดยการคลิกขวาที่ Sub script
c
// ในไฟล์ Increment.c
short increment(short number) {
return number + 1;
}
การใช้ Function
- Import function ด้วย
#include - เรียกใช้ function ในโปรแกรมหลัก
c
#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 ที่กำหนด
c
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 ที่มีประสิทธิภาพและบำรุงรักษาได้ง่ายขึ้น
ควรอ่านก่อน:
มีคำถาม? ติดต่อทีมงาน
