SCADA 4 Fun : ควบคุม Remote IO, PLC จาก SCADA ด้วย VB (1)

หากต้องการควบคุมฮาร์ดแวร์ที่เชื่อมต่อกับ GENESIS32 SCADA ไม่ว่าด้วยเหตุผลใดก็ตาม เราสามารถทำได้ผ่าน DataWorX32 ได้ แต่ถ้าต้องการควบคุมด้วย VB เราก็ยังทำได้บน GraphWorX ครับ

เนื่องจากวิศวกรจำนวนไม่น้อยใช้งาน Excel และมีความคุ้นเคยกับโปรแกรมมิ่งแบบ VB, VBA เราสามารถนำพื้นฐานเหล่านั้นมาควบคุม Hardware ผ่าน GENESIS32 SCADA ได้ โดยเหตุผลหลักที่ต้องการโปรแกรมควบคุม Harrdware บน SCADA ก็อย่างเช่น ต้องการควมยืดหยุ่น ต้องการแก้ไขจุดเดียวเป็น Central Control เฉพาะงานบางอย่าง ฯลฯ ดังนั้นบทความนี้จะแสดงวิธีการควบคุม HArdware ด้วย VBA ใน GraphWorX แบบง่ายๆ แต่นำไปใช้ได้จริง เช่นถ้าค่า Temperature ที่วัดได้จาก Temperature Controller มีค่าสูง ให้เอาไปเป็นเงื่อนไขสั่ง PLC1, 2, 3 ทำงานบางอย่างที่ต้องการ

ท่านใดที่ไม่ชอบเขียน script ของดูสักนิดจะรู้ว่า Script นี้ของ GENESIS32 ไม่ยากครับ

ก่อนอื่นดาวน์โหลดToolkitที่มีโค้ดตัวอย่างก่อนจาก ScriptToolkit

นำ ScriptToolkit ไปใช้

การใช้งานคือเปิดไฟล์ที่ดาวน์โหลดมา (ScriptToolkit.gdf) จากนั้นกด Atl + F11 บนแป้นพิมพ์เพื่อเปิดหน้า VBA ให้เลือกกิ่ง ThisDisplay จะพบโค้ดให้กด Ctrl + A เพื่อเลือกโค้ดทั้งหมดจากนั้น Copy ไปวางในไฟล์ gdf ของเรา โดยวางในกิ่ง ThisDisply เช่นกัน (ดับเบิ้ลคลิ้กที่กิ่ง ThisDisplayในไฟล์gdfของเราแล้ววางโค้ดลงไป)

image

รูปที่ 1 คัดลอกโค้ดทั้งหมดใน ThisDisplay ไปใช้

ควบคุม OPC tag อย่างง่าย

ถ้าเราต้องการอ่านค่าจาก ProcessPoint สามารุถใช้โค้ดง่าย ๆ ดังนี้

Dim a, b

a = ThisDisplay.getvl(“ppt1”)

b = ThisDisplay.getvl("ppt2")

จากโค้ดบนเป็นการอ่านค่าจาก ProcessPoint ชื่อ ppt1 และ ppt2 มาไว้ในตัวแปร a และ b ตามลำดับ (คำสั่ง getvl และ setvl จะใช้ได้ต่อเมื่อคัดลอกโค้ดดังกล่าวจาก ScriptToolkit.gdf มาใช้ในไฟล์ gdf ของเรา)

การตั้งชื่อ ProcessPoint สามารถทำได้ดังรูป

image

รูปที่ 2 ตั้งชื่อ ProcessPoint ในช่อง Object Name ของแท็ป PPT/DE

การเขียนค่าให้ OPC tag ทำได้ดังโค้ดนี้

c = a + b
ThisDisplay.setvl “ppt3”, c

เป็นการเอาค่า c ที่ได้จากการบวกของ a กับ b ส่งให้กับ ProcessPoint ชื่อ ppt3

โดยเราสามารถทดสอบการทำงานของโค้ดได้โดยรันไฟล์ ScriptToolkit.gdf จะได้ว่าค่าของ ProcessPoint ชื่อ ppt3 จะเท่ากับผลรวมระหว่าง ppt1 และ ppt2

image

รูปที่ 3 ProcessPoint ที่ใช้ทดสอบ (ลองป้อนค่าเข้าไปได้)

โดยจากรูปที่ 3 นั้นเราใช้ Timer1 เป็นตัวรันคำสั่ง ซึ่งสามารถดูได้โดยเข้าโหมดคอนฟิกก่อน จากนั้นดับเบิ้ลคลิ้กที่ Timer1 ที่แท็ป Pick คลิ้กปุ่ม Edit

image

รูปที่ 4

จะพบโค้ดของ Timer

Public c

Sub timer(o As GwxPick)

Dim a, b

a = ThisDisplay.getvl(“ppt1”)
b = ThisDisplay.getvl(“ppt2”)

c = a + b

ThisDisplay.setvl “ppt3”, c ‘— Set ppt3

If c > 500 Then
ThisDisplay.setvl “alarm1”, 1
Else
ThisDisplay.setvl “alarm1”, 0
End If

End Sub

โค้ดดังกล่าวส่วนหนึ่งได้อธิบายไปแล้ว อีกส่วนหนึ่งคือการตรวจสอบว่า c > 500 ใช่หรือไม่ ถ้าใช่ให้สั่งค่า ProcessPoint ชื่อ alarm1 เป็น 1 มิเช่นนั้นก็เป็น 0 ซึ่งค่านี้ลิงค์กับกราฟิกเพื่อใช้เปลี่ยนสีของวงกลมเป็นสีแดงด้วย มีข้อสังเกตุในส่วนประกาศตัวแปร c เป็นแบบ Public นั้น เนื่องจากต้องการเอาค่า c ที่ได้จาก a+b ไปใช้ในโค้ดโมดูลอื่น ๆ ได้ด้วยนั่นเอง

ส่วนการสร้าง Timer นั้นใช้ CheckBox ของ GENESIS32 แล้วกำหนด DynamicPick เป็น Run Script กำหนดออปชั่นดังรูป ส่วนเวลาให้กำหนดในช่อง Interval ซึ่งเป็นมิลลิวินาที (ถ้าเป็นการสร้าง Timer ใหม่ให้คลิ้กปุ่ม Create แล้วตั้งชื่อในช่อง Script name)

image

รูปที่ 5

สรุปว่าเราสามารถอ่านและเขียนค่าไปยัง Hardware ได้ผ่าน ProcessPoint ที่ลิงค์กับ IO ของ Hardware นั้น ๆ ทำให้สามารถควบคุม แลกเปลี่ยน และสร้างเงื่อนไข กับ PLC, Remote IO, Controller, Power Meter, ฯลฯ รวมกันจากส่วนกลางได้ด้วยสคริปต์อย่างง่าย ในตอนต่อ ๆ ไปจะมาพูดถุงการใช้สคริปต์ระหว่าง Timer หลาย ๆ ตัวต่อไปครับ

This entry was posted in Uncategorized. Bookmark the permalink.

4 Responses to SCADA 4 Fun : ควบคุม Remote IO, PLC จาก SCADA ด้วย VB (1)

  1. rapeepat says:

    โหลดไฟล์ScriptToolkit ไม่ได้อ่ะคับ

  2. patomporn says:

    ขอ ไฟล์ toolkit ใหม่ด้วยครับ ลิงค์เสียแล้วว

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s