/// <summary> /// Adds an item to the list view. /// </summary> private void AddItem(TsCDaItemValue item) { // create list view item. ListViewItem listItem = new ListViewItem(item.ItemName, Resources.IMAGE_YELLOW_SCROLL); // add sub-items. listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, ITEM_PATH))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VALUE))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VALUE_TYPE))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, QUALITY_BITS))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, LIMIT_BITS))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VENDOR_BITS))); listItem.SubItems.Add(OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, TIMESTAMP))); // save item object as list view item tag. listItem.Tag = item; // insert/add item to list view. if (item == m_template) { ItemListLV.Items.Insert(0, listItem); } else { ItemListLV.Items.Add(listItem); } // adjust column widths. AdjustColumns(); }
/// <summary> /// Toggles the flag indicating whether to write only values. /// </summary> private void ValuesOnlyMI_Click(object sender, System.EventArgs e) { valuesOnlyMi_.Checked = !valuesOnlyMi_.Checked; // clear quality and timestamp. if (valuesOnlyMi_.Checked) { foreach (ListViewItem listItem in itemListLv_.Items) { // get item. TsCDaItemValue item = (TsCDaItemValue)listItem.Tag; // disable quality/timestamp fields. item.QualitySpecified = false; item.TimestampSpecified = false; // clear columns in the list view. listItem.SubItems[QualityBits].Text = ""; listItem.SubItems[LimitBits].Text = ""; listItem.SubItems[VendorBits].Text = ""; listItem.SubItems[Timestamp].Text = ""; } AdjustColumns(); } }
//---------------------------------------------------------------------------------------------------------------------- // btnWrite_Click //------------------- // A write operation with the specified value is called for the added item. //---------------------------------------------------------------------------------------------------------------------- private void btnWrite_Click(object sender, System.EventArgs e) { OpcItemResult[] res; TsCDaItemValue[] WriteItem = new TsCDaItemValue[1]; WriteItem[0] = new TsCDaItemValue(); WriteItem[0].ItemName = m_arAddedItems[0].ItemName; WriteItem[0].ServerHandle = m_arAddedItems[0].ServerHandle; WriteItem[0].Value = txtboxWrite.Text; Cursor = Cursors.WaitCursor; res = m_pOpcGroup.Write(WriteItem); if (res[0].Result.IsError()) { MessageBox.Show("Write operation failed: " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { if (!(res[0].Result.IsOk())) { MessageBox.Show("Cannot write value : " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { double uDefaultValue = System.Convert.ToDouble(txtboxWrite.Text); txtboxWrite.Text = System.Convert.ToString(uDefaultValue + 1); } } }
/// <summary> /// Updates a data filter. /// </summary> /// <param name="server">The server object</param> /// <param name="filterValue">The value of the filter</param> public void UpdateDataFilter(TsCDaServer server, string filterValue) { // not a valid operation for non data filter items. if (_unfilteredItemID == null) { throw new OpcResultException(new OpcResult((int)OpcResult.Cpx.E_FILTER_ERROR.Code, OpcResult.FuncCallType.SysFuncCall, null), "Cannot update the data filter for this item."); } // create the value to write. TsCDaItemValue item = new TsCDaItemValue(this) { Value = filterValue, Quality = TsCDaQuality.Bad, QualitySpecified = false, Timestamp = DateTime.MinValue, TimestampSpecified = false }; // write the value. OpcItemResult[] result = server.Write(new TsCDaItemValue[] { item }); if (result == null || result.Length == 0) { throw new OpcResultException(new OpcResult((int)OpcResult.E_FAIL.Code, OpcResult.FuncCallType.SysFuncCall, null), "Unexpected results returned from server."); } if (result[0].Result.Failed()) { throw new OpcResultException(new OpcResult((int)OpcResult.Cpx.E_FILTER_ERROR.Code, OpcResult.FuncCallType.SysFuncCall, null), "Could not update data filter."); } // update locale copy of the filter value. DataFilterValue = filterValue; }
/// <summary> /// Adds an item to the list view. /// </summary> private void AddItem(TsCDaItemValue item) { // create list view item. ListViewItem listItem = new ListViewItem(item.ItemName, Resources.IMAGE_YELLOW_SCROLL); // add sub-items. listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, ItemPath))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Value))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, ValueType))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, QualityBits))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, LimitBits))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, VendorBits))); listItem.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Timestamp))); // save item object as list view item tag. listItem.Tag = item; // insert/add item to list view. if (item == mTemplate_) { itemListLv_.Items.Insert(0, listItem); } else { itemListLv_.Items.Add(listItem); } // adjust column widths. AdjustColumns(); }
/// <summary> /// Copy object values into controls. /// </summary> public void Set(object value) { // check for null value. if (value == null) { SetDefaults(); return; } // cast value to item object. TsCDaItemValue item = (TsCDaItemValue)value; // save item identifier (including client and server handles). mIdentifier_ = new OpcItem(item); itemNameTb_.Text = item.ItemName; itemPathTb_.Text = item.ItemPath; valueCtrl_.ItemID = new OpcItem(item); valueCtrl_.Value = item.Value; valueSpecifiedCb_.Checked = item.Value != null; qualitySpecifiedCb_.Checked = item.QualitySpecified; qualityBitsCtrl_.Value = item.Quality.QualityBits; limitBitsCtrl_.Value = item.Quality.LimitBits; vendorBitsCtrl_.Value = item.Quality.VendorBits; timestampCtrl_.Value = timestampCtrl_.MinDate; timestampSpecifiedCb_.Checked = item.TimestampSpecified; // set timestamp - jump through some hoops to handle invalid values. if (item.TimestampSpecified) { timestampCtrl_.Value = (item.Timestamp > timestampCtrl_.MinDate)?item.Timestamp:timestampCtrl_.MinDate; } }
/// <summary> /// Edits the item template. /// </summary> private void EditTemplate(TsCDaItemValue template) { // prompt user to edit the template. TsCDaItemValue[] templates = new ItemValueListEditDlg().ShowDialog(new TsCDaItemValue[] { template }, false); if (templates == null || templates.Length != 1) { return; } // get existing items without applying defaults. ArrayList items = new ArrayList(); foreach (ListViewItem item in itemListLv_.Items) { if (item.Tag != null && item.Tag.GetType() == typeof(TsCDaItemValue)) { if (item.Tag != mTemplate_) { items.Add(item.Tag); } } } // re-initialize the list with the new template. Initialize(mServer_, templates[0]); // add items back. foreach (TsCDaItemValue item in items) { AddItem(item); } }
/// <summary> /// Creates a new item. /// </summary> private void NewMI_Click(object sender, System.EventArgs e) { TsCDaItemValue template = null; // copy the current selection. if (itemListLv_.SelectedItems.Count > 0) { template = (TsCDaItemValue)((TsCDaItemValue)itemListLv_.SelectedItems[0].Tag).Clone(); } // prompt user to edit new item. TsCDaItemValue[] items = new ItemValueListEditDlg().ShowDialog(new TsCDaItemValue[] { template }, true); if (items == null) { return; } // add new items. foreach (TsCDaItemValue item in items) { AddItem(item); } // adjust columns to fit data. AdjustColumns(); }
/// <summary> /// Copy object values into controls. /// </summary> public void Set(object value) { // check for null value. if (value == null) { SetDefaults(); return; } // cast value to item object. TsCDaItemValue item = (TsCDaItemValue)value; // save item identifier (including client and server handles). m_identifier = new OpcItem(item); ItemNameTB.Text = item.ItemName; ItemPathTB.Text = item.ItemPath; ValueCTRL.ItemID = new OpcItem(item); ValueCTRL.Value = item.Value; ValueSpecifiedCB.Checked = item.Value != null; QualitySpecifiedCB.Checked = item.QualitySpecified; QualityBitsCTRL.Value = item.Quality.QualityBits; LimitBitsCTRL.Value = item.Quality.LimitBits; VendorBitsCTRL.Value = item.Quality.VendorBits; TimestampCTRL.Value = TimestampCTRL.MinDate; TimestampSpecifiedCB.Checked = item.TimestampSpecified; // set timestamp - jump through some hoops to handle invalid values. if (item.TimestampSpecified) { TimestampCTRL.Value = (item.Timestamp > TimestampCTRL.MinDate)?item.Timestamp:TimestampCTRL.MinDate; } }
/// <summary> /// Initializes the control with the specified set of items. /// </summary> public void Initialize(TsCDaServer server, TsCDaItemValue template) { // clear existing items. itemListLv_.Items.Clear(); // save reference to server object. mServer_ = server; // disable init from properties if no server provided. initMi_.Enabled = mServer_ != null; // create template item. mTemplate_ = (template != null)?(TsCDaItemValue)template.Clone():new TsCDaItemValue(); mTemplate_.ItemName = "<default>"; // clear values only flag if quality or timestamp specified. if (mTemplate_.QualitySpecified || mTemplate_.TimestampSpecified) { valuesOnlyMi_.Checked = false; } // add template to list. AddItem(mTemplate_); // adjust columns. AdjustColumns(); }
/// <summary> /// Toggles the flag indicating whether to write only values. /// </summary> private void ValuesOnlyMI_Click(object sender, System.EventArgs e) { ValuesOnlyMI.Checked = !ValuesOnlyMI.Checked; // clear quality and timestamp. if (ValuesOnlyMI.Checked) { foreach (ListViewItem listItem in ItemListLV.Items) { // get item. TsCDaItemValue item = (TsCDaItemValue)listItem.Tag; // disable quality/timestamp fields. item.QualitySpecified = false; item.TimestampSpecified = false; // clear columns in the list view. listItem.SubItems[QUALITY_BITS].Text = ""; listItem.SubItems[LIMIT_BITS].Text = ""; listItem.SubItems[VENDOR_BITS].Text = ""; listItem.SubItems[TIMESTAMP].Text = ""; } AdjustColumns(); } }
/// <summary> /// Updates the specified list item. /// </summary> private void UpdateItem(ListViewItem listItem, TsCDaItemValue item) { listItem.SubItems[Value].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Value)); listItem.SubItems[ValueType].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, ValueType)); listItem.SubItems[QualityBits].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, QualityBits)); listItem.SubItems[LimitBits].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, LimitBits)); listItem.SubItems[VendorBits].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, VendorBits)); listItem.SubItems[Timestamp].Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(GetFieldValue(item, Timestamp)); }
/// <summary> /// Updates the specified list item. /// </summary> private void UpdateItem(ListViewItem listItem, TsCDaItemValue item) { listItem.SubItems[VALUE].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VALUE)); listItem.SubItems[VALUE_TYPE].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VALUE_TYPE)); listItem.SubItems[QUALITY_BITS].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, QUALITY_BITS)); listItem.SubItems[LIMIT_BITS].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, LIMIT_BITS)); listItem.SubItems[VENDOR_BITS].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, VENDOR_BITS)); listItem.SubItems[TIMESTAMP].Text = OpcClientSdk.OpcConvert.ToString(GetFieldValue(item, TIMESTAMP)); }
/// <summary> /// Creates a new object. /// </summary> public object Create() { TsCDaItemValue item = new TsCDaItemValue(mIdentifier_); item.Value = null; item.Quality = TsCDaQuality.Bad; item.QualitySpecified = false; item.Timestamp = DateTime.MinValue; item.TimestampSpecified = false; return(item); }
/// <summary> /// Initializes the control with the specified set of items. /// </summary> public void Initialize(TsCDaServer server, TsCDaItemValue template, TsCDaItem[] items) { Initialize(server, template); // add items. if (items != null) { foreach (TsCDaItem item in items) { AddItemWithDefaults(new TsCDaItemValue(item)); } } // adjust columns. AdjustColumns(); }
/// <summary> /// Prompts the user to edit the item list parameters. /// </summary> public TsCDaItemValue[] ShowDialog(TsCDaItemValue[] items, bool allowEditItemId) { objectCtrl_.AllowEditItemId = allowEditItemId; if (items == null) { items = new TsCDaItemValue[] { (TsCDaItemValue)objectCtrl_.Create() } } ; ArrayList results = base.ShowDialog((object[])items, !allowEditItemId); if (results != null && results.Count > 0) { return((TsCDaItemValue[])results.ToArray(typeof(TsCDaItemValue))); } return(null); } }
/// <summary> /// Unmarshals and deallocates a OPCITEMSTATE structures. /// </summary> internal static TsCDaItemValue[] GetItemValues(ref IntPtr pInput, int count, bool deallocate) { TsCDaItemValue[] output = null; if (pInput != IntPtr.Zero && count > 0) { output = new TsCDaItemValue[count]; IntPtr pos = pInput; for (int ii = 0; ii < count; ii++) { OpcRcw.Da.OPCITEMSTATE result = (OpcRcw.Da.OPCITEMSTATE)Marshal.PtrToStructure(pos, typeof(OpcRcw.Da.OPCITEMSTATE)); output[ii] = new TsCDaItemValue(); output[ii].ClientHandle = result.hClient; output[ii].Value = result.vDataValue; output[ii].Quality = new TsCDaQuality(result.wQuality); output[ii].QualitySpecified = true; output[ii].Timestamp = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(result.ftTimeStamp)); output[ii].TimestampSpecified = output[ii].Timestamp != DateTime.MinValue; if (deallocate) { Marshal.DestroyStructure(pos, typeof(OpcRcw.Da.OPCITEMSTATE)); } pos = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Da.OPCITEMSTATE))); } if (deallocate) { Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }
/// <summary> /// Returns the set of items in the control. /// </summary> public TsCDaItemValue[] GetItems() { ArrayList items = new ArrayList(); foreach (ListViewItem listItem in itemListLv_.Items) { // skip template. if (listItem.Tag == mTemplate_) { continue; } object field = null; // create copy of item. TsCDaItemValue item = (TsCDaItemValue)((TsCDaItemValue)listItem.Tag).Clone(); // Value field = GetFieldValue(item, Value); item.Value = field; // Quality field = GetFieldValue(item, Quality); item.Quality = (field != null)?(TsCDaQuality)field:TsCDaQuality.Bad; item.QualitySpecified = field != null; // Timestamp field = GetFieldValue(item, Timestamp); item.Timestamp = (field != null)?(DateTime)field:DateTime.MinValue; item.TimestampSpecified = field != null; // add item to list. items.Add(item); } // convert to array of item objects. return((TsCDaItemValue[])items.ToArray(typeof(TsCDaItemValue))); }
/// <summary> /// Copy values from control into object - throw exceptions on error. /// </summary> public object Get() { TsCDaItemValue item = new TsCDaItemValue(mIdentifier_); item.ItemName = itemNameTb_.Text; item.ItemPath = itemPathTb_.Text; item.Value = (valueSpecifiedCb_.Checked)?valueCtrl_.Value:null; // set quality fields. item.Quality = TsCDaQuality.Bad; if (qualitySpecifiedCb_.Checked) { TsCDaQuality quality = new TsCDaQuality(); quality.QualityBits = (TsDaQualityBits)qualityBitsCtrl_.Value; quality.LimitBits = (TsDaLimitBits)limitBitsCtrl_.Value; quality.VendorBits = (byte)vendorBitsCtrl_.Value; item.Quality = quality; } item.QualitySpecified = qualitySpecifiedCb_.Checked; // set timestamp - jump through some hoops to handle invalid values. item.Timestamp = DateTime.MinValue; if (timestampSpecifiedCb_.Checked) { item.Timestamp = (timestampCtrl_.Value > timestampCtrl_.MinDate)?timestampCtrl_.Value:DateTime.MinValue; } item.TimestampSpecified = timestampSpecifiedCb_.Checked; return(item); }
/// <summary> /// Copy values from control into object - throw exceptions on error. /// </summary> public object Get() { TsCDaItemValue item = new TsCDaItemValue(m_identifier); item.ItemName = ItemNameTB.Text; item.ItemPath = ItemPathTB.Text; item.Value = (ValueSpecifiedCB.Checked)?ValueCTRL.Value:null; // set quality fields. item.Quality = TsCDaQuality.Bad; if (QualitySpecifiedCB.Checked) { TsCDaQuality quality = new TsCDaQuality(); quality.QualityBits = (TsDaQualityBits)QualityBitsCTRL.Value; quality.LimitBits = (TsDaLimitBits)LimitBitsCTRL.Value; quality.VendorBits = (byte)VendorBitsCTRL.Value; item.Quality = quality; } item.QualitySpecified = QualitySpecifiedCB.Checked; // set timestamp - jump through some hoops to handle invalid values. item.Timestamp = DateTime.MinValue; if (TimestampSpecifiedCB.Checked) { item.Timestamp = (TimestampCTRL.Value > TimestampCTRL.MinDate)?TimestampCTRL.Value:DateTime.MinValue; } item.TimestampSpecified = TimestampSpecifiedCB.Checked; return(item); }
//---------------------------------------------------------------------------------------------------------------------- // btnWrite_Click //------------------- // A write operation with the specified value is called for the added item. //---------------------------------------------------------------------------------------------------------------------- private void btnWrite_Click(object sender, System.EventArgs e) { try { TsCDaItemValue[] writeValues = new TsCDaItemValue[1]; writeValues[0] = new TsCDaItemValue(); writeValues[0].ServerHandle = m_arAddedItems[0].ServerHandle; writeValues[0].Value = txtboxWrite.Text; OpcItemResult[] res; res = m_pOpcGroup.Write(writeValues, 321, new TsCDaWriteCompleteEventHandler(WriteCompleteCallback), out m_ITRequest); if (res[0].Result.IsError()) { MessageBox.Show("WriteAsync operation failed: " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { if (!(res[0].Result.IsSuccess())) { MessageBox.Show("Cannot write value : " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } else { /// All succeeded /// Predefine a new default value for the next write operation double uDefaultValue = System.Convert.ToDouble(txtboxWrite.Text); txtboxWrite.Text = System.Convert.ToString(uDefaultValue + 1); } } } catch (Exception ex) { MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
public static bool WriteTag(Guid tagId, object value, out string error) { var opcTag = _tags.FirstOrDefault(t => t.Uid == tagId); var server = _Servers.FirstOrDefault(srv => srv.Item1.ServerName == opcTag.ServerName); if (value.GetType().ToString() != opcTag.TypeNameOfValue) { try { if (opcTag.TypeNameOfValue == typeof(int).ToString()) { value = Convert.ToInt32(value); } else if (opcTag.TypeNameOfValue == typeof(double).ToString()) { value = Convert.ToDouble(value); } else if (opcTag.TypeNameOfValue == typeof(float).ToString()) { value = Convert.ToSingle(value); } else { error = "Тип данный заначения тега не соответствует заданному. Не удалось привести типы"; return false; } } catch (Exception ex) { error = String.Format("Тип данный заначения тега не соответствует заданному. Не удалось привести типы. {0}", ex.Message); return false; } } var subscription = server.Item2; var tag = subscription.Items.FirstOrDefault(t => t.ItemName == opcTag.ElementName); var item = new TsCDaItemValue(tag) { Value = value, Timestamp = DateTime.Now, Quality = TsCDaQuality.Good }; var result = server.Item1.Write(new TsCDaItemValue[] { item }); if (result.Length == 1) { error = string.Format("Code: {0}; Description: {1}; Name: {2}", result[0].Result.Code, result[0].Result.Description(), result[0].Result.Name); return !result[0].Result.IsError(); } else { error = string.Format("Неопределённый результат операции записи тега"); return false; } }
/// <summary> /// Creates a new data filter. /// </summary> /// <param name="server">The server object</param> /// <param name="filterName">The name of the filter</param> /// <param name="filterValue">The value of the filter</param> public TsCCpxComplexItem CreateDataFilter(TsCDaServer server, string filterName, string filterValue) { // not a valid operation for data filter items. if (_unfilteredItemID != null) { return(null); } // data filters not supported by the item. if (_filterItem == null) { return(null); } TsCDaBrowsePosition position = null; try { // write the desired filter to the server. TsCDaItemValue item = new TsCDaItemValue(_filterItem); // create the filter parameters document. using (StringWriter ostrm = new StringWriter()) { using (XmlTextWriter writer = new XmlTextWriter(ostrm)) { writer.WriteStartElement("DataFilters"); writer.WriteAttributeString("Name", filterName); writer.WriteString(filterValue); writer.WriteEndElement(); writer.Close(); } // create the value to write. item.Value = ostrm.ToString(); } item.Quality = TsCDaQuality.Bad; item.QualitySpecified = false; item.Timestamp = DateTime.MinValue; item.TimestampSpecified = false; // write the value. OpcItemResult[] result = server.Write(new TsCDaItemValue[] { item }); if (result == null || result.Length == 0) { throw new OpcResultException(new OpcResult((int)OpcResult.E_FAIL.Code, OpcResult.FuncCallType.SysFuncCall, null), "Unexpected results returned from server."); } if (result[0].Result.Failed()) { throw new OpcResultException(new OpcResult((int)OpcResult.Cpx.E_FILTER_ERROR.Code, OpcResult.FuncCallType.SysFuncCall, null), "Could not create new data filter."); } // browse for new data filter item. TsCDaBrowseFilters filters = new TsCDaBrowseFilters { ElementNameFilter = filterName, BrowseFilter = TsCDaBrowseFilter.Item, ReturnAllProperties = false, PropertyIDs = CPX_PROPERTIES, ReturnPropertyValues = true }; TsCDaBrowseElement[] elements = server.Browse(_filterItem, filters, out position); // nothing found. if (elements == null || elements.Length == 0) { throw new OpcResultException(new OpcResult((int)OpcResult.Cpx.E_FILTER_ERROR.Code, OpcResult.FuncCallType.SysFuncCall, null), "Could not browse to new data filter."); } TsCCpxComplexItem filterItem = new TsCCpxComplexItem(); if (!filterItem.Init(elements[0])) { throw new OpcResultException(new OpcResult((int)OpcResult.Cpx.E_FILTER_ERROR.Code, OpcResult.FuncCallType.SysFuncCall, null), "Could not initialize to new data filter."); } // return the new data filter. return(filterItem); } finally { if (position != null) { position.Dispose(); position = null; } } }
/////////////////////////////////////////////////////////////////////// #region OPC Sample Functionality void DoOPCCalls() { try { const string serverUrl = "opcda://localhost/Technosoftware.DaSample"; Console.WriteLine(); Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET"); Console.WriteLine("--------------------------------------------------------------"); Console.Write(" Press <Enter> to connect to "); Console.WriteLine(serverUrl); Console.ReadLine(); Console.WriteLine(" Please wait..."); //OpcBase.ValidateLicense("License Key"); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine(" Connected, press <Enter> to create an active group object and add several items."); Console.ReadLine(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscription group; TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[2]; TsCDaItemResult[] itemResults; items[0] = new TsCDaItem(); items[0].ItemName = "SimpleTypes.InOut.Integer"; // Item Name items[0].ClientHandle = 100; // Client Handle items[0].Active = true; items[0].ActiveSpecified = true; items[1] = new TsCDaItem(); items[1].ItemName = "SimpleTypes.InOut.Short"; // Item Name items[1].ClientHandle = 200; // Client Handle items[1].Active = false; items[1].ActiveSpecified = true; TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(String.Format(" Item {0} could not be added to the group", itemResults[i].ItemName)); } } arAddedItems = itemResults; OpcItemResult[] res; IOpcRequest m_ITRequest; TsCDaItemValue[] arItemValues = new TsCDaItemValue[1]; arItemValues[0] = new TsCDaItemValue(); arItemValues[0].ClientHandle = 100; arItemValues[0].ItemName = "SimpleTypes.InOut.Short"; int val = 0; do { arItemValues[0].Value = val; res = group.Write(arItemValues, 321, new TsCDaWriteCompleteEventHandler(OnWriteCompleteEvent), out m_ITRequest); val++; } while (val < 1000); Console.ReadLine(); group.Dispose(); // optionally, it's not required myDaServer.Disconnect(); // optionally, it's not required Console.ReadLine(); Console.WriteLine(" Disconnected from the server."); Console.WriteLine(); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } }
/// <summary> /// Adds a items to the list view. /// </summary> public void AddItemWithDefaults(TsCDaItemValue item) { GetDefaultValues(new TsCDaItemValue[] { item }, valuesOnlyMi_.Checked); AddItem(item); }
/// <summary> /// Returns the value of the specified field. /// </summary> private object GetFieldValue(TsCDaItemValue item, int fieldId) { object fieldValue = null; switch (fieldId) { case ItemPath: { fieldValue = item.ItemPath; break; } case Value: { fieldValue = item.Value; if (fieldValue == null) { fieldValue = Technosoftware.DaAeHdaClient.OpcConvert.Clone(mTemplate_.Value); } break; } case ValueType: { fieldValue = (item.Value != null)?item.Value.GetType():null; if (fieldValue == null) { fieldValue = (mTemplate_.Value != null)?mTemplate_.Value.GetType():null; } break; } case QualityBits: { fieldValue = (item.QualitySpecified)?item.Quality.QualityBits:fieldValue; if (fieldValue == null) { fieldValue = (mTemplate_.QualitySpecified)?mTemplate_.Quality.QualityBits:fieldValue; } break; } case LimitBits: { fieldValue = (item.QualitySpecified)?item.Quality.LimitBits:fieldValue; if (fieldValue == null) { fieldValue = (mTemplate_.QualitySpecified)?mTemplate_.Quality.LimitBits:fieldValue; } break; } case VendorBits: { fieldValue = (item.QualitySpecified)?item.Quality.VendorBits:fieldValue; if (fieldValue == null) { fieldValue = (mTemplate_.QualitySpecified)?mTemplate_.Quality.VendorBits:fieldValue; } break; } case Timestamp: { fieldValue = (item.TimestampSpecified)?item.Timestamp:fieldValue; if (fieldValue == null) { fieldValue = (mTemplate_.TimestampSpecified)?mTemplate_.Timestamp:fieldValue; } break; } case Quality: { fieldValue = (item.QualitySpecified)?item.Quality:fieldValue; if (fieldValue == null) { fieldValue = (mTemplate_.QualitySpecified)?mTemplate_.Quality:fieldValue; } break; } } return(fieldValue); }
/// <summary> /// Returns the value of the specified field. /// </summary> private object GetFieldValue(TsCDaItemValue item, int fieldID) { object fieldValue = null; switch (fieldID) { case ITEM_PATH: { fieldValue = item.ItemPath; break; } case VALUE: { fieldValue = item.Value; if (fieldValue == null) { fieldValue = OpcClientSdk.OpcConvert.Clone(m_template.Value); } break; } case VALUE_TYPE: { fieldValue = (item.Value != null)?item.Value.GetType():null; if (fieldValue == null) { fieldValue = (m_template.Value != null)?m_template.Value.GetType():null; } break; } case QUALITY_BITS: { fieldValue = (item.QualitySpecified)?item.Quality.QualityBits:fieldValue; if (fieldValue == null) { fieldValue = (m_template.QualitySpecified)?m_template.Quality.QualityBits:fieldValue; } break; } case LIMIT_BITS: { fieldValue = (item.QualitySpecified)?item.Quality.LimitBits:fieldValue; if (fieldValue == null) { fieldValue = (m_template.QualitySpecified)?m_template.Quality.LimitBits:fieldValue; } break; } case VENDOR_BITS: { fieldValue = (item.QualitySpecified)?item.Quality.VendorBits:fieldValue; if (fieldValue == null) { fieldValue = (m_template.QualitySpecified)?m_template.Quality.VendorBits:fieldValue; } break; } case TIMESTAMP: { fieldValue = (item.TimestampSpecified)?item.Timestamp:fieldValue; if (fieldValue == null) { fieldValue = (m_template.TimestampSpecified)?m_template.Timestamp:fieldValue; } break; } case QUALITY: { fieldValue = (item.QualitySpecified)?item.Quality:fieldValue; if (fieldValue == null) { fieldValue = (m_template.QualitySpecified)?m_template.Quality:fieldValue; } break; } } return(fieldValue); }