สอนใช้ HMI ควบคุม VFD Inverter ผ่าน Modbus RS485
ใช้หน้าจอ Samkoon SK-070QS-G ตัวเดียวสั่งเดินหน้า ถอยหลัง หยุด และปรับความถี่อินเวอร์เตอร์ SK300 1.5kW ผ่าน Modbus RS485 ตั้งแต่การต่อสาย ตั้งค่า F00.01 / F00.02 ตำแหน่งข้อมูล 4000H / 5000H / 4100H จนถึง Script บนหน้าจอ
ตั้ง F00.01 = 2 และ F00.02 = 9 ให้อินเวอร์เตอร์ SK300 รับทั้งคำสั่งและความถี่จาก Modbus RS485 แล้วให้หน้าจอ HMI เขียนคำสั่งที่ 4x16384 (4000H: 1 เดินหน้า 2 ถอยหลัง 5 หยุด) เขียนความถี่ที่ 4x20480 (5000H) และอ่านสถานะที่ 4x16640 (4100H)
อัพเดทล่าสุด: 26 ตุลาคม 2569
เป้าหมายของคลิป
ใช้หน้าจอ HMI เพียงอย่างเดียว ไม่มี PLC ควบคุมอินเวอร์เตอร์ (1.5 kW ไฟ 1 เฟสเข้า 3 เฟสออก) ที่ขับ AC Motor 3 เฟส
- ปรับความถี่จาก Slider บนหน้าจอได้ทันที แม้มอเตอร์กำลังหมุนอยู่
- ปุ่มเดินหน้า ถอยหลัง หยุด
- แสดงสถานะของมอเตอร์บนหน้าจอ
เมื่อทำแบบนี้เป็น ก็เขียน Logic อะไรก็ได้ในหน้าจอเพื่อคุมมอเตอร์ตามเงื่อนไขที่ต้องการ
อุปกรณ์ที่ใช้
- หน้าจอ HMI: SK-070QS-G + WiFi Module มีทั้งพอร์ตหัว DB9 และพอร์ต Terminal RS485 ใช้อันไหนก็ได้ ในคลิปใช้ Terminal เพราะสะดวกกว่า
- อินเวอร์เตอร์: Samkoon SK300 รหัส SK300-2S-1R5G (1.5 kW รับไฟเข้า 1 เฟส ออก 3 เฟส)
การต่อสายไฟ
สายไฟกำลัง
- อินเวอร์เตอร์ที่รับไฟ 1 เฟส ต่อสาย L กับ N เข้าที่ช่อง R กับ T
- อินเวอร์เตอร์ที่รับไฟ 3 เฟส ต่อเข้า R S T
- U V W ต่อไปที่มอเตอร์
- PE คือ Ground (ในคลิปไม่ได้ต่อ)
- ขั้ว P กับ PB ตรงกลางเป็นของตัวต้านทานเบรก ในงานนี้ไม่ได้ใช้
สายสื่อสาร RS485
Terminal ควบคุมของอินเวอร์เตอร์มีทั้งขารับสัญญาณดิจิทัล (สั่งหมุนไปหมุนกลับ เปลี่ยนความเร็ว) และขารับสัญญาณ Analog แต่ในคลิปใช้สายไฟแค่ 2 เส้นที่ขั้ว RS+ และ RS- สื่อสารด้วย Modbus ผ่าน RS485
| อินเวอร์เตอร์ | Terminal RS485 ของหน้าจอ (COM3) | หัว DB9 ของหน้าจอ (COM2) |
|---|---|---|
| RS+ | ขั้ว + | Pin 9 |
| RS- | ขั้ว - | Pin 8 |
ตั้งค่าอินเวอร์เตอร์
ต้องบอกอินเวอร์เตอร์สองเรื่อง คือรับ คำสั่ง จากไหน (ปุ่มเขียว/แดงหน้าเครื่อง, ขา X ของ Terminal หรือ Modbus RS485) และรับ ความถี่ จากไหน (ปุ่มหมุนหน้าเครื่อง, Analog, Digital หรือ Modbus RS485) งานนี้ให้มาจาก Modbus RS485 ทั้งคู่
วิธีเข้าเมนู: กด ESC หนึ่งครั้งจะขึ้นเป็น F เลือกกลุ่ม F00 แล้วเลือกพารามิเตอร์ที่ต้องการ
| Parameter | ชื่อ | ค่าจากโรงงาน | ตั้งเป็น |
|---|---|---|---|
| F00.01 | Command source selection | 0: Operation panel | 2: Com |
| F00.02 | Frequency source selection | 1: Digital setting (power failure memory) | 9: Communication given |
- พอ F00.01 = 2 ไฟ LED รูปคอมพิวเตอร์จะกระพริบ บอกว่ารับคำสั่งจาก Communication ถ้ายังเป็น 0 จะสั่งหมุนได้จากปุ่มเขียวแดงหน้าเครื่องเท่านั้น
- พอ F00.02 = 9 ความถี่จะขึ้นกับ Modbus หมุนปุ่มหน้าเครื่องค่าก็ไม่เปลี่ยน
พารามิเตอร์การสื่อสาร (กลุ่ม F09)
หน้าจอเป็น Modbus Master อินเวอร์เตอร์เป็น Modbus Slave ค่าจากโรงงานใช้ได้เลย
| Parameter | ชื่อ | ค่าจากโรงงาน |
|---|---|---|
| F09.00 | Baud rate | 5: 9600 bps |
| F09.01 | MODBUS data format | 3: 8-N-1 (Data Bit 8, Stop Bit 1, ไม่มี Parity) |
| F09.02 | Local address (Slave ID) | 1 |
| F09.07 | Master or slave | 0: slave |
ถ้าใช้หน้าจอตัวเดียวคุมอินเวอร์เตอร์หลายตัว ต้องเปลี่ยน Slave ID ของตัวที่ 2, 3 ที่ F09.02 ไม่ให้ซ้ำกัน ถ้าต่อกับอุปกรณ์อื่นที่ต้องการ Config ต่างไป ก็เปลี่ยนได้ในกลุ่ม F09
ตำแหน่งข้อมูล Modbus
ตำแหน่งในคู่มือเป็นเลขฐาน 16 (H) ต้องแปลงเป็นเลขฐาน 10 ก่อนใช้ในหน้าจอ
| ข้อมูล | Hex | ใช้ในหน้าจอ (4x) | การเข้าถึง | ค่า |
|---|---|---|---|---|
| คำสั่ง (Control command) | 4000H | 16384 | Write-only | 1 = เดินหน้า, 2 = ถอยหลัง, 5 = หยุด |
| ความถี่ (Communication setting value) | 5000H | 20480 | ในคลิปเขียนและ Monitor ที่ตำแหน่งนี้ | ช่วง -10000 ถึง 10000 ตามคู่มือ |
| สถานะ (Operation Status) | 4100H | 16640 | Read-only | 0 = หยุด, 1 = Forward, 2 = Reverse |
ตำแหน่งคำสั่งเป็น Write-only ถ้าพยายามอ่านค่ากลับมาจะเกิด Error ในการสื่อสาร จึงต้องใช้ 4100H ถ้าอยากรู้สถานะการหมุน
เรื่องการนับ Address (หลักทั่วไป)
Address นับจาก 0 — ส่วนนี้ไม่ได้พูดในคลิป แต่ 4x20480 คือ Register 5000H ของ SK300 (เลขฐาน 16 → 20480 ในเลขฐาน 10) SKTool นับ Address จาก 0 เหมือนคู่มือ SK300 จึงใส่ค่าที่แปลงแล้วได้ตรงๆ ไม่ต้องบวก 1
สร้างโปรเจกต์ใน SKTool
- เปิด SKTool → New ตั้งชื่อโปรเจกต์ เช่น Inverter Control แล้วเลือกรุ่นหน้าจอ (ในคลิป SK-070QS-G)
- Link Interface: ถ้าใช้หัว DB9 ส่วนมากเป็น COM2 (ดูที่ตัวหน้าจอจะเขียนว่า COM2 485) ถ้าใช้ Terminal คือ COM3 ในคลิปเลือก COM3
- Device Service: Modbus → Modbus RTU Master
- ตั้งชื่อ Screen เป็น Main
ทดสอบด้วย Numeric Input สองตัว
ก่อนทำปุ่มสวยๆ ลองคุมอินเวอร์เตอร์ด้วยช่องป้อนตัวเลขก่อน
ช่องคำสั่ง
- Write Address:
COM3→4x→16384(Data Type 16-Bit Unsigned Int) - ตำแหน่งนี้เขียนได้อย่างเดียว ให้เอาติ๊ก Monitor Address Identical to Write Address ออก แล้วใส่ Monitor Address เป็นที่อื่น เช่น
LW0
ช่องความถี่
- Write Address:
4x20480ติ๊ก Monitor Address Identical to Write Address ได้ - Fractional Digits:
2(ความถี่มีทศนิยม 2 ตำแหน่ง) Total Digits ปล่อยตามค่า Default
ดาวน์โหลดลงหน้าจอด้วยสาย USB-C (หน้าจอที่ต่อ Wi-Fi หรืออินเทอร์เน็ตได้จะดาวน์โหลดผ่าน IP Address ก็ได้) แล้วทดสอบ
- ป้อนความถี่
40.00หน้าอินเวอร์เตอร์แสดง20.00คือค่าถูกหาร 2 ไม่เป็นไร แก้ตอนแสดงผลทีหลังได้ ขึ้นกับการเทียบบัญญัติไตรยางศ์ของอินเวอร์เตอร์ - ป้อนคำสั่ง
1มอเตอร์เดินหน้า (ช่องคำสั่งยังแสดง 0 เพราะไม่ได้อ่านค่ากลับ) - ป้อน
5หยุด - ป้อน
2หน้าเครื่องขึ้น R และมอเตอร์หมุนกลับทาง แล้วหยุดด้วย5
ถ้าเขียนค่าเหล่านี้เข้าอินเวอร์เตอร์ได้ ส่วนการควบคุมก็จบแล้ว ที่เหลือคือการแสดงผล
สร้างหน้าจอควบคุม
ปุ่ม 3 ปุ่ม (Bit Switch)
- Function: Inching
- Write Address:
LB0เดินหน้า,LB1ถอยหลัง,LB2หยุด (LB = Local Bit ข้อมูลภายในหน้าจอ)
Slider ปรับความถี่
- Write Address:
4x20480 - Min
0Max10000(ค่าที่อินเวอร์เตอร์รับ) - Scale direction: Right และลบตัว Display ของ Slider ออก
Numeric Display แสดงความถี่จริง
- Monitor Address:
LW100(Local Word ค่าจะถูกเขียนด้วย Script) - Total Digits
4, Fractional Digits2 - จะเปลี่ยนเป็นแสดงรอบมอเตอร์ที่คำนวณเองก็ได้
Multi-State Lamp แสดงสถานะ
- Monitor Address:
4x16640State type: Value - แท็บ Text แก้ข้อความ: 0 = Stop, 1 = Forward, 2 = Reverse
เขียน Script
เปิด Script Editor → New ตั้งชื่อ Inverter แล้วสร้างตัวแปรใน Variable Setting
| Name | Data type | Address | R/W |
|---|---|---|---|
frequency | 16-Bit Unsigned Int | COM3 4x20480 | R/W |
control | 16-Bit | COM3 4x16384 | Write อย่างเดียว (ตำแหน่งนี้เขียนได้อย่างเดียว) |
โค้ดใน Script
LocalWord[100] = frequency / 2;
if (LocalBit[0] == 1)
{
control = 1;
}
if (LocalBit[1] == 1)
{
control = 2;
}
if (LocalBit[2] == 1)
{
control = 5;
}
- บรรทัดแรกเอาความถี่ที่อ่านกลับมาหาร 2 ไปแสดงที่
LW100เพราะค่าที่ได้กลับมาเป็น 2 เท่าของความถี่ที่หน้าเครื่องแสดง - กด LB0 สั่ง 1 (เดินหน้า), LB1 สั่ง 2 (ถอยหลัง), LB2 สั่ง 5 (หยุด) ตามที่ทดสอบไปแล้ว
Compile แล้วปิดหน้าต่าง จากนั้นดับเบิลคลิก Global Script → New เลือก Script Inverter (Frequency 50 ms) เพื่อให้รันตลอด พอกดปุ่มก็จะดักจับแล้วสั่งอินเวอร์เตอร์ทันที
ผลลัพธ์
ดาวน์โหลดลงหน้าจอแล้วลองเลื่อน Slider ค่าบนหน้าอินเวอร์เตอร์กับบนหน้าจอเท่ากันเป๊ะ กด Forward มอเตอร์วิ่งไปข้างหน้า กด Stop หยุด กด Reverse วิ่งกลับทาง
ความรู้นี้ต่อยอดได้ เช่น ใช้หน้าจอตัวเดียวคุมอินเวอร์เตอร์หลายตัว หรือถ้าเป็น IoT HMI ก็ส่งข้อมูลอินเวอร์เตอร์ไปแสดงบน SCADA ผ่าน MQTT ได้
บทถัดไป
วิธีอ่านค่ากระแสจาก VFD Inverter มาโชว์บน HMI
มีคำถาม? ติดต่อทีมงาน

