วิธีนี้จะใช้สิทธิ์ Windows NT Authentication ดังนั้นจึงเหมาะกับกรณีที่GENESIS32อยู่ในเครื่องเดียวกับMS SQL Server
ฐานข้อมูลตัวอย่างชื่อ test อยู่ในMS SQL Serverที่อยู่ในคอมพิวเตอร์เดียวกับGENESIS32 มีฃื่อInstanceคือsqlexpress2 ตารางที่ต้องการใช้คือt1มีคอลัมน์ดังแสดงในรูปล่าง
เปิดGraphworx32ขึ้นมา แล้วนำอ็อปเจ็ครูปภาพไปวางเพื่อทำงานเป็นปุ่ม ในปุ่มนี้เราจะใส่คำสั่งQueryเพื่อส่งข้อมูลไปเก็บในตารางt1 โดยใส่ค่าใมนคอลัมน์ v1, v2 และ Time_Date
ใส่ Dynamic Pick ในปุ่มโดยคลิ้กเลือกปุ่มแล้วคลิ้กไอคอน
เมื่อหน้าต่างProperty Inspectorปรากฏขึ้นมาให้เลือก Action เป็น Run Script แล้วคลิ้กปุ่ม Create…
ตั้งชื่อScriptเช่น sqltest คลิ้ก OK
จะพบหน้าโค้ดให้เราเขียน เราจะใช้โค้ดในรูปแบบดังนี้
Shell “พาธโปรแกรมsqlcmd –S ชื่อคอมพิวเตอร์\ชื่อInstance –d ชื่อDatabase –Q ""คำสั่งQueryที่ต้องการ””
ซึ่ง –S ใช้ระบุชื่อคอมพิวเตอร์และInstance
-d ใช้ระบุชื่อDatabase
-Q ใช้ระบุQuery String
ในตัวอย่างนี้ผมติดตั้งSQL Serverไว้ในพาธC:\Program Files\Microsoft SQL Serverซึ่งจะมีโปรแกรมsqlcmd.exeอยู่ในC:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe" และเนื่องจาากMS SQL Serverอยู่ในคอมพิวเตอร์เดียวกันก็สามารถใช้ชื่อเครื่องเป็น (local)แทนได้ และSQL Serverของผมมีชื่อ Instanceคือ sqlexpress2 ถ้าไม่รู้สามารถดูในโปรแกรมSql Server Configurationb Manager ได้
และในตัวอย่างนี้จะInsertข้อมูลRandomโดยใช้ฟังก์ชั่นRanmdomของSQL Server ให้กับคอลัมน์ v1, v2 ตามลำดับ และใช้ฟังก์ชั่นGetDate()เพื่อเอาวันเวลาปัจจุบันมาใส่ในคอลัมน์Time_Date ก็จะได้โค้ดดังนี้
Shell "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe -S (local)\sqlexpress2 -d test -Q ""insert into t1 (v1,v2,Time_Date) values (RAND(100),RAND(101),getdate())"""
เมื่อทดสอบรันGraphWorXและกดปุ่มก็จะได้ข้อมูลใหม่ไปเพิ่มในตารางt1
การประยุกต์ใช้กับSCADA
แทนที่จะกำหนดค่าตายตัวหรืือส่งค่าโดยใช้ฟังก์ชั่นของSQL Serverเราสามารถเอาค่าของOPC tagหรือVariableของGENESIS32ส่งไปแทนได้
ตัวอย่างโค้ด (โค้ดดังกล่าวนี้ไม่ได้ป้องกันกรณีสัญญาณOPCเป็นBAD ซึ่งจะทำให้ค่าที่ได้เป็น Null กรณีเช่นนี้จะไม่สามารถส่งค่าให้SQLได้ ควรรับค่าจากOPCด้วยตัวแปรแบบStringเสียก่อนแล้วแปลงเป็นค่าตัวเลขก่อนส่งให้SQL)
'************** ส่วนประกาศตัวแปร ประกาศไว้บนสุดของหน้า **************************************
Dim var1 As Double, var2 As Double, gc(1 To 2) As OpcHelper
'************* ส่วนโค้ดของเรา คัดลอกเอาเฉพาะในSubไปใช้งาน ************************************************
Public Sub NewScript(td As TriggerData)
On Error GoTo ErrHandler
' TODO: Add your code here
Set gc(1) = New OpcHelper
Set gc(2) = New OpcHelper
var1 = gc(1).Read("ICONICS.Simulator.1\SimulatePLC.Sine")
var2 = gc(2).Read("ICONICS.Simulator.1\SimulatePLC.Randaom")
Shell "C:\Program Files\Microsoft SQL Server\100\Tools\Binn\sqlcmd.exe -S (local)\sqlexpress -d test -Q ""insert into t1 (v1,v2,Time_Date) values (" & var1 & ",RAND(101),getdate())"""
Exit Sub
ErrHandler:
g.ConsoleMsg MSG_SEVERE_ERROR, "Script", "'NewScript' failed"
End Sub
ไม่มีความคิดเห็น:
แสดงความคิดเห็น