Home
ใช้COPC32เป็นOPC Data Logger ง่าย ไม่จำกัดTag PDF Print E-mail
Written by Administrator   
Tuesday, 09 February 2016 16:13

ตัวอย่างนี้จะใช้COPC32เก็บข้อมูลจากOPC Serverไว้ใน Microsoft SQL Server 2014 Express โดยใช้COPC32บนVisual Studio 2015 Express ข้อดีคือต้นทุนถูกกว่าOPC Plugin สามารถปรับการทำงานได้ตามต้องการ ไม่จำกัดจำนวนTag

 เวอร์ชั่นVDOชมได้ที่นี่

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

  • 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

 

ดาวน์โหลดตัวอย่างไฟล์โปรเจ็คล่าสุด(สำหรับCOPC32เวอร์ชั่นล่าสุด เม.ย. 2559) | ดาวน์โหลดไฟล์โปรเจ็คตัวอย่างt(เวอร์ชั่นเก่า)  

  (ทั้งสองตัวอย่างเปิดด้วย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ในMSSQL 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ตามลำดับ ข้อมูลที่จะใส่ก็ต้องเรียงตามคอลัมน์ดังกล่าวเพื่อให้ใส่ข้อมูลตรงตามคอลัมน์ ถ้าเราใช่Databaseและตารางชื่อต่างจากนี้ก็ต้องแก้ไขคำว่าtest และ t1ในโค้ดด้วยครับ

 

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

image

 

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

image

 

ถ้าหากต้องการนำข้อมูลที่เก็บได้ไปทำรายการก็สามารถใช้Excelมาดึงข้อมูลไปแสดงได้ หรือถ้าต้องการสร้างรายงานผ่านเว็บแบบไม่จำกัดจำนวนผู้ใช้ก็สามารถใช้ReportWorXสร้างระบบราบงานได้ ซึ่งทำให้ไม่ต้องเขียนโค้ดใดๆก็สามารถสร้างWeb Reportได้ง่ายๆ

Last Updated ( Wednesday, 06 April 2016 10:05 )
 

สิ่งที่น่าสนใจ

L53U Multi Power Transducer
L53U Multi Power Transducer
Single-phase / 2-wire and 3-wire, three-pase / 3-wire and 4-wire systems
More InformationPdf DownloadSpecification