OPCDAdamo


  • 注册 OPCDAAuto.dll
  • 将OPCDAAuto.dll复制到D:\csharp_pro\OPCDAdamo\bin\Debug路径下
  • 引用右键添加引用,找到路径,浏览,选择dll文件,确定

SQL dll 实例名 SQL Server Management Studio ,前面计算机名(或IP),后面服务器名 OPC dll 服务名 ProgID Node\ProgID //网络邻居

     private void RefreshServer() {
        //清空 
        IPHostEntry IPhost = Dns.GetHostEntry(Environment.MachineName);
        if(IPhost.AddressList.Length > 0)
        {
            for(int i = 0; i < IPhost.AddressList.Length;i++)
            {
                string host = Dns.GetHostEntry(IPhost.AddressList[i]).HostName;
                if (!this.cmb_ServerNode.Items.Contains(host))
                {
                    this.cmb_ServerNode.Items.Add(host);
                }
            }
        }
    
    }

     //增加线程,解决启动卡顿。

        Task.Run(new Action(() =>
        {

            RefreshServer();

        }));

    //从不是创建控件的线程访问它,解决办法,增加Invoke方法。
                
                this.Invoke(new Action(() => {
                    if (!this.cmb_ServerNode.Items.Contains(host))
                    {
                        this.cmb_ServerNode.Items.Add(host);
                    }

                }));

创建对象,增加方法

    OPCAutomation.OPCServer OPCServer = new OPCAutomation.OPCServer();
    private void cmb_ServerNode_SelectedIndexChanged(object sender, EventArgs e)
    {
    
        //dynamic不是标准c#语法,需要object转换,
        object serverlist = OPCServer.GetOPCServers(this.cmb_ServerNode.Text);
        //serverlist需要强转Array
        foreach(var item in (Array)serverlist)
        {
            if (!this.cmb_ServerName.Items.Contains(item))
            {
                this.cmb_ServerName.Items.Add(item);
            }
        }

    }

返回类型是void,使用捕获try、catch

      private void btn_Connect_Click(object sender, EventArgs e)
    {
        try {

            PCServer.Connect(this.cmb_ServerName.Text, this.cmb_ServerNode.Text);
        }
        catch (Exception)
        {
            MessageBox.Show("OPC连接失败");
            return;
        }
        MessageBox.Show("OPC连接成功");

        
    }

    //Array类型获取

        int clienthandle = Convert.ToInt32(ClientHandles.GetValue(1));

本文章使用limfx的vscode插件快速发布