HMI
ขั้นสูง
20 นาที

C Scripting ใน HMI

เรียนรู้การเขียน C Scripting ใน HMI สำหรับสร้างระบบขั้นสูง Telegram/Line Notification, Google Sheet Integration, HTTP, MQTT และ SCADA System พร้อมตัวอย่างโค้ด

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

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

฿6,990

การเขียน C Scripting ใน HMI

HMI ไม่ได้จำกัดอยู่แค่การแสดงผลและควบคุมพื้นฐาน เมื่อเราต้องการสร้างระบบขั้นสูงที่มีความซับซ้อน เช่น Telegram Notification, Google Sheet Integration, HTTP Protocol, MQTT Protocol หรือการสร้าง Scada System เราจำเป็นต้องใช้ C Scripting เพื่อให้ HMI ทำงานตามเงื่อนไขที่เรากำหนด

การเตรียม Script Editor

การเปิด Script Editor

  1. เปิดโปรแกรม HMI Development
  2. ใช้เมนูทางซ้ายหา Script Editor
  3. Double-Click เพื่อเปิดหน้าต่าง Script Editor
  4. คลิกปุ่ม New (รูปสี่เหลี่ยม) ที่มุมซ้ายบนเพื่อสร้าง Script ใหม่

การตั้งชื่อ Script

// ตัวอย่างการตั้งชื่อ Script
Script Name: CBasic

โครงสร้างพื้นฐานของ C Script

Comment (คอมเม้นต์)

คอมเม้นต์คือส่วนที่ Compiler จะไม่ประมวลผล ใช้สำหรับอธิบายโค้ด:

C · SKTool Macro
#include "MacroInit.h"
//#include "subFun1.c" //Example

void Macro_main(IN *p)
{
 MarcoInit
 /* 
 นี่คือคอมเม้นต์แบบหลายบรรทัด
 ใช้เพื่ออธิบายการทำงานของโค้ด
 */

 // คอมเม้นต์แบบบรรทัดเดียว
}

การเขียนโค้ดพื้นฐาน

  • เขียนโค้ดใต้ส่วน comment ที่มีคำว่า "To do"
  • ทุกคำสั่งต้องจบด้วย semicolon (;)
  • กด Compile เพื่อตรวจสอบ syntax error

การทำงานกับตัวแปรและค่าข้อมูล

การกำหนดค่าพื้นฐาน

C · SKTool Macro
#include "MacroInit.h"
//#include "subFun1.c" //Example

void Macro_main(IN *p)
{
 MarcoInit
 // กำหนดค่าลงใน Local Word
 LocalWord[0] = 15;    // Local Word 0 = 15
}

การใช้เลขฐาน 16 (Hexadecimal)

C · SKTool Macro
#include "MacroInit.h"
//#include "subFun1.c" //Example

void Macro_main(IN *p)
{
 MarcoInit
 // เลขฐาน 16 ใช้ 0x นำหน้า
 LocalWord[1] = 0xF;   // 0xF = 15 ในเลขฐาน 10
}

การทำงานกับเลขติดลบ

สำหรับค่าติดลบ ต้องปรับ Data Type ใน Numeric Display:

C · SKTool Macro
#include "MacroInit.h"
//#include "subFun1.c" //Example

void Macro_main(IN *p)
{
 MarcoInit
 // ค่าติดลบ
 LocalWord[2] = -15;
}

เคล็ดลับ: เปลี่ยน Data Type จาก 16 bit Unsigned เป็น 16 bit Signed เพื่อแสดงค่าติดลบได้

ขีดจำกัดของข้อมูล

C · SKTool Macro
#include "MacroInit.h"
//#include "subFun1.c" //Example

void Macro_main(IN *p)
{
 MarcoInit
 // ค่าสูงสุดสำหรับ 16 bit
 LocalWord[3] = 65535;  // ไม่มีปัญหา

 // ค่าที่เกินขีดจำกัด 16 bit unsigned integer
 LocalWord[4] = 655351; // เกิด overflow
}

ประเภทของ Script

1. Global Script

  • รันอย่างต่อเนื่องขณะ HMI ทำงาน
  • เหมาะสำหรับการส่งข้อมูลเป็นระยะๆทุกๆ 50ms

2. Init Script

  • รันเพียงครั้งเดียวเมื่อเปิด HMI
  • เหมาะสำหรับการตั้งค่าเริ่มต้น

3. Trigger Script

  • รันเมื่อเกิดเหตุการณ์ที่กำหนด
  • เช่น เมื่อกดปุ่มหรือค่าเปลี่ยนแปลง

การทดสอบ Script

ขั้นตอนการทดสอบ

  1. เขียนโค้ดใน Script Editor
  2. กด Compile เพื่อตรวจสอบ syntax
  3. สร้าง Numeric Display เชื่อมกับ Local Word ที่ต้องการ
  4. ใช้ View → Display Control Address เพื่อแสดง address
  5. รัน Offline Simulate เพื่อทดสอบผลลัพธ์

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

  • Compile Error: ตรวจสอบ semicolon ที่บรรทัดสุดท้าย
  • ค่าติดลบไม่แสดง: เปลี่ยน Data Type เป็น Signed
  • ค่าผิดปกติ: ตรวจสอบ overflow ของข้อมูล

สรุป

C Scripting ใน HMI เป็นเครื่องมือสำคัญสำหรับการสร้างระบบอัตโนมัติขั้นสูง การเริ่มต้นด้วยการเรียนรู้การกำหนดค่าพื้นฐาน การทำงานกับตัวแปร และการเข้าใจประเภทของ Script จะช่วยให้เราสามารถพัฒนาระบบที่ซับซ้อนได้ในอนาคต การฝึกฝนและทดสอบอย่างสม่ำเสมอจะทำให้เราเข้าใจหลักการทำงานของ C Scripting มากขึ้น