Home
COPC DLL : Importชื่อOPC tag ไม่ต้องกำหนดชื่อเองอย่างไร PDF Print E-mail
Written by Administrator   
Tuesday, 16 May 2017 17:54

ท่านที่สร้างSCADAด้วยCOPC DLLบนVisual Studio/Visual Studio Expressเป็นต้น ทั้งVBและC# เมื่อมีจำนวนOPC tagที่ต้องใช้จำนวนมากแล้วต้องการนำเข้าOPC tagที่ExportจากOPC Serverโดยตรง กล่าวคือไม่ต้องการพิมพ์ชื่อOPC tagเองในโค้ดเพื่อความสะดวกและไม่ให้โค้ดยาว บทความนี้จะแสดงวิธีการนั้นครับ

 

ชมแบบVDO

 

ก่อนอื่นให้Exportชื่อOPC tagจากOPC Serverเสียก่อน

เช่นจากKepware ให้เปิดOPC Quick Client (1) แล้วคลิ้กขวาที่กลุ่มของOPC tag (2) จากนั้นเลือกExport CSV (3)

 

image

 

 

บันทึกไว้ในไดเรกทอรี่ที่เราต้องการ เช่นG:\

image

 

เปิดไฟล์CSVด้วยExcelแล้วลบคอลัมน์และแถวที่ไม่ใช่ชื่อOPC tagทิ้งไป

image

 

image

 

ผลลัพธ์ของไฟล์เมื่อเปิดด้วยNotepadจะได้ดังนี้

image

 

เมื่อExportและจัดรูปแบบเสร็จแล้วให้ไปเขียนโค้ดนำเข้าข้อมูลจากไฟล์CSVข้างต้น

ในตัวอย่างนี้จะแสดงวิธีการสำหรับC#

เราจะใช้System.IOดังนั้นให้เพิ่มSystem.IOเข้าไปในโค้ดบนสุดในส่วนUsingดังนี้

using System.IO;

 

ในส่วนการกำหนดคุณสมบัติของCOPCว่าจะให้ติดต่อOPC Server/OPC Tagอะไร แทนที่จะกำหนดชื่อOPC tagโดยตรงให้นำเข้าจากไฟล์ดังนี้

จากโค้ดเราอ่านข้อมูลจากไฟล์csvเข้ามา(ใช้ไฟล์txtก็ได้) จากนั้นวนลูปเซ็ตค่าให้COPC DLLรู้ว่าจะติดต่อOPC tagชื่ออะไรบ้างด้วยโค้ดในบรรทัด

 

foreach (string line in lines)
            {
                copc1.setItm(i, line);
                i++;
            }

โค้ดเต็มจะเป็นดังนี้

public partial class Form1 : Form
    {
        copcClass copc1;

        public Form1()
        {
            InitializeComponent();
            copc1 = new copcClass();
            copc1.datChange += Copc1_datChange;
            copc1.svrName = "Kepware.KEPServerEX.V6";

            string[] lines = System.IO.File.ReadAllLines (@"G:\Channel1.Device1.csv");

            copc1.tagAmount = Convert.ToInt16(lines.Length);



            short i = 0;

            foreach (string line in lines)
            {
                copc1.setItm(i, line);
                i++;
            }


            copc1.UpdateRate = 1000;

            try
            {
                copc1.connectng();
            }
            catch(Exception err)
            {

            }

        }

จำนวนของtagและหมายเลขลำดับtagจะยึดตามข้อมูลที่นำเข้ามาจากไฟล์ เช่นจากไฟล์ข้างต้นมี6บรรทัด ก็จะมีจำนวนtagของCOPC 6 ตัวตั้งแต่ itm 0 จนถึง itm 5 ดังนั้นถ้าเราจะอ้างอิงถึงtagไหนก็ดูในไฟล์ข้อมูลว่าเป็นตัวที่เท่าไหร่หรือเปิดในExcelจะมีหมายเลขแถวช่วยให้เราสังเกตุได้สะดวก itm 5 จะอยู่แถวที่6เป็นต้น

 

image

 

โค้ดเต็มของทั้งProject

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using cpcUnlimited;
using System.Diagnostics;
using System.IO;

namespace COPC
{
    public partial class Form1 : Form
    {
        copcClass copc1;

        public Form1()
        {
            InitializeComponent();
            copc1 = new copcClass();
            copc1.datChange += Copc1_datChange;
            copc1.svrName = "Kepware.KEPServerEX.V6";

            string[] lines = System.IO.File.ReadAllLines
       (@"G:\Channel1.Device1.csv");

            copc1.tagAmount = Convert.ToInt16(lines.Length);

            short i = 0;

            foreach (string line in lines)
            {
                copc1.setItm(i, line);
                i++;
            }


            copc1.UpdateRate = 1000;

            try
            {
                copc1.connectng();
            }
            catch(Exception err)
            {

            }

        }


        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                copc1.disconnec();
            }catch(Exception err)
            {
                MessageBox.Show(err.Message);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                label1.Text = copc1.tgVal(0).ToString();
                label2.Text = copc1.tgVal(1).ToString();
                label3.Text = copc1.tgVal(4).ToString();
                
            } catch (Exception err)
            {
            }

            
        }
            
 
    }
}

image

Last Updated ( Tuesday, 16 May 2017 11:20 )
 

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

Wednesday, 18 February 2015 14:02

3000Folderen 110PxThe compact temperature devices of the PR 3000 series provide high accuracy, fast response time AND low temperature drift – without compromise.