Пример #1
0
        /// <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();
            }
        }
Пример #3
0
        //----------------------------------------------------------------------------------------------------------------------
        // 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();
        }
Пример #11
0
        /// <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));
 }
Пример #13
0
 /// <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);
        }
    }
Пример #17
0
        /// <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);
        }
Пример #21
0
        //----------------------------------------------------------------------------------------------------------------------
        // 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);
            }
        }
Пример #22
0
		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);
        }
Пример #27
0
        /// <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);
        }