Как написать из формы C # в OPC SERVER - PullRequest
0 голосов
/ 24 июня 2019

Я делаю OPC-клиент, который использует "использование OPCAutomation dll". Я пытаюсь записать в машину, которая является сервером OPC, но я не знаю, как это сделать. В данный момент я могу читать значения с OPC-сервера, но не могу записать в него

Я читал о двух инструкциях AsyncWrite и SyncWrite. Я пытался заполнить аргументы, но я не могу заставить его работать. Было бы здорово, если бы вы могли мне помочь

. , , , , , .

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OPCAutomation;
using CWDataServer;

namespace DomaileOPC
{
public partial class FrmMain : Form
{
    OPCServer ObjOPCServer;
    OPCGroups ObjOPCGroups;
    OPCGroup ServidorOPC;
    string OPCServerName;



    //Array ClientHandlesGlobal;
    //Array ItemValuesGlobal;
    //Array error;
    //int TransactionIDGlobal;
    //int NumItemsGlobal;

    public FrmMain()
    {
        try
        {
            InitializeComponent();
            OPCServerName = "View.OpcServer.1";
            ObjOPCServer = new OPCServer();
            ObjOPCServer.Connect(OPCServerName, "");
            ObjOPCGroups = ObjOPCServer.OPCGroups;
            ServidorOPC = ObjOPCGroups.Add("Alarms");
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\bAirPressureAlarm", 1);//1
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\bAlarmPresent", 2);//2
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\rPressureSetpointLbs", 3);//3
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\rRecipeStepPressureKgOPCDisplay", 4);//4 \rRecipeStepPressureKgOPCDisplay
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\rRecipeStepSpeed", 5);//5
            ServidorOPC.OPCItems.AddItem(@"123.123.123.123\intCurrentStep", 6);//6




            ServidorOPC.UpdateRate = 10;
            ServidorOPC.IsActive = true;
            ServidorOPC.IsSubscribed = true;

            ServidorOPC.DataChange += new DIOPCGroupEvent_DataChangeEventHandler(ObjOPCGroup_DataChange);
        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
    }

    public void ObjOPCGroup_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
    {
        //ClientHandlesGlobal = ClientHandles;
        //ItemValuesGlobal = ItemValues;
        //TransactionIDGlobal = TransactionID;
        //NumItemsGlobal = NumItems;
        for (int i = 1; i <= NumItems; i++)
        {
            int valor=Convert.ToInt32(ClientHandles.GetValue(i));
            switch (valor){
                case 1:

                string value=ItemValues.GetValue(i).ToString();
                    txtPressureAl.Text = value;
                    break;
                case 2:
                    string value1=ItemValues.GetValue(i).ToString();//Alarm:  1 when alarm present, 0 means no alarm
                    txtAlarmP.Text = value1;
                    break;
                case 3:
                    string value2=ItemValues.GetValue(i).ToString();//Integer variable value of pounds of force to apply to fixture. 

                    txtFixPressure.Text = value2;
                    break;
                case 4:
                    string value3=(ItemValues.GetValue(i)).ToString();//This is a real representing the setpoint pressure in Kg.
                    txtKgPressure.Text = value3;
                    break;
                case 5:
                    string value4 = ItemValues.GetValue(i).ToString();// speed

                    txtSpeedDisplay.Text = value4;
                    break;
                case 6:
                    string value5 = ItemValues.GetValue(i).ToString();//This is a real representing the setpoint pressure in Kg.
                    txtCurrentStep.Text = value5;
                    break;
            }
        }

    }
    private void btnWriteOPC_Click(object sender, EventArgs e)
    {


    }
}
}
...