วิธีนี้จะใช้สิทธิ์ Windows NT Authentication ดังนั้นจึงเหมาะกับกรณีที่GENESIS32อยู่ในเครื่องเดียวกับMS SQL Server
ฐานข้อมูลตัวอย่างชื่อ test อยู่ในMS SQL Serverที่อยู่ในคอมพิวเตอร์เดียวกับGENESIS32 มีฃื่อInstanceคือsqlexpress2 ตารางที่ต้องการใช้คือt1มีคอลัมน์ดังแสดงในรูปล่าง
เปิดGraphworx32ขึ้นมา แล้วนำอ็อปเจ็ครูปภาพไปวางเพื่อทำงานเป็นปุ่ม ในปุ่มนี้เราจะใส่คำสั่งQueryเพื่อส่งข้อมูลไปเก็บในตารางt1 โดยใส่ค่าใมนคอลัมน์ v1, v2 และ Time_Date
ใส่ Dynamic Pick ในปุ่มโดยคลิ้กเลือกปุ่มแล้วคลิ้กไอคอนบนDynamic Toolbar
เมื่อหน้าต่าง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
ไม่มีความคิดเห็น:
แสดงความคิดเห็น