static void Main(string[] args) { string progID = args.Length > 0 ? args[0] : "Kepware.KEPServerEX.V5"; OpcServer opcServer = new OpcServer(); opcServer.Connect(progID); System.Threading.Thread.Sleep(500); // we are faster than some servers! SERVERSTATUS serverStatus = opcServer.GetStatus(); Console.WriteLine("'{0}' vendor '{1}' version {2}.{3}.{4}", progID, serverStatus.szVendorInfo, serverStatus.wMajorVersion, serverStatus.wMinorVersion, serverStatus.wBuildNumber); Console.WriteLine("State : {0}", serverStatus.eServerState); Console.WriteLine("Start time : {0}", DateTime.FromFileTime(serverStatus.ftStartTime)); Console.WriteLine("Last update : {0}", DateTime.FromFileTime(serverStatus.ftLastUpdateTime)); Console.WriteLine("Current time: {0}", DateTime.FromFileTime(serverStatus.ftCurrentTime)); // Bandwith and group count valid only for this connection Console.WriteLine("Bandwidth : {0}", serverStatus.dwBandWidth); Console.WriteLine("Group count : {0}", serverStatus.dwGroupCount); opcServer.GetLocaleID(out int lcid); Console.WriteLine("Locale ID: {0}", lcid); opcServer.Disconnect(); }
static bool IsOPCServerIsRunning() { bool isRunning = false; SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); opcServer.GetStatus(out objSERVERSTATUS); isRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; return(isRunning); }
public static OpcServer GetOPCServerConnection() { if (opcServer == null) { opcServer = new OpcServer(); } int rtc = 0; SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); bool isConnected = false; bool isServerRunning = true; lock (opcConLock) { do { try { isConnected = opcServer.isConnectedDA; if (isConnected) { opcServer.GetStatus(out objSERVERSTATUS); isServerRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; } if (!isConnected || !isServerRunning) { opcMachineHost = GlobalValues.OPC_MACHINE_HOST; opcServerName = GlobalValues.OPC_SERVER_NAME; rtc = opcServer.Connect(opcMachineHost, opcServerName); if (!isServerRunning && IsOPCServerIsRunning()) { new InitializeEngine().AsynchReadSettings(); } } } catch (Exception errMsg) { Console.WriteLine("" + errMsg.Message); } finally { } } while (opcServer.isConnectedDA == false); } return(opcServer); }
public bool Connect(params string[] ServerProgID) { try { if (TheSrv == null) { TheSrv = new OpcServer(); if (ServerProgID.Length == 0) { var s = ServerList; if (s.Count > 0) { TheSrv.Connect(s[0]); } else { return(false); } } else { TheSrv.Connect(ServerProgID[0]); } } else { var a = new SERVERSTATUS(); TheSrv.GetStatus(out a); if (a.eServerState != OPCSERVERSTATE.OPC_STATUS_RUNNING) { if (ServerProgID.Length == 0) { var s = ServerList; if (s.Count > 0) { TheSrv.Connect(s[0]); } } else { TheSrv.Connect(ServerProgID[0]); } } } return(true); } catch (Exception) { TheSrv.Disconnect(); throw; } }
/// <summary> /// Returns whether Server is connected or not. /// </summary> /// <returns></returns> public bool IsOPCServerConnected() { string Function_Name = "IsOPCServerConnected"; LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Entered"); bool ret = false; lock (m_opcDataDicObj) { if (m_opcSrvConnectFlag) { SERVERSTATUS sts = new SERVERSTATUS(); sts.eServerState = OPCSERVERSTATE.OPC_STATUS_RUNNING; try { m_OPCServer.GetStatus(out sts); if (sts.eServerState != OPCSERVERSTATE.OPC_STATUS_RUNNING) { LogHelper.Info(CLASS_NAME, Function_Name, string.Format("status is {0}", sts.eServerState.ToString())); } //bool statusFlag = (sts.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING) ? true : false; } catch (Exception localException) { LogHelper.Error(CLASS_NAME, Function_Name, localException); //check is server is ok? //if (localException.Message.Contains("The RPC server is unavailable.")) // Fixed issue - related to System Language, to avoid it used Error code if (localException.Message.Contains("0x800706BA")) { m_opcSrvConnectFlag = false; } } } ret = m_opcSrvConnectFlag; } if (!ret) { LogHelper.Debug(CLASS_NAME, Function_Name, "OPC Server status is Down!"); } LogHelper.Trace(CLASS_NAME, Function_Name, "Function_Exited"); return(ret); }
// public OpcServer opcServer { get; set; } public static bool IsOpcServerConnectionAvailable() { if (opcServer == null) { opcServer = new OpcServer(); } int rtc = 0; SERVERSTATUS objSERVERSTATUS = new SERVERSTATUS(); bool isConnected = false; bool isServerRunning = true; try { isConnected = opcServer.isConnectedDA; if (isConnected) { opcServer.GetStatus(out objSERVERSTATUS); isServerRunning = objSERVERSTATUS.eServerState == OpcServerState.Running; } if (!isConnected || !isServerRunning) { opcMachineHost = GlobalValues.OPC_MACHINE_HOST; opcServerName = GlobalValues.OPC_SERVER_NAME; rtc = opcServer.Connect(opcMachineHost, opcServerName); } } catch (Exception errMsg) { Console.WriteLine("" + errMsg); } finally { } return(opcServer.isConnectedDA); }
public void GetStatus(out SERVERSTATUS serverStatus) { this.ifServer.GetStatus(out serverStatus); }
private static void onBGSrvGetStatus(BGException ex, SERVERSTATUS stat, object tag) { connectStatus = ex == null && stat.eServerState == OpcServerState.Running; }
static void Main(string[] args) { /*create array of readable Tags*/ var Tags = new List <OPCClientItem>(); Tags.Add(new OPCClientItem() { Name = ".test", ClientHanle = 1 }); OpcServer server = new OpcServer(); try { int transactionID = new Random().Next(1024, 65535); int cancelID = 0; int updateRate = 1000; /*connect to the OPC Server and check it's state*/ server.Connect("Matrikon.OPC.Simulation.1"); var serverStatus = new SERVERSTATUS(); server.GetStatus(out serverStatus); if (serverStatus.eServerState == OPCSERVERSTATE.OPC_STATUS_RUNNING) { /*create group of items*/ OpcGroup group = server.AddGroup("Group1", true, updateRate); group.ReadCompleted += group_ReadCompleted; List <OPCItemDef> items = new List <OPCItemDef>(); Tags.ToList() .ForEach(x => items.Add(new OPCItemDef(x.Name, true, x.ClientHanle, VarEnum.VT_EMPTY))); /* add items and collect their attributes*/ OPCItemResult[] itemAddResults = null; group.AddItems(items.ToArray(), out itemAddResults); for (int i = 0; i < itemAddResults.Length; i++) { OPCItemResult itemResult = itemAddResults[i]; OPCClientItem tag = Tags[i]; tag.ServerHandle = itemResult.HandleServer; tag.AccessRight = (itemResult.AccessRights == OPCACCESSRIGHTS.OPC_READABLE) ? OPCClientItem.EAccessRight.ReadOnly : OPCClientItem.EAccessRight.ReadAndWrite; } ; /*Refresh items in group*/ // group.Refresh2(OPCDATASOURCE.OPC_DS_DEVICE, transactionID, out cancelID); /*Async read data for the group items*/ int[] serverHandles = new int[Tags.Count]; for (int i = 0; i < Tags.Count; i++) { serverHandles[i] = Tags[i].ServerHandle; } ; OPCItemState[] itemsStateResult = null; /*sync read*/ group.Read(OPCDATASOURCE.OPC_DS_DEVICE, serverHandles, out itemsStateResult); Console.WriteLine("Sync read:"); for (int i = 0; i < itemsStateResult.Length; i++) { OPCItemState itemResult = itemsStateResult[i]; Console.WriteLine(" -> item:{0}; value:{1}; timestamp{2}; qualituy:{3}", Tags[i].Name, itemResult.DataValue.ToString(), itemResult.TimeStamp, itemResult.Quality); } ; /*sync write*/ object[] values = new object[Tags.Count]; int[] resultErrors = new int[Tags.Count]; values[0] = (object)256; group.Write(serverHandles, values, out resultErrors); /*async read*/ group.Read(serverHandles, transactionID, out cancelID, out resultErrors); /*wait for a while befor remove group to process async event*/ System.Threading.Thread.Sleep(3000); /*the group must be removed !!! */ group.Remove(true); } ; } finally { server.Disconnect(); server = null; GC.Collect(); }; Console.ReadKey(); }
public void TestCreateSERVERSTATUS01() { SERVERSTATUS sERVERSTATUS = CreateSERVERSTATUS01(); Assert.IsNotNull(sERVERSTATUS); }
public static SERVERSTATUS CreateSERVERSTATUS01() { SERVERSTATUS sERVERSTATUS = new SERVERSTATUS(); return(sERVERSTATUS); }