/// <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); }
/// <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); }