หน้าเว็บ

วันจันทร์ที่ 8 ธันวาคม พ.ศ. 2557

GENESIS SCADA: ตัวอย่างการเก็บข้อมูลOPCด้วยScriptWorX

GENESIS32 และ GENESIS64 สามารถเก็บข้อมูลจากOPC Serverด้วยTrendWorX แต่ถ้าต้องการเก็บข้อมูลในรูปแบบที่เราต้องการเช่นสามารถออกแบบคอลัมน์และการจัดเรียงคอลัมน์ตามต้องการได้เองก็สามารถใช้ScriptWorXซึ่งมีความยืดหยุ่นในก่ารเก็บข้อมูลจากOPC Serverไว้ในDatabaseได้ บทความนี้จะแสดงตัวอย่างการเก็บในMS SQLครับ

สร้างตารางเก็บข้อมูล

ก่อนอื่นสร้างตารางเก็บข้อมูลในMS SQL Server เสียก่อน เช่นในตัวอย่างนี้สร้างตารางชื่อswxที่มีคอลัมน์time_date, v1, v2 เพื่อเก็บค่าวันเวลาและค่าOPC tagสองตัวตามลำดับ โดยเก็บในDtabaseชื่อtestในMS SQL Server (เราสามารถออกแบบคอลัมน์ได้ตามที่ต้องการ)

image

 

สร้างScriptในScriptWorX

เปิดโปรแกรมScriptWorX 2010หรือใหม่กว่าขึ้นมา(โมดูลหนึ่งของGENESIS32/GENESIS64)แล้ว คลิ้กขวาที่โปรเจ็คที่สร้างขึ้นมาแล้ว > เลือก New > Designer/Threadเพื่อสร้างDesignerขึ้นมาใหม่

image

ตั้งชื่อDesignerเช่น dbrec แล้วคลิ้กApply

image

สร้าง New > Script

image

ตั้งชื่อScriptเช่นrec1 จากนั้นคลิ้กปุ่ม…เพื่อเลือกTriggerมาสั่งงานScriptให้ทำงาน

image

ในที่นี้จะให้Scriptทำงานทุก 15 วินาทีก็เลือกTime TriggerคือEvery 15 sec แล้วคลิ้กOK

image

คลิ้กApply แล้วคลิ้กEdit VBA Codeเพื่อเข้าไปเขียนโค้ด

image

โปรแกรมScriptWorXจะเปิดโค้ดดังรูป จะพบSubชื่อเดียวกับScriptที่ตั้งชื่อไว้ และจะให้เราเขียนโค้ดใต้ตัวอักษรสีเขียว

image

โค้ดดังต่อไปนี้ใช้ในการสั่งบันทึกข้อมูลลงใน MS SQL Serever

Shell "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe -S (local)\sqlexpress2 -d test -Q ""insert into swx (v1,v2,time_date) values (" & v1 & "," & v2 & ",getdate())"""

ซึ่งจะอยู่ในรูปแบบ

Shell “พาธโปรแกรมsqlcmd –S ชื่อคอมพิวเตอร์\ชื่อInstance –d ชื่อDatabase –Q ""คำสั่งQueryที่ต้องการ””

ซึ่ง –S ใช้ระบุชื่อคอมพิวเตอร์และInstance

-d ใช้ระบุชื่อDatabase

-Q ใช้ระบุQuery String ซึ่งในที่นี้ใช้คำสั่งInsert



พาธของโปรแกรม MS SQL Management Studio (sqlcmd.exe) ของผมอยู่ใน C:\Program Files\Microsoft SQL Server\100\Tools\Binn\ (ค้นหาไฟล์ sqlcmd.exe ก็จะรู้พาธที่แท้จริง)


ส่วนชื่อคอมพิวเตอร์และInstanceในที่นี้คือ (local)\sqlexpress2 (ดูจากโปรแกรมMS SQL Management Studio)


ชื่อของDatabaseคือ test และตารางข้อมูลชื่อswxโดยจะInserข้อมูลในคอลัมน์v1, v2 และ time_date


ทดสอบเก็บค่า Random


ทดสอบเก็บค่าRandomโดยใช้โค้ดดังต่อไปนี้

Public Sub rec1(td As TriggerData)
On Error GoTo ErrHandler
' TODO: Add your code here
Dim v1 As Variant, v2 As Variant

Randomize (DateTime.Second(DateTime.Now))
v1 = Rnd(1) * 100
v2 = Rnd(2) * 100

Shell "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe -S (local)\sqlexpress2 -d test -Q ""insert into swx (v1,v2,time_date) values (" & v1 & "," & v2 & ",getdate())"""


Exit Sub
ErrHandler:
g.ConsoleMsg MSG_SEVERE_ERROR, "Script", "'rec1' failed"
End Sub

 


จากโค้ดจะเป็นการนำค่าRandomมาเก็บในตัวแปร v1 และ v2 ก่อนที่จะเอา v1, v2 ไปInserในMS sQLด้วยคำสั่งShell


ทำการบันทึกไฟล์โดยคลิ้กไอคอนSave


image


สร้างไฟล์ DLL ดังรูป


image


กลัมาที่หน้าScriptWorxปกติ แล้วเลือก Make All VBA DLLs


image


แล้วคลิ้กไฟจราจรให้เป็นสีเขียวเพื่อทดสอบ


image


ข้อมูลจากค่าRandomจะถูกเก็บในคอลัมน์ v1, v2 ทุก 15 วินาที พร้อมวันที่เวลา


image


 


ทดสอบเก็บค่าOPC tag


เปลี่ยนจากค่าRandomเป็นค่าจากOPC Severได้ โดย


ก่อนอื่นเลือกเมนู Tools > References แล้วเลือกGenClientWrapper 1.0 Type Library เพื่อให้สามารถใช้ไลบรารี่เกี่ยวกับการติดต่อOPC Serverจากนั้นคลิ้กOK

image

เปลี่ยนโค้ดจากที่ให้ v1, v2 รับค่าจาก Random มาเป็นรับค่าจากOPC tag


 

Public Sub rec1(td As TriggerData)
On Error GoTo ErrHandler
' TODO: Add your code here
Dim v1 As Variant, v2 As Variant
Dim gc(1 To 2) As New OpcHelper


v1 = gc(1).Read("ICONICS.Simulator.1\SimulatePLC.Sine")
v2 = gc(2).Read("ICONICS.Simulator.1\SimulatePLC.Random")


Shell "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe -S (local)\sqlexpress2 -d test -Q ""insert into swx (v1,v2,time_date) values (" & v1 & "," & v2 & ",getdate())"""

Exit Sub
ErrHandler:
g.ConsoleMsg MSG_SEVERE_ERROR, "Script", "'rec1' failed"
End Sub

 



จากโค้ด ให้v1รับค่าจากOPC tagชื่อSine และv2รับค่าจากRandom (เราสามารถCopyพาธของOPC tagมาจากProcessPoint.นGrahWorXได้)


 


จากนั้น Save และเลือก File > Make … DLL


กลับไปที่หน้า ScriptWorXปกติแล้วเลือก File > Make All VBA DLLs


รันScriptWorXเพื่อทดสอบค่าจากOPC tagก็จะถูกเก็บในตารางที่เราออกแบบไว้


 


ประโยชน์ของการทำDataLoggerวิธีนี้คือความยืดหยุ่น ออกแบบตารางตามต้องการและจัดดเรียงคอลัมน์ได้ตามที่เรากำหนดครับ


image

ไม่มีความคิดเห็น:

แสดงความคิดเห็น