Detect all opc server and then filter opc da server from detected server.
connecting opc da server.
this.logger("Connect to OPC DA Server");
var allServersList = new OpcCom.ServerEnumerator();
var spec = Specification.COM_DA_20;
var connectionData = new ConnectData(new System.Net.NetworkCredential
{
UserName = this.username,
Password = this.password
});
this.logger("Get all detected OPC Servers");
var servers = allServersList.GetAvailableServers(spec, string.IsNullOrEmpty(host) ? null : this.host, connectionData);
if (servers == null)
{
this.logger("No OPC Servers detected");
return false;
}
this.logger("Detected servers");
foreach (var s in servers)
{
this.logger(string.IsNullOrEmpty(s.Name) ? string.Empty : s.Name + ", HostName : " + (string.IsNullOrEmpty(s.Url.HostName) ? string.Empty : s.Url.HostName) + ", Path : " + (string.IsNullOrEmpty(s.Url.Path) ? string.Empty : s.Url.Path) + ", Scheme : " + (string.IsNullOrEmpty(s.Url.Scheme) ? string.Empty : s.Url.Scheme) + ", Port : " + (string.IsNullOrEmpty(s.Url.Port.ToString()) ? string.Empty : s.Url.Port.ToString()));
}
this.logger("Filtering OPC DA servers from detected OPC servers");
var oPCDAServers = servers?.Where(s => s.Url.Scheme.ToLower() == "opcda").ToList();
if (!oPCDAServers.Any())
{
this.logger("No OPC DA Servers detected");
return false;
}
this.logger("Detected OPC DA Servers");
foreach (var s in oPCDAServers)
{
this.logger(string.IsNullOrEmpty(s.Name) ? string.Empty : s.Name + ", HostName : " + (string.IsNullOrEmpty(s.Url.HostName) ? string.Empty : s.Url.HostName) + ", Path : " + (string.IsNullOrEmpty(s.Url.Path) ? string.Empty : s.Url.Path) + ", Scheme : " + (string.IsNullOrEmpty(s.Url.Scheme) ? string.Empty : s.Url.Scheme) + ", Port : " + (string.IsNullOrEmpty(s.Url.Port.ToString()) ? string.Empty : s.Url.Port.ToString()));
}
this.logger("Matching " + this.oPCDAServerName + " OPC DA Server from detected OPC DA servers");
oPCDAServer = oPCDAServers?.Where(o => o.Name.ToLower() == this.oPCDAServerName.ToLower()).FirstOrDefault();
if (oPCDAServer == null)
{
this.logger(this.oPCDAServerName + " OPC DA Server not matched");
return false;
}
this.logger(this.oPCDAServerName + " OPC DA Server matched");
this.logger("Connecting OPC DA Server" + this.oPCDAServerName);
**oPCDAServer.Connect();**
if (!oPCDAServer.IsConnected)
{
this.logger(this.oPCDAServerName + " OPC DA Server connection failed.");
return false;
}
this.logger("Successfully connected to " + oPCDAServer.Name + "OPC DA Server");
on connecting OPC server getting following error
Error during reading from OPC DA server 10...250.OPCDAServerName
at Opc.Server.Connect(URL url, ConnectData connectData)
at Opc.Da.Server.Connect(URL url, ConnectData connectData)
at Opc.Server.Connect()
at OPCDAConnector.ConnectServer()
iner exceptionSystem.Runtime.InteropServices.ExternalException (0x80004005): CoCreateInstanceEx: ?¼?´???°
at OpcCom.Interop.CreateInstance(Guid clsid, String hostName, NetworkCredential credential)
at OpcCom.Factory.Connect(URL url, ConnectData connectData)
E_NETWORK_ERROR Could not connect to server.
OPC Server and OPC client is on same machine.
how to resolve this issue?
User contributions licensed under CC BY-SA 3.0