OPC接口报错求助 点击:817 | 回复:0



小毛驴

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 0回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2016年5月09日
发表于:2016-05-09 23:25:17
楼主

小弟通过Opc Api接口获取一个正在运行的SCADA系统的监测值,代码如下:


MessageBox.Show("开始初始化信息");

            Opc.Da.Server m_server = null;//定义数据存取服务器

            Opc.IDiscovery m_discovery = new OpcCom.ServerEnumerator();//定义枚举基于COM服务器的接口,用来搜索所有的此类服务器。


            string host = ConfigurationSettings.AppSettings["host"].ToString();

            MessageBox.Show("开始初始化服务端信息,配置文件中配置的Host为==>" + host);

            Opc.Server[] servers = m_discovery.GetAvailableServers(Specification.COM_DA_20, host, null);

            textBox1.Text = "在服务器上找到" + servers.Length+"个Opc服务端,如下:";


            //daver表示数据存取规范版本,Specification.COMDA_20等于2.0版本。

            //LICM为计算机名,null表示不需要任何网络安全认证。

            if (servers != null)

            {

                foreach (Opc.Da.Server server in servers)

                {

                    textBox1.Text += server.Name + "\r\n";

                    string serverName = ConfigurationSettings.AppSettings["serverName"].ToString();

                    if (String.Compare(server.Name, serverName, true) == 0)

                    {

                        MessageBox.Show("配置文件中配置的的服务端名称为:" + serverName+",匹配成功!");

                        m_server = server;

                        break;

                    }

                }

            }

            try

            {

                if (m_server != null)//非空连接服务器

                {

                    MessageBox.Show("开始建立Opc连接");

                    m_server.Connect();//建立连接

                    MessageBox.Show("Opc连接建立成功");

                }

                else

                {

                    return;

                }

                //定义要读取的项目

                Opc.Da.Item[] items = new Opc.Da.Item[1];

                items[0] = new Opc.Da.Item();


                //项目名赋值

                items[0].ItemName = textBox2.Text;

                Opc.Da.ItemValueResult[] vresult = new Opc.Da.ItemValueResult[1];


                //读取值

                

                vresult = m_server.Read(items);


                MessageBox.Show("结果集:" + textBox2.Text + vresult.Length); 

                for (int i = 0; i < vresult.Length; i++)

                {

                    MessageBox.Show("item:" + items[i].ItemName + ",value:" + System.Convert.ToString(vresult[i].Value) + ",time:" + System.Convert.ToString(vresult[i].Timestamp)); 

                }


                //关闭连接

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

            finally {

                if (m_server != null)

                {

                    m_server.Disconnect();

                    m_server.Dispose();

                }

            }



但是在现场运行时,报错了,截图如下,但是我在程序中并没有调用OpcRcw.dx.dll这个类,怎么会提示找不到程序集呢?


最后一个问题就是:OPC的Api接口,自动化接口以及自定义接口有什么区别,是不是要根据现场环境的不同要选用不同的?





热门招聘
相关主题

官方公众号

智造工程师