Exemplo n.º 1
0
        /// <summary>
        /// Событие при двойном щелчке по таблице прочитанных переменных
        /// (перенос их в дерево)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgVars_DoubleClick(object sender, EventArgs e)
        {
            try
            {
                if (_IsHeader)
                {
                    _IsHeader = false; return;
                }

                //Если поле не редактируемое, то переместить переменную
                if ((this.dgVars.RowCount > 0) && (this.dgVars.CurrentCell.ReadOnly == true))
                {
                    //Добавление переменной в дерево
                    String m_name = (String)this.dgVars.CurrentRow.Cells[0].Value;
                    Kontel.Relkon.Classes.ControllerVar m_newVar = _solution.Vars.GetVarByName(m_name);
                    if (m_newVar == null)
                    {
                        //если написать строку,то не отображаются переменные, которых нет в _solution, но есть в _enging
                        //иначевозникает ошибка при открытии проекта, послеоткрытия файла отладчика
                        //this.Table.Rows.Remove(this.Table.Rows[this.dgVars.CurrentRow.Index]);
                        return;
                    }
                    DataRow m_CurrentRow = (DataRow)this.Table.Rows[this.dgVars.CurrentRow.Index];
                    for (int i = 0; i < this.Table.Rows.Count; i++)
                    {
                        if ((String)this.Table.Rows[i][0] == m_name)
                        {
                            m_CurrentRow = (DataRow)this.Table.Rows[i];
                            break;
                        }
                    }

                    if (m_newVar is ControllerSystemVar)
                    {
                        this.tvVars.Nodes["sys"].Nodes.Add(m_newVar.Name);
                    }
                    else if (m_newVar is ControllerEmbeddedVar)
                    {
                        this.tvVars.Nodes["emb"].Nodes.Add(m_newVar.Name);
                    }
                    else if (m_newVar is ControllerIOVar)
                    {
                        this.tvVars.Nodes["io"].Nodes.Add(m_newVar.Name);
                    }
                    else if (m_newVar is ControllerUserVar)
                    {
                        this.tvVars.Nodes["usr"].Nodes.Add(m_newVar.Name);
                    }
                    else
                    {
                        return;
                    }

                    //Удаление переменной из списка опрашиваемых
                    if (_vars.ContainsKey((String)m_newVar.Name))
                    {
                        for (int i = 0; i < _engine.Parameters.ReadingVars.Count; i++)
                        {
                            if (_engine.Parameters.ReadingVars[i].Name == m_newVar.Name)
                            {
                                Kontel.Relkon.DebuggerParameters.VarDescription m_VarDescription = _engine.Parameters.ReadingVars[i];
                                _engine.Parameters.ReadingVars.Remove(m_VarDescription);
                            }
                        }
                        _engine.RemoveReadItem(m_newVar.Address, m_newVar.Memory, m_CurrentRow /*.ItemArray[0].ToString()*/);
                        _vars.Remove((String)m_newVar.Name);
                    }
                    //Удаление переменной из таблицы

                    this.Table.Rows.Remove(m_CurrentRow);
                }
            }
            catch (Exception ex)
            {
                Utils.ErrorMessage("dgVars_DoubleClick:" + ex.Message);
                return;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Добавление структуры в таблицу опрашиваемых
        /// </summary>
        /// <param name="sructName"></param>
        private void AddStruct(string structName)
        {
            DataRow m_row;

            //Запоминаем что читаем эту переменную в параметры отладчика
            Kontel.Relkon.DebuggerParameters.StructDescription m_StructDescription = new Kontel.Relkon.DebuggerParameters.StructDescription();
            foreach (DataRow dr in this.StructsTable.Rows)
            {
                if (dr[0].ToString() == structName)
                {
                    m_StructDescription.Address    = (int)dr[1];
                    m_StructDescription.MemoryType = GetMemoryType(dr[2].ToString());
                    m_StructDescription.Name       = dr[0].ToString();
                    m_StructDescription.Size       = (int)dr[3];
                    m_StructDescription.Type       = 0;
                    break;
                }
            }

            foreach (DataRow dr in this.VarsTable.Rows)
            {
                if (dr[1].ToString() == structName)
                {
                    //Добавление переменной структуры в таблицу опрашиваемых
                    m_row    = this.DisplayVarsTable.NewRow();
                    m_row[0] = dr[0];
                    m_row[1] = dr[1];
                    m_row[2] = 0;
                    m_row[5] = dr[2];
                    m_row[6] = dr[3];
                    m_row[7] = dr[4];
                    if ((bool)dr[5])
                    {
                        switch ((int)dr[4])
                        {
                        case 1:
                            m_row[8] = sbyte.MaxValue;
                            m_row[9] = sbyte.MinValue;
                            break;

                        case 2:
                            m_row[8] = short.MaxValue;
                            m_row[9] = short.MinValue;
                            break;

                        case 4:
                            m_row[8] = int.MaxValue;
                            m_row[9] = int.MinValue;
                            break;
                        }
                    }
                    else
                    {
                        switch ((int)dr[4])
                        {
                        case 1:
                            m_row[8] = byte.MaxValue;
                            m_row[9] = byte.MinValue;
                            break;

                        case 2:
                            m_row[8] = ushort.MaxValue;
                            m_row[9] = ushort.MinValue;
                            break;

                        case 4:
                            m_row[8] = uint.MaxValue;
                            m_row[9] = uint.MinValue;
                            break;
                        }
                    }
                    m_row[3] = BuildDisplayAddress((int)dr[3]);
                    m_row[4] = BuildDisplayValue((byte[])m_row[2], (int)m_row[7], (long)m_row[9] < 0);
                    this.DisplayVarsTable.Rows.Add(m_row);
                    AddRowToAsk(m_row);
                    //Добавление переменной к структуре
                    Kontel.Relkon.DebuggerParameters.VarDescription m_VarDescription = new Kontel.Relkon.DebuggerParameters.VarDescription();
                    m_VarDescription.Address    = (int)dr[3];
                    m_VarDescription.MemoryType = GetMemoryType(dr[2].ToString());
                    m_VarDescription.Name       = dr[0].ToString();
                    m_VarDescription.Size       = (int)dr[4];
                    m_StructDescription.Vars.Add(m_VarDescription);
                }
            }
            _engine.Parameters.ReadingStructs.Add(m_StructDescription);

            //Добавление пустой строки для разделения структур
            m_row = this.DisplayVarsTable.NewRow();
            this.DisplayVarsTable.Rows.Add(m_row);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Событтие при двойном щелчке по дереву не прочитаннх переменных
        /// (формировани запроса на их чтение)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void tvVars_NodeMouseDoubleClick(object sender, System.Windows.Forms.TreeNodeMouseClickEventArgs e)
        {
            if ((e.Node.Nodes.Count == 0) && ((e.Node.Text.CompareTo("Системные переменные") != 0) && (e.Node.Text.CompareTo("Пользовательские переменные") != 0) && (e.Node.Text.CompareTo("Заводские установки") != 0)))
            {
                Kontel.Relkon.Classes.ControllerVar m_newVar = _solution.Vars.GetVarByName(e.Node.Text);
                if (m_newVar == null)
                {
                    return;
                }

                if (!_vars.ContainsKey(e.Node.Text))
                {
                    _vars.Add(e.Node.Text, m_newVar);

                    //Добавление записи с читаемой переменной


                    Int64 m_Max = 0;
                    Int64 m_Min = 0;
                    if (m_newVar.HasSign)
                    {
                        switch (m_newVar.Size)
                        {
                        case 1: m_Max = sbyte.MaxValue; m_Min = sbyte.MinValue; break;

                        case 2: m_Max = Int16.MaxValue; m_Min = Int16.MinValue; break;

                        case 4: m_Max = Int32.MaxValue; m_Min = Int32.MinValue; break;

                        default: m_Max = sbyte.MaxValue; m_Min = sbyte.MinValue; break;
                        }
                    }
                    else
                    {
                        switch (m_newVar.Size)
                        {
                        case 1: m_Max = Byte.MaxValue; m_Min = Byte.MinValue; break;

                        case 2: m_Max = UInt16.MaxValue; m_Min = UInt16.MinValue; break;

                        case 4: m_Max = UInt32.MaxValue; m_Min = UInt32.MinValue; break;

                        default: m_Max = Byte.MaxValue; m_Min = Byte.MinValue; break;
                        }
                    }

                    DataRow m_row = this.Table.NewRow();
                    m_row[0] = m_newVar.Name;
                    m_row[2] = m_Max;
                    m_row[3] = m_Min;
                    m_row[4] = m_newVar.Size;
                    m_row[5] = m_newVar.Address;
                    m_row[6] = m_newVar.Memory;
                    m_row[7] = ("0x00000000".Insert("0x00000000".Length - ("" + AppliedMath.DecToHex(m_newVar.Address)).Length, "" + AppliedMath.DecToHex(m_newVar.Address))).Substring(0, 10);
                    m_row[8] = new byte[m_newVar.Size];
                    m_row[9] = m_newVar.Real;
                    this.BuildDisplayValue(m_row);

                    this.Table.Rows.Add(m_row);
                    //Запоминаем что читаем эту переменную в параметры отладчика
                    Kontel.Relkon.DebuggerParameters.VarDescription m_VarDescription = new Kontel.Relkon.DebuggerParameters.VarDescription();
                    m_VarDescription.Address    = m_newVar.Address;
                    m_VarDescription.MemoryType = m_newVar.Memory;
                    m_VarDescription.Name       = m_newVar.Name;
                    m_VarDescription.Size       = m_newVar.Size;
                    m_VarDescription.Real       = m_newVar.Real;
                    m_VarDescription.Type       = e.Node.Parent.Index;
                    _engine.Parameters.ReadingVars.Add(m_VarDescription);
                    //Добавление переменной на опрос
                    if (this._IsReading)
                    {
                        for (int i = 0; i < this.Table.Rows.Count; i++)
                        {
                            if (this.Table.Rows[i][0].ToString() == m_newVar.Name)
                            {
                                try { _engine.AddReadItem(m_newVar.Address, m_newVar.Memory, m_newVar.Size, this.Table.Rows[i], null, CallBack); }
                                catch { }
                            }
                        }
                    }
                }
                this.tvVars.Nodes.Remove(e.Node);
            }
        }