ใช้COPC32เป็นOPC Data Logger ง่าย ไม่จำกัดTag

ตัวอย่างนี้จะใช้COPC32เก็บข้อมูลจากOPC Serverไว้ใน Microsoft SQL Server 2014 Express โดยใช้COPC32บนVisual Studio 2015 Express

 

ซอร์ฟแวร์ที่ต้องใช้

  • MS SQL Server หรือ MS SQL Server Express (ดาวน์โหลดที่นี่ โดยดาวน์โหลดSQLEXPRWT_Architecture_Language.exeซึ่งประกอบด้วยSQL Server ExpressและSQL Management Studio Express)
  • Visual Studio 2015 Express (download here)
  • COPC32 (download trial here) แล้วทำการติดตั้งCOPC32ให้เรียบร้อย
  • OPC Serverค่ายใดก็ได้ที่ต้องการเอาข้อมูลไปเก็บในMS SQL Server

ในตัวอย่างนี้ได้สร้างDatabaseชื่อtestไว้ในMS SQL Serverและสร้างตารางชื่อt1ซึ่งมีคอลันม์แสดงในรูป คอลัมน์“id”เป็นข้อมูลแบบauto increment

image

MS SQL Serverมีinstance nameดังแสดง คือชื่อเครื่องคอมพิวเตอร์  และเวลาเรียกใช้สามารถใช้ “(local)” เป็นชื่อเรียกอ้างอิงได้เช่นกัน ถ้าเราติดตั้งMS SQL Expressแบบดีฟอล์ตก็อาจจะมีชื่อInstanceอีกแบบเช่น“ACER\SQLEXPRESS” ซึ่งสามารถเรียกอ้างอิงได้ทำนองเดียวกันว่า  “(local)\SQLEXPRESS”

image

ดาวน์โหลดไฟล์โปรเจ็คตัวอย่าง OPC Data logging example project (135kb) (เปิดด้วยVisual Studio Express 2015)

เปิดโปรเจ็คที่ดาวน์โหลดมาแล้วทำการตรวจสอบว่ามีCOPC32ในToolboxของVisual Studioดังรูป ถ้าไม่มีให้คลิ้กขวาที่ToolboxเลือกChoose Itemแล้วเลือกCOPC32ในแท็ปCOM Components

image

ในตัวอย่างจะใช้Timer2แสดงค่าจากOPC tagบนLabelสามตัวทุกๆ1วินาที และใช้Timerชื่อTimer1เพื่อเก็บข้อมูลไว้ในSQL Serverทุกๆ5วินาที

image

คลิ้กที่ไอคอนของCOPC32บริเวณลูกศรเล็กๆ เลือกActiveX-Propertiesเพื่อเข้าไปกำหนดOPC Server, OPC tagที่ต้องการ

image

 

image

เปิดดูโค้ดของTimer2จะพบโค้ดการเอาข้อมูลOPC tagมาเก็บไว้ในตัวแปรแบบGlobalชื่อ v(0), v(1)และ v(2) ก่อนที่จะนำค่าของตัวแปรดังกล่าวไปแสดงในLabel (ที่ทำเช่นนี้ก็เพื่อไม่ต้องเรียกใช้OPCหลายรอบ สามารถใช้ค่าในตัวแปรแทนได้ จะทำให้OPCไม่ทำงานหนัก)

    Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick
        For i = 0 To 2
            v(i) = Axcopc1.GetVl(i)
        Next

        Label1.Text = v(0).ToString()
        Label2.Text = v(1).ToString()
        Label3.Text = v(2).ToString()
    End Sub

ในโค้ดของTimer1จะเป็นการใช้คำสั่งshell เพื่อเรียกใช้ SQLCMD.exe ซึ่งเป็นโปรแกรมหนึ่งของMS SQL Management Studio เราเรียกใช้SQLCMD.exeเพื่อส่งคำสั่งInsertข้อมูลไปยังตารางt1ในMS SQL Server (ดังนั้นถ้ามีตารางและDatabaseชื่อต่างจากนี้ก็ให้แก้ไขให้ถูกต้องด้วย)

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        Shell(“C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.exe -S (local) -d test -Q “”insert into t1 (v1,v2,v3,Time_Date) values (” & v(0) & “,” & v(1) & “,” & v(2) & “,getdate()) ”””)

    End Sub

อากูเมนต์ –S หมายถึง Server Name โปรดตรวจสอบว่ามี “\SQLEXPRESS” ตามหลังชื่อคอมพิวเตอร์หรือไม่ในMS SQL Management Studio ถ้ามี ก็ให้เปลี่ยนจาก (local) เป็น  (local)\SQLEXPRESS

–d หมายถึง Database Name ในตัวอย่างนี้Database nameคือtest

–Q หมายถึงคำสั่ง SQL query ตัวอย่างนี้เป็นการใช้Insert command เพื่อส่งค่า v(0), v(1), v(2) และวันเวลาปัจจุบันลงในตาราง t1 ในคอลัมน์ที่เกี่ยวข้อง โดยเราต้องเรียงลำดับตามคำสั่งInsert เช่นในตัวอย่างเป็นการใส่ข้อมูลในคอลัมน์ v1, v2,v3และTime_Dateตามลำดับ ข้อมูลที่จะใส่ก็ต้องเรียงตามคอลัมน์ดังกล่าวเพื่อให้ใส่ข้อมูลตรงตามคอลัมน์

สุดท้ายต้องตรวจสอบพาธของโปรแกรมSQLCMD.exeว่าตรงกับโค้ดข้างต้นหรือไม่ ถ้าไม่ตรงก็แก้พาธในโค้ดให้ตรงกับความเป็นจริง

image

หลังจากรันโปรเจ็คเพื่อทดสอบ ให้ตรวจสอบข้อมูบในMS SQL Serverว่าเก็บถูกต้องหรือไม่ ถ้าถูกต้องจะมีข้อมูลเก็บดังรูป

image

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