小弟通过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接口,自动化接口以及自定义接口有什么区别,是不是要根据现场环境的不同要选用不同的?