Friday, May 22, 2020

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

  • นอกจากจะใช้ Plug-in ของ Kepware ชื่อ DataLogger ในการบันทึกข้อมูลจาก OPC ลง ฐานข้อมูลแล้ว ยังมีทางเลือกอื่น อีก
  • คือใช้ COPC32 เป็น OPC Data Logger

ที่มาจาก: https://yes5.wordpress.com/
ซอร์ฟแวร์ที่ต้องใช้
    MS SQL Server หรือ MS SQL Server Express
    Visual Studio 2015 Express
    COPC32
    OPC Server ค่ายใดก็ได้ที่ต้องการเอาข้อมูลไปเก็บใน MS SQL Server
ในตัวอย่างนี้ได้สร้าง Database ชื่อ test ไว้ใน MS SQL Server และสร้างตารางชื่อ t1 ซึ่งมีคอลัมน์แสดงในรูป คอลัมน์ “id” เป็นข้อมูลแบบ auto increment


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


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


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


คลิกที่ไอคอนของ COPC32 บริเวณลูกศรเล็กๆ เลือก ActiveX-Properties
เพื่อเข้าไปกำหนด OPC Server, OPC tag ที่ต้องการ
เปิดดูโค้ดของ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ตามลำดับ ข้อมูลที่จะใส่ก็ต้องเรียงตามคอลัมน์ดังกล่าวเพื่อให้ใส่ข้อมูลตรงตามคอลัมน์

No comments:

Post a Comment