8,834
社区成员
发帖
与我相关
我的任务
分享
public bool ConnectToServer()
{
try
{
if (OpcServer != null)
{
try
{
if (OpcServer.ServerState == (int)OPCServerState.OPCRunning)
{
WriteLog.WriteLogs(OpcServer.ServerName + "-----" + OpcServer.ServerNode + "-----" + OpcServer.ServerState);
GlobalVariables.OPCState = true;
return true;
}
}
catch
{
GlobalVariables.OPCState = false;
}
}
bool isConn = false;
OpcServer = new OPCServer();
//获取IP地址上最后一个 OPC Server 的名字
object serverList = OpcServer.GetOPCServers(IpAddr);
if (serverList == null)
{
GlobalVariables.OPCState = false;
return false;
}
foreach (string turn in (Array)serverList)
{
ServerName = turn;
}
OpcServer.Connect(ServerName, IpAddr); //连接OPC Server
if (OpcServer.ServerState == (int)OPCServerState.OPCRunning)
{
isConn = true;
IsConnected = true;
GlobalVariables.OPCState = true;
}
return isConn;
}
catch (Exception ex)
{
WriteLog.WriteLogs(ex.ToString());
GlobalVariables.OPCState = false;
return false;
}
}
Hashtable ReadHS = new Hashtable();
int iItemIndex = 1;
/// <summary>
/// 同步取数/一个一个读取
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string GetOpcValueOne(string str)
{
OPCItem item;
int IndexItem = 0;
try
{
#region 使用try读取 catch添加部分
try
{
if (ReadHS.ContainsKey(str))
item = OpcGroup.OPCItems.GetOPCItem(Convert.ToInt32(ReadHS[str]));
//item = OpcGroup.OPCItems.Item(str);
else
{
iItemIndex += 1;
item = OpcGroup.OPCItems.AddItem(str, iItemIndex);
ReadHS.Add(str, item.ServerHandle);
}
}
catch
{
iItemIndex += 1;
try
{ item = OpcGroup.OPCItems.AddItem(str, iItemIndex); }
catch
{
return "BAD";
}
}
#endregion
#region 每次都添加删除,注意下面移除部分
//try
//{
// item = OpcGroup.OPCItems.AddItem(str, 1);
//}
//catch
//{
// return "BAD";
//}
#endregion
Object value;
Object quality;
Object timestamp;
//直接从设备上取数
item.Read((short)OPCDataSource.OPCDevice, out value, out quality, out timestamp);
if (str.Equals("50PAD00CP101XQ01.out"))
F3004 = double.Parse(value.ToString()) * F3004Rate;
//Array values;
//Array errors;
//object qualities;
//object timestamps; //store the timestamp of the read
//read directly from device
//OpcGroup.SyncRead((short)OPCDataSource.OPCDevice, 1, null, out values, out errors, out qualities, out timestamps);
//Array removeServerHandle = (Array)(new int[2] { 0, item.ServerHandle });
//Array removeErrors;
//OpcGroup.OPCItems.Remove(1, ref removeServerHandle, out removeErrors);
return value.ToString();
}
catch (Exception es)
{
WriteLog.WriteLogs(es.ToString());
return "";
}
}
/// <summary>
/// 断开OPC连接
/// </summary>
public void DisConnected()
{
if (!IsConnected)
{
return;
}
//如果注册事件 需要解除事件
//if (OpcGroup != null)
//{
//OpcGroup.DataChange -= new DIOPCGroupEvent_DataChangeEventHandler(OpcGroup_DataChange);
//OpcGroup = null;
//}
if (OpcServer != null)
{
try
{
OpcServer.Disconnect();
OpcGroup = null;
OpcWriteGroup = null;
OpcServer = null;
//OpcServer.OPCGroups.RemoveAll();
}
catch { }
}
IsConnected = false;
}