GENESIS32 SCADA Advance : การอ้างถึงค่า OPC tag ด้วย VBA

มีหลายวิธีในการเอาค่า OPC tag มาใช้งานด้วย VBA ซึ่งถ้าเป็นการทำงานด้วย GENESIS32 โดยปกติเราไม่มีความจำเป็นต้องเขียนโค้ดVBAอยู่แล้ว แต่ถ้าหากเรามีความต้องการใดๆที่จะพัฒนาต่อยอดความสามารถของ GENESIS32 แล้วต้องการเอาค่าจาก OPC tag มาใช้งาน เราก็สามารถทำได้โดยใช้โค้ด VBA ดังนี้

เมื่อต้องการอ้างถึงค่าจาก ProcessPoint

image

รูปที่ 1 Process Point

จากรูปที่ 1 จะเห็น OPC tag ที่เราใช้คือ ICONICS.Simulator.1\SimulatePLC.Random และเรายังตั้งชื่อ Process Point ว่า ppt อีกด้วย

เราสามารถเอาค่าจาก OPC tag มาใช้ด้วยโค้ด VBA ได้ 2 วิธีคือจะอ้างชื่อเต็มอย่าง ICONICS.Simulator.1\SimulatePLC.Random
หรือจะใช้ชื่อ Object Name อย่าง ppt1 ก็ได้ เช่นถ้าต้องการเอาค่ามาแสดงใน Popup เมื่อคลิ้กปุ่มบน GraphWorX เราก็เอาปุ่มมาวาง จากนั้นเลือก Run Script จากรายการ Action แล้วคลิ้กปุ่ม Create เพื่อสร้าง Script จากนั้นตั้งชื่อ เช่นในที่นี้ตั้งชื่อ test แล้วคลิ้ก OK

image

รูปที่ 2

เราจะพบหน้า VBA ให้เขียนโค้ดเพื่อแสดง Popup ด้วยคำสั่ง MsgBox “สิ่งที่ต้องการแสดง”

image

รูปที่ 3

จากรูปที่ 3 เราต้องการแสดงค่า OPC tag ที่อยู่ในหน้าแสดงผล เราจึงอ้างถึงหน้าแสดงผลเสียก่อนด้วย ThisDisplay จากนั้นใช้คำสั่ง GetPointObjectFromName(“ชื่อOPC Tag”) เพื่อเอา OPC Tag มา จากนั้นระบุว่าจะเอาค่าของ OPC Tag จึงใช้ Value ต่อท้ายคำสั่งดังนี้

MsgBox ThisDisplay.GetPointObjectFromName(“ICONICS.Simulator.1\SimulatePLC.Random”).Value

เมื่อเข้าสู่ Runtime ของ GraphWorX ให้คลิ้กปุ่มที่เราเอามาวางจะเห็น Popup แสดงค่าของ OPC tag ดังกล่าว

image

รูปที่ 4

 

อีกวิธีกหนึ่งคือการอ้างถึงชื่อ Object โดยเขียนโค้ดแทนของเดิมดังนี้

image

รูปที่ 5

จากรูปที่ 5 แทนที่เราจะอ้างถึงชื่อ OPC tag เต็มๆ ก็ใช้ชื่อ Object ที่เราต้องให้ในรูปที่ 2 แทนชื่อเต็ม โดยใช้ GetDynamicObjectFromName(“ชื่อObject”).DataSource แทนชื่อเต็ม ๆนั้น

   MsgBox ThisDisplay.GetPointObjectFromName(ThisDisplay.GetDynamicObjectFromName(“ppt1”).dataSource).Value

ข้อดีของวิธีนี้คือ ถ้าเราเปลี่ยน OPC tag ใน ProcessPoint เราไม่ต้องเขียนโค้ดใหม่เพราะเราไม่ได้อ้างชื่อเต็มนั่นเอง

ทั้งสองวิธีดังกล่าวทำได้เมื่อเรามีการใช้งาน OPC tag นั้นๆในหน้าแสดงผลของเรา โดยเฉพาะวิธีที่สองนั้นต้องมีการตั้งชื่อObject

นอกจากนี้หากต้องการเอาค่าที่แสดงใน ProcessPoint แบบเห็นเช่นใดก็เอาเช่นนั้นมาทั้งตำแหน่งทศนิยมที่กำหนดว่าจะต้องแสดงกี่ตำแหน่ง หน่วยที่แสดงทั้งต่อท้ายหรือนำหน้าค่าใน Prcess Point ก็สามารถทำได้ ต่างจากการเอาค่า OPC tag โดยตรงมาแสดงเช่นค่า OPC tag ตรง ๆอาจได้ 23.456789 แต่ใน Process Point เรากำหนดให้แสดงทศนิยมสองตำแหน่งคือ 23.45 เราก็จะได้ค่าเป็น 23.45 ตามที่ปรากฏใน ProcessPoint วิธีนี้คือการอ้างถึงค่า Text ที่ปรากฏใน Process Point นั่นเอง ทำให้เราสามารถได้ค่าที่ตรงกับที่แสดงใน Process Point วิธีการนี้จะต้องตั้งชื่อ Object ในแท็ป Text ของ ProcessPoint ดังรูปที่ 6 โดยตั้งชื่อเป็นอะไรก็ได้ แล้วใช้คำสั่ง GetVisibleObjectFromName แทน GetPointObjectFromName

image

รูปที่ 6

คำสั่งที่ใช้คือ

MsgBox ThisDisplay.GetVisibleObjectFromName(“txt1”).Text

เมื่อเข้าสู่ Runtime จะได้ผลลัพธ์แสดงค่า text ตรงกับ ProcessPoint ดังรูปที่ 7

image

รูปที่ 7

ส่วนปุ่มที่รัน Script ในหน้าแสดงผลถ้าเราต้องการเปลี่ยน text ที่แสดงบนปุ่มก็คลิ้กขวา Edit text ได้

image

รูปที่ 8

 

การเอาค่าของ OPC tag แต่ละวิธีนั้นขึ้นอยู่กับลักษณะการใช้งาน ถ้าต้องการเอาไปคำนวนต่อก็ควรใช้สองวิธีแรก แต่ถ้าแค่ต้องการเอาค่าที่ตรงกับการแสดงผลของ ProcessPoint ก็ใช้วิธีสุดท้าย

การเขียนค่ากลับไปยัง OPC Server

หากต้องการเขียนค่าผ่าน OPC Server เพื่อสั่งงาน Hardware สามารถทำได้ง่าย ๆ ตามโค้ดแต่ละวิธีนั้น ๆ เช่น

ThisDisplay.GetPointObjectFromName(“ICONICS.Simulator.1\SimulatePLC.Random”).Value = 300

หรือ

ThisDisplay.GetPointObjectFromName(ThisDisplay.GetDynamicObjectFromName(“ppt1”).dataSource).Value = 300

 

คือการเขียนค่า 300 ให้กับ ProcessPoint

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s