} // end ProcessCommandLine public void Terminate() { if (m_areDaObjectsInitialized) { if (m_daSubscription.CurrentState != EnumObjectState.DISCONNECTED) { m_daSubscription.Disconnect(new ExecutionOptions()); } if (m_daSession.CurrentState != EnumObjectState.DISCONNECTED) { m_daSession.Disconnect(new ExecutionOptions()); } m_daSubscription.RemoveDaItem(m_daItem1); m_daSubscription.RemoveDaItem(m_daItem2); m_daSubscription.RemoveDaItem(m_daItem3); m_daSubscription.RemoveDaItem(m_daItem4); m_daSession.RemoveDaSubscription(m_daSubscription); GetApplication().RemoveDaSession(m_daSession); } GetApplication().Terminate(); m_daSession = null; m_daSubscription = null; m_daItem1 = null; m_daItem2 = null; m_daItem3 = null; m_daItem4 = null; } // end Terminate
//-- #endregion #region Private Members //--------------------- #region Private Attributes //------------------------ //-- #endregion //-- #endregion #region Public Methods //--------------------- //-- #endregion #region Public Properties //----------------------- //-- #endregion #region Handles public static void HandleStateChanged(ObjectSpaceElement sender, EnumObjectState state) { MyDaItem item = sender as MyDaItem; FileStream fs = new FileStream("C:\\ClientService.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fs); streamWriter.BaseStream.Seek(0, SeekOrigin.End); streamWriter.WriteLine(item + " " + item.Id + " State Changed - " + state); streamWriter.Flush(); streamWriter.Close(); } // end HandleStateChanged
} // end HandleStateChanged public static void HandlePerformStateTransition( ObjectSpaceElement sender, uint executionContext, int result) { FileStream fs = new FileStream("C:\\ClientService.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fs); streamWriter.BaseStream.Seek(0, SeekOrigin.End); if (ResultCode.SUCCEEDED(result)) { MyDaItem item = sender as MyDaItem; streamWriter.WriteLine(sender + " " + item.Id + " Performed state transition - " + executionContext); } else { streamWriter.WriteLine(sender + " Performed state transition failed! Result: " + result); } streamWriter.Flush(); streamWriter.Close(); } // end HandlePerformStateTransition
} //end ReadItems public void WriteItems(bool sync) { DateTime writeDateTime = new DateTime(); if (sync) { ValueQT[] inValues = new ValueQT[2]; SByte[] v1 = new SByte[5]; v1[0] = 7; v1[1] = 8; v1[2] = 9; v1[3] = 10; v1[4] = 11; inValues[0] = new ValueQT(v1, EnumQuality.QUALITY_NOT_SET, writeDateTime); System.String v2 = "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"; inValues[1] = new ValueQT(v2, EnumQuality.QUALITY_NOT_SET, writeDateTime); int result = (int)EnumResultCode.E_FAIL; MyDaItem[] inItems = new MyDaItem[2]; inItems.SetValue(m_daItem3, 0); inItems.SetValue(m_daItem4, 1); int[] inResults = new int[2]; FileStream fs = new FileStream("C:\\ClientService.txt", FileMode.OpenOrCreate, FileAccess.Write); StreamWriter streamWriter = new StreamWriter(fs); streamWriter.BaseStream.Seek(0, SeekOrigin.End); if (ResultCode.SUCCEEDED(result = m_daSubscription.Write(inItems, inValues, out inResults, new ExecutionOptions()))) { streamWriter.WriteLine(); streamWriter.WriteLine(" Subscription synchronous write succeeded"); for (int i = 0; i < inItems.Length; i++) { if (inResults[i] >= 0) { streamWriter.WriteLine(String.Format("{0,-19} {1} {2,-50} ", inItems[i], "-", inValues[i].ToString())); streamWriter.WriteLine(); } else { streamWriter.WriteLine(" Item synchronous write failed! " + inItems[i].Id + " [ResultID: " + inResults[i] + " ]"); } } } else { streamWriter.WriteLine("Subscription synchronous write failed! Result: " + result); } streamWriter.Flush(); streamWriter.Close(); } // end if else { ValueQT[] inValues = new ValueQT[2]; SByte[] v1 = new SByte[5]; v1[0] = 7; v1[1] = 8; v1[2] = 9; v1[3] = 10; v1[4] = 11; inValues[0] = new ValueQT(v1, EnumQuality.QUALITY_NOT_SET, writeDateTime); System.String v2 = "SOFTING"; inValues[1] = new ValueQT(v2, EnumQuality.QUALITY_NOT_SET, writeDateTime); MyDaItem[] inItems = new MyDaItem[2]; inItems[0] = m_daItem3; inItems[1] = m_daItem4; int[] inResults = new int[2]; m_daSubscription.Write(inItems, inValues, out inResults, m_executionOptions); m_executionOptions.ExecutionContext++; } // end else } //end WriteItems
} // end Terminate public int InitializeDaObjects() { int connectResult = (int)EnumResultCode.E_FAIL; m_executionOptions = new ExecutionOptions(); m_executionOptions.ExecutionType = EnumExecutionType.ASYNCHRONOUS; m_executionOptions.ExecutionContext = 0; m_itemList = new MyDaItem[4]; m_itemIds = new string[] { "maths.sin", "time.local.second", "increment.UI1 array", "increment.BSTR" }; try { // TODO add your server URL here // this is the server url for Softing OPCToolbox Demo Server // first choice is COM-DA string url = "opcda:///Softing.OPCToolboxDemo_ServerDA.1/{2E565242-B238-11D3-842D-0008C779D775}"; //uncomment if you need an XML-DA access // string url = "http://localhost:8079/OPC/DA"; m_daSession = new MyDaSession(url); if (!m_daSession.Valid) { return(connectResult); } m_daSubscription = new MyDaSubscription(1000, m_daSession); if (!m_daSubscription.Valid) { return(connectResult); } m_daItem1 = new MyDaItem("maths.sin", m_daSubscription); if (!m_daItem1.Valid) { return(connectResult); } m_itemList[0] = m_daItem1; m_daItem2 = new MyDaItem("time.local.second", m_daSubscription); if (!m_daItem2.Valid) { return(connectResult); } m_itemList[1] = m_daItem2; m_daItem3 = new MyDaItem("increment.UI1 array", m_daSubscription); if (!m_daItem3.Valid) { return(connectResult); } m_itemList[2] = m_daItem3; m_daItem4 = new MyDaItem("increment.BSTR", m_daSubscription); if (!m_daItem4.Valid) { return(connectResult); } m_itemList[3] = m_daItem4; m_areDaObjectsInitialized = true; connectResult = m_daSession.Connect(true, true, null); } catch (Exception exc) { GetApplication().Trace( EnumTraceLevel.ERR, EnumTraceGroup.USER, "OpcClient::InitializaDaObjects", exc.ToString()); } // end try...catch return(connectResult); } // end InitializeDaObjects