การใช้งาน Barcode ร่วมกันกับ PLC นั้น เป็นระบบที่ค่อนข้างได้รับความนิยมในช่วงเวลาที่ผ่านมา หากเราต้องการใช้ข้อมูลจาก Barcode มาเป็นเงื่อนไขของการทำงานของ PLC ของเรา เราจำเป็นต้องเรียนรู้เกี่ยวกับการใช้งาน Script ในหน้าจอ Samkoon กันก่อน โดยท่านสามารถอ่านจากบล็อคด้านล่าง หรือ กด link ไปที่วีดีโอสาธิต ได้เลยครับ
อุปกรณ์ที่ใช้
PLC: ยี่ห้อ AMSAMOTION รุ่น AMX-FX3U-26MT-E
HMI: ยี่ห้อ SAMKOON รุ่น SK-070MW
สาย USB-A
USB Barcode Scanner
วิธีทำ
1. ต่อ PLC เข้ากับหน้าจอ HMI และต่อหน้าจอ HMI เข้ากับ Barcode Scanner ด้วยสาย USB-A ตาม diagram ด้านล่าง
2. สร้าง Project ใหม่ในโปรแกรม SKTool โดยในการสาธิตนี้เราจะตั้งชื่อ Project ง่ายๆว่า barcode-hmi และตั้งค่าต่างๆตามรายละเอียดด้านล่างนี้
เลือก Model เป็น SK-070MW แล้วกด Next
Device Service เลือกเป็น Modbus และ Modbus RTU Master ซึ่งหมายความว่าเราให้หน้าจอเป็น Master แล้วกด Next
ในการสาธิตนี้เราจะตั้งชื่อ Screen Name ว่า Main และเลือก BG Color เป็นสีขาวและกด Finish
3. สร้าง Script เพื่อใช้ Barcode Scanner
เปิด Script Editor จากแถบซ้ายของโปรแกรม SKTOOL
กด New เพื่อสร้าง Script ใหม่ โดย Script ตัวนี้จะเป็นการ Config หน้าจอ HMI เพื่อใช้ Barcode Scanner ก่อน เราสามารถตั้งชื่อ Script ว่าอะไรก็ได้แต่ในตัวอย่างนี้ เราจะตั้งชื่อว่า 'Config'
เริ่มเขียน Code โดยเมื่ออ้างอิงจากคู่มือในส่วนของ Reserved Registers นั้น เราต้องตั้งค่า LocalWord ตัวที่ 60997 ให้มีค่าเท่ากับ 1 ดังนั้นเราจึงเขียน Code ตาม 2 บรรทัดด้านล่างลงไป
//ToDo #define SCANNING_INPUT 60997 LocalWord[SCANNING_INPUT] = 1;
ทดลอง Compile Code และออกจากหน้า Code Editor
Double Click เพื่อเปิด Init Script ในแถบข้างซ้ายขึ้นมา แล้วกด New
เลือก Config->[ID:0] ใน Dropdown ซึ่งคือโค้ดที่เราเพิ่งเขียนเมื่อกี้ แล้วกด OK
สำหรับหน้าจอรุ่นนี้ ก่อนดาวน์โหลดต้องกดเลือก Remote setting ในแถบด้านซ้ายเพื่อใส่ Connect Password เข้าไปในหน้าจอ HMI โดยในตัวอย่างนี้เราจะใส่เป็น 123456 หลังจากนั้นกด Untick ตรงช่อง Allow remote upload and download
4. สร้าง Script เพื่อเขียน Logic ในการอ่านและใช้ข้อมูลจาก Barcode
เปิด Script Editor อีกครั้งและกด New โดยในตัวอย่างนี้เราจะตั้งชื่อมันว่า ScanLogic
เมื่ออ้างอิงจาก Essential Reserved Registers การเข้าถึงข้อมูลที่เก็บไว้ใน HMI เราจะสามารถทำผ่าน LocalBit Address 60147, LocalWord Address 60999 และ 61000 - 61127 ตามรายละเอียดในภาพด้านล่าง
เขียน Code ตามด้านล่าง
//ToDo #define END_MARK_SCANNING 60147 #define SCAN_CODE_LENGTH 60999 #define STORAGE_START 61000 #define SELF_DEFINE_STORAGE 10000 int i = 0; if (LocalBit[END_MARK_SCANNING] == 1) { for (i = 0; i < LocalWord[SCAN_CODE_LENGTH]; i ++) { LocalWord[SELF_DEFINE_STORAGE + i] = LocalWord[STORAGE_START + 1]; } LocalBit[END_MARK_SCANNING] = 0; }
Compile code ด้านบน
เปิด Global Script ล่าง Script ตรงแถบด้านซ้ายแล้วกด New
เลือก ScanLogic->[ID:1] ใน Dropdown ซึ่งคือโค้ดที่เราเพิ่งเขียนเมื่อกี้ เลือก Frequency เป็น 50 แล้วกด OK
เปิด ASCII Display ตรงแถบด้านขวาและกดปุ่มหลังแถบ Monitor Address
ป้อนค่า LW 10000 ซึ่งเป็นตัวที่เราสนใจเข้าไปและกด ENT
ค่า Total ให้ระบุจำนวนตัวอักษรตามความยาว Barcode ซึ่งในตัวอย่างนี้ระุบุเป็น 8 เลือก Font size ตามต้องาร กด OK แล้วลากสร้างปุ่มขึ้นมา 1 ปุ่ม
Download สิ่งนี้เข้าไปในตัวหน้าจอ
ลอง Scan Barcode ที่เตรียมไว้ ถ้าทำทุกอย่างถูกต้อง ปุ่มตรงหน้าจอจะแสดงผลตามค่า ASCII ที่ดึงมาได้
ตาราง ASCII and Hexadecimals จะบอกเราได้ว่า ในค่า ASCII ที่เราต้องการนั้น เราต้อง Config เลขฐาน 16 อย่างไร เช่น ถ้าต้องการให้ ASCII เป็น 123 เมื่อเทียบจากในตารางแล้วจะได้ค่าของเลขฐาน 16 เป็น 313233 เป็นต้น
Code เพิ่มเพื่อเช็คว่า LocalWord ที่ 10,000 มีค่าเป็น 123 หรือไม่ และถ้าใช้จะสั่งให้ Y0 ติด โดย Code ใหม่จะเป็นตามด้านล่างนี้
//ToDo #define END_MARK_SCANNING 60147 #define SCAN_CODE_LENGTH 60999 #define STORAGE_START 61000 #define SELF_DEFINE_STORAGE 10000 int i = 0; if (LocalBit[END_MARK_SCANNING] == 1) { for (i = 0; i < LocalWord[SCAN_CODE_LENGTH]; i++) { LocalWord[SELF_DEFINE_STORAGE + i] = LocalWord[STORAGE_START + 1]; } LocalBit[END_MARK_SCANNING] = 0; // 1 (ASCII) => 31 (Hexadecimal) // 2 (ASCII) => 32 (Hexadecimal) // 1 ASCII Character => 8 bits // 1 Word => 2 ASCII Character if (LocalWord[SELF_DEFINE_STORAGE] == 0X3231 && LocalWord[SELF_DEFINE_STORAGE + 1] == 0X33) { Y0 = 1; } }
Double click ตรง New ใต้แถบ Variable settings ด้านล่าง และตั้งค่า
Name: Y0
Data type: bool
Address: 0x0
แล้วกด Compile
Download ลง HMI
ลอง Scan อีกรอบที่ Barcode ตัว 123 จะเห็นว่า Y0 ติด
เขียนเงื่อนไขเพิ่มเติมสำหรับตัว 456 โดย Double Click ที่ ScanLogic->[ID:1] ใต้ Script list อีกรอบ
ให้เขียน Code เพิ่มตามด้านล่าง
//ToDo #define END_MARK_SCANNING 60147 #define SCAN_CODE_LENGTH 60999 #define STORAGE_START 61000 #define SELF_DEFINE_STORAGE 10000 int i = 0; if (LocalBit[END_MARK_SCANNING] == 1) { for (i = 0; i < LocalWord[SCAN_CODE_LENGTH]; i++) { LocalWord[SELF_DEFINE_STORAGE + i] = LocalWord[STORAGE_START + 1]; } LocalBit[END_MARK_SCANNING] = 0; // 1 (ASCII) => 31 (Hexadecimal) // 2 (ASCII) => 32 (Hexadecimal) // 1 ASCII Character => 8 bits // 1 Word => 2 ASCII Character if (LocalWord[SELF_DEFINE_STORAGE] == 0X3231 && LocalWord[SELF_DEFINE_STORAGE + 1] == 0X33) { Y0 = 1; Y1 = 0; Y2 = 0; } else if(LocalWord[SELF_DEFINE_STORAGE] == 0X3534 && LocalWord[SELF_DEFINE_STORAGE + 1] == 0X36) { Y0 = 0; Y1 = 1; Y2 = 0; } else if (LocalWord[SELF_DEFINE_STORAGE] == 0X3837 && LocalWord[SELF_DEFINE_STORAGE + 1] == 0X39) { Y0 = 0; Y1 = 0; Y2 = 1; } else { Y0 = 0; Y1 = 0; Y2 = 0; } }
สร้าง Variable Y2 เพิ่มโดยการ Double Click แถวล่าง Y1 ในแถบ Variable settings ด้านล่าง ตั้งค่า Address เป็น Link 1 0X2
Compile Code และ Download ลง HMI
5. ถ้าทำทุกอย่างถูกต้อง เมื่อลอง Scan Barcode ต่างๆจะต้องเป็นไปตาม Logic ที่เขียนไว้ เช่น ถ้า Scan Barcode 123 => Y0 ติด ถ้า Scan 456 => Y1 ติด ถ้า Scan 789 => Y2 ติด และถ้า Scan Barcode ข้อมูลอื่นๆ จะไม่มีอะไรติดเลย