/// <summary> /// Fetches the condition state /// </summary> private void ShowCondition() { try { // build attribute list. int[] attributeIDs = new int[mAttributes_.Length]; for (int ii = 0; ii < mAttributes_.Length; ii++) { attributeIDs[ii] = mAttributes_[ii].ID; } // fetch condition state. TsCAeCondition condition = mServer_.GetConditionState(mSource_, mCondition_, attributeIDs); // show condition. conditionCtrl_.ShowCondition(mAttributes_, condition); } catch (Exception e) { MessageBox.Show(e.Message, "GetConditionState"); } }
/// <summary> /// Converts an array of OPCCONDITIONSTATE structs to an array of Condition objects. /// </summary> internal static TsCAeCondition[] GetConditions(ref IntPtr pInput, int count, bool deallocate) { TsCAeCondition[] output = null; if (pInput != IntPtr.Zero && count > 0) { output = new TsCAeCondition[count]; IntPtr pos = pInput; for (int ii = 0; ii < count; ii++) { OpcRcw.Ae.OPCCONDITIONSTATE condition = (OpcRcw.Ae.OPCCONDITIONSTATE)Marshal.PtrToStructure(pos, typeof(OpcRcw.Ae.OPCCONDITIONSTATE)); output[ii] = new TsCAeCondition(); output[ii].State = condition.wState; output[ii].Quality = new TsCDaQuality(condition.wQuality); output[ii].Comment = condition.szComment; output[ii].AcknowledgerID = condition.szAcknowledgerID; output[ii].CondLastActive = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(condition.ftCondLastActive)); output[ii].CondLastInactive = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(condition.ftCondLastInactive)); output[ii].SubCondLastActive = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(condition.ftSubCondLastActive)); output[ii].LastAckTime = Technosoftware.DaAeHdaClient.Com.Interop.GetFILETIME(Convert(condition.ftLastAckTime)); output[ii].ActiveSubCondition.Name = condition.szActiveSubCondition; output[ii].ActiveSubCondition.Definition = condition.szASCDefinition; output[ii].ActiveSubCondition.Severity = condition.dwASCSeverity; output[ii].ActiveSubCondition.Description = condition.szASCDescription; // unmarshal sub-conditions. string[] names = Technosoftware.DaAeHdaClient.Com.Interop.GetUnicodeStrings(ref condition.pszSCNames, condition.dwNumSCs, deallocate); int[] severities = Technosoftware.DaAeHdaClient.Com.Interop.GetInt32s(ref condition.pdwSCSeverities, condition.dwNumSCs, deallocate); string[] definitions = Technosoftware.DaAeHdaClient.Com.Interop.GetUnicodeStrings(ref condition.pszSCDefinitions, condition.dwNumSCs, deallocate); string[] descriptions = Technosoftware.DaAeHdaClient.Com.Interop.GetUnicodeStrings(ref condition.pszSCDescriptions, condition.dwNumSCs, deallocate); output[ii].SubConditions.Clear(); if (condition.dwNumSCs > 0) { for (int jj = 0; jj < names.Length; jj++) { TsCAeSubCondition subcondition = new TsCAeSubCondition(); subcondition.Name = names[jj]; subcondition.Severity = severities[jj]; subcondition.Definition = definitions[jj]; subcondition.Description = descriptions[jj]; output[ii].SubConditions.Add(subcondition); } } // unmarshal attributes. object[] values = Technosoftware.DaAeHdaClient.Com.Interop.GetVARIANTs(ref condition.pEventAttributes, condition.dwNumEventAttrs, deallocate); int[] errors = Technosoftware.DaAeHdaClient.Com.Interop.GetInt32s(ref condition.pErrors, condition.dwNumEventAttrs, deallocate); output[ii].Attributes.Clear(); if (condition.dwNumEventAttrs > 0) { for (int jj = 0; jj < values.Length; jj++) { TsCAeAttributeValue attribute = new TsCAeAttributeValue(); attribute.ID = 0; attribute.Value = values[jj]; attribute.Result = GetResultID(errors[jj]); output[ii].Attributes.Add(attribute); } } // deallocate structure. if (deallocate) { Marshal.DestroyStructure(pos, typeof(OpcRcw.Ae.OPCCONDITIONSTATE)); } pos = (IntPtr)(pos.ToInt64() + Marshal.SizeOf(typeof(OpcRcw.Ae.OPCCONDITIONSTATE))); } // deallocate array. if (deallocate) { Marshal.FreeCoTaskMem(pInput); pInput = IntPtr.Zero; } } return(output); }
/// <summary> /// Displays the condition in the control. /// </summary> public void ShowCondition(Technosoftware.DaAeHdaClient.Ae.TsCAeAttribute[] attributes, TsCAeCondition condition) { // check for null value. if (condition == null) { qualityTb_.Text = ""; commentsTb_.Text = ""; acknowledgerTb_.Text = ""; activeSubConditionTb_.Text = ""; conditionLastActiveTb_.Text = ""; conditionLastInactiveTb_.Text = ""; subConditionLastActiveTb_.Text = ""; lastAcknowledgedTb_.Text = ""; subConditionsLv_.Items.Clear(); attributesLv_.Items.Clear(); return; } // convert state to a string. stateTb_.Text = ""; if ((condition.State & (int)TsCAeConditionState.Active) != 0) { stateTb_.Text += TsCAeConditionState.Active.ToString(); } if ((condition.State & (int)TsCAeConditionState.Enabled) != 0) { if (stateTb_.Text != "") { stateTb_.Text += " AND "; } stateTb_.Text += TsCAeConditionState.Enabled.ToString(); } if ((condition.State & (int)TsCAeConditionState.Acknowledged) != 0) { if (stateTb_.Text != "") { stateTb_.Text += " AND "; } stateTb_.Text += TsCAeConditionState.Acknowledged.ToString(); } qualityTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.Quality); commentsTb_.Text = condition.Comment; acknowledgerTb_.Text = condition.AcknowledgerID; activeSubConditionTb_.Text = condition.ActiveSubCondition.Name; conditionLastActiveTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.CondLastActive); conditionLastInactiveTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.CondLastInactive); subConditionLastActiveTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.SubCondLastActive); lastAcknowledgedTb_.Text = Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.LastAckTime); // fill sub-conditions list. subConditionsLv_.Items.Clear(); foreach (TsCAeSubCondition subcondition in condition.SubConditions) { ListViewItem item = new ListViewItem(subcondition.Name); if (subcondition.Name == condition.ActiveSubCondition.Name) { item.SubItems.Add(condition.ActiveSubCondition.Severity.ToString()); item.SubItems.Add(condition.ActiveSubCondition.Definition); item.SubItems.Add(condition.ActiveSubCondition.Description); item.ForeColor = Color.Red; } else { item.SubItems.Add(subcondition.Severity.ToString()); item.SubItems.Add(subcondition.Definition); item.SubItems.Add(subcondition.Description); } subConditionsLv_.Items.Add(item); } AdjustColumns(subConditionsLv_); // fill attributes list. attributesLv_.Items.Clear(); for (int ii = 0; ii < condition.Attributes.Count; ii++) { ListViewItem item = new ListViewItem(attributes[ii].Name); item.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.Attributes[ii].Value)); item.SubItems.Add(Technosoftware.DaAeHdaClient.OpcConvert.ToString(condition.Attributes[ii].Result)); attributesLv_.Items.Add(item); } AdjustColumns(attributesLv_); }