예제 #1
0
        /// <summary>
        /// Отобразить свойства элемента
        /// </summary>
        private void ShowElemProps(ElemInfo elemInfo)
        {
            procChangedEv = false;

            gbElemGroup.Visible = false;
            gbElem.Visible      = true;
            gbCmd.Visible       = false;

            if (elemInfo == null)
            {
                txtElemName.Text    = "";
                txtElemAddress.Text = "";
                txtElemSignal.Text  = "";
                rbBool.Checked      = true;
                gbElem.Enabled      = false;
            }
            else
            {
                txtElemName.Text    = elemInfo.Elem.Name;
                txtElemAddress.Text = elemInfo.AddressRange;
                txtElemSignal.Text  = elemInfo.Signal.ToString();
                Modbus.ElemTypes elemType = elemInfo.Elem.ElemType;
                rbUShort.Enabled = rbShort.Enabled = rbUInt.Enabled = rbInt.Enabled = rbFloat.Enabled =
                    elemType != Modbus.ElemTypes.Bool;
                rbBool.Enabled = elemType == Modbus.ElemTypes.Bool;

                switch (elemType)
                {
                case Modbus.ElemTypes.UShort:
                    rbUShort.Checked = true;
                    break;

                case Modbus.ElemTypes.Short:
                    rbShort.Checked = true;
                    break;

                case Modbus.ElemTypes.UInt:
                    rbUInt.Checked = true;
                    break;

                case Modbus.ElemTypes.Int:
                    rbInt.Checked = true;
                    break;

                case Modbus.ElemTypes.Float:
                    rbFloat.Checked = true;
                    break;

                default:
                    rbBool.Checked = true;
                    break;
                }

                gbElem.Enabled = true;
            }

            procChangedEv = true;
        }
예제 #2
0
        private void numGrElemCnt_ValueChanged(object sender, EventArgs e)
        {
            // изменение количества элементов в группе
            if (procChangedEv && selElemGroup != null)
            {
                treeView.BeginUpdate();
                int elemCnt    = selElemGroup.Elems.Count;
                int newElemCnt = (int)numGrElemCnt.Value;

                if (elemCnt < newElemCnt)
                {
                    // добавление новых элементов
                    Modbus.ElemTypes elemType = selElemGroup.DefElemType;
                    ushort           elemLen  = (ushort)Modbus.Elem.GetElemLength(elemType);
                    ushort           elemAddr = selElemGroup.Address;

                    for (int elemInd = 0; elemInd < newElemCnt; elemInd++)
                    {
                        if (elemInd < elemCnt)
                        {
                            elemAddr += (ushort)selElemGroup.Elems[elemInd].Length;
                        }
                        else
                        {
                            ElemInfo elemInfo = new ElemInfo();
                            elemInfo.Elem = new Modbus.Elem()
                            {
                                ElemType = elemType
                            };
                            elemInfo.Address   = elemAddr;
                            elemInfo.ElemGroup = selElemGroup;

                            selElemGroup.Elems.Add(elemInfo.Elem);
                            selNode.Nodes.Add(NewElemNode(elemInfo));
                            elemAddr += elemLen;
                        }
                    }
                }
                else if (elemCnt > newElemCnt)
                {
                    // удаление лишних элементов
                    for (int i = newElemCnt; i < elemCnt; i++)
                    {
                        selElemGroup.Elems.RemoveAt(newElemCnt);
                        selNode.Nodes.RemoveAt(newElemCnt);
                    }
                }

                UpdateSignals(selNode);
                Modified = true;
                treeView.EndUpdate();
            }
        }
예제 #3
0
        private void cbGrTableType_SelectedIndexChanged(object sender, EventArgs e)
        {
            // изменение типа таблицы данных группы элементов
            if (procChangedEv && selElemGroup != null)
            {
                Modbus.TableTypes tableType = (Modbus.TableTypes)cbGrTableType.SelectedIndex;
                int maxElemCnt = Modbus.ElemGroup.GetMaxElemCnt(tableType);

                bool cancel = selElemGroup.Elems.Count > maxElemCnt &&
                              MessageBox.Show(string.Format(KpPhrases.ElemRemoveWarning, maxElemCnt), CommonPhrases.QuestionCaption,
                                              MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes;

                if (cancel)
                {
                    procChangedEv = false;
                    cbGrTableType.SelectedIndex = (int)selElemGroup.TableType;
                    procChangedEv = true;
                }
                else
                {
                    // ограничение макс. количества элементов в группе
                    if (numGrElemCnt.Value > maxElemCnt)
                    {
                        numGrElemCnt.Value = maxElemCnt;
                    }
                    numGrElemCnt.Maximum = maxElemCnt;

                    // установка типа таблицы данных
                    selElemGroup.TableType = tableType;

                    // установка типа элементов группы по умолчанию
                    Modbus.ElemTypes elemType = selElemGroup.DefElemType;
                    foreach (Modbus.Elem elem in selElemGroup.Elems)
                    {
                        elem.ElemType = elemType;
                    }

                    // обновление узлов дерева
                    UpdateElemGroupNode();
                    UpdateElemNodes();

                    Modified = true;
                }
            }
        }