/// <summary>
        /// Prompts the user to edit an item value.
        /// </summary>
        public TsCHdaItemValue ShowDialog(TsCHdaItemValue item)
        {
            // create a new item if none provided.
            if (item == null)
            {
                item = new TsCHdaItemValue();
            }

            // initialize controls.
            valueCtrl_.Value          = System.Convert.ToDecimal(item.Value);
            valueSpecifiedCb_.Checked = item.Value != null;
            qualityCb_.SelectedItem   = item.Quality.QualityBits;
            limitBitsCb_.SelectedItem = item.Quality.LimitBits;
            vendorBitsCtrl_.Value     = item.Quality.VendorBits;

            if (timestampCtrl_.MinDate > item.Timestamp)
            {
                timestampCtrl_.Value = timestampCtrl_.MinDate;
            }
            else
            {
                timestampCtrl_.Value = item.Timestamp;
            }

            // display dialog.
            if (ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            // update object.
            item = new TsCHdaItemValue();

            if (valueSpecifiedCb_.Checked)
            {
                item.Value = (double)valueCtrl_.Value;
            }

            TsCDaQuality quality = new TsCDaQuality();

            quality.QualityBits = (TsDaQualityBits)qualityCb_.SelectedItem;
            quality.LimitBits   = (TsDaLimitBits)limitBitsCb_.SelectedItem;
            quality.VendorBits  = (byte)vendorBitsCtrl_.Value;

            item.Quality = quality;

            if (timestampCtrl_.Value == timestampCtrl_.MinDate)
            {
                item.Timestamp = DateTime.MinValue;
            }
            else
            {
                item.Timestamp = timestampCtrl_.Value;
            }

            // return new value.
            return(item);
        }
Beispiel #2
0
        /// <summary>
        /// A delegate to receive data change updates from the server.
        /// </summary>
        /// <param name="subscriptionHandle">
        /// A unique identifier for the subscription assigned by the client. If the parameter
        ///	<see cref="TsCDaSubscriptionState.ClientHandle">ClientHandle</see> is not defined this
        ///	parameter is empty.</param>
        /// <param name="requestHandle">
        ///	An identifier for the request assigned by the caller. This parameter is empty if
        ///	the	corresponding parameter	in the calls Read(), Write() or Refresh() is not	defined.
        ///	Can	be used	to Cancel an outstanding operation.
        ///	</param>
        /// <param name="values">
        ///	<para class="MsoBodyText" style="MARGIN: 1pt 0in">The set of changed values.</para>
        ///	<para class="MsoBodyText" style="MARGIN: 1pt 0in">Each value will always have
        ///	item’s ClientHandle field specified.</para>
        /// </param>
        public void OnDataChangeEvent(object subscriptionHandle, object requestHandle, TsCDaItemValueResult[] values)
        {
            if (requestHandle != null)
            {
                Console.Write("DataChange() for requestHandle :"); Console.WriteLine(requestHandle.GetHashCode().ToString());
            }
            else
            {
                Console.WriteLine("DataChange():");
            }
            for (int i = 0; i < values.GetLength(0); i++)
            {
                Console.Write("Client Handle : "); Console.WriteLine(values[i].ClientHandle);
                if (values[i].Result.IsSuccess())
                {
                    if (values[i].Value.GetType().IsArray)
                    {
                        UInt16[] arrValue = (UInt16[])values[i].Value;
                        for (int j = 0; j < arrValue.GetLength(0); j++)
                        {
                            Console.Write($"Value[{j}]      : "); Console.WriteLine(arrValue[j]);
                        }
                    }
                    else
                    {
                        TsCDaItemValueResult valueResult = values[i];
                        TsCDaQuality         quality     = new TsCDaQuality(193);
                        valueResult.Quality = quality;
                        string message =
                            $"\r\n\tQuality: is not good : {valueResult.Quality} Code:{valueResult.Quality.GetCode()} LimitBits: {valueResult.Quality.LimitBits} QualityBits: {valueResult.Quality.QualityBits} VendorBits: {valueResult.Quality.VendorBits}";
                        if (valueResult.Quality.QualityBits != TsDaQualityBits.Good && valueResult.Quality.QualityBits != TsDaQualityBits.GoodLocalOverride)
                        {
                            Console.WriteLine(message);
                        }

                        Console.Write("Value         : "); Console.WriteLine(values[i].Value);
                    }
                    Console.Write("Time Stamp    : "); Console.WriteLine(values[i].Timestamp.ToString(CultureInfo.InvariantCulture));
                    Console.Write("Quality       : "); Console.WriteLine(values[i].Quality);
                }
                Console.Write("Result        : "); Console.WriteLine(values[i].Result.Description());
            }
            Console.WriteLine();
            Console.WriteLine();
        }
        /// <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);
        }