Пример #1
0
        /// <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);
        }
Пример #3
0
        /// <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_);
        }