private void numGrElemCnt_ValueChanged(object sender, EventArgs e) { // изменение количества элементов в группе if (elemGroup != null) { int oldElemCnt = elemGroup.Elems.Count; int newElemCnt = (int)numGrElemCnt.Value; if (oldElemCnt < newElemCnt) { // добавление новых элементов ElemType elemType = elemGroup.DefElemType; for (int elemInd = oldElemCnt; elemInd < newElemCnt; elemInd++) { Elem elem = elemGroup.CreateElem(); elem.ElemType = elemType; elemGroup.Elems.Add(elem); } } else if (oldElemCnt > newElemCnt) { // удаление лишних элементов for (int i = newElemCnt; i < oldElemCnt; i++) { elemGroup.Elems.RemoveAt(newElemCnt); } } OnObjectChanged(TreeUpdateTypes.UpdateSignals); } }
private void btnAddElemGroup_Click(object sender, EventArgs e) { // создание группы элементов и добавление в шаблон устройства ElemGroup elemGroup = template.CreateElemGroup(TableType.DiscreteInputs); elemGroup.Elems.Add(elemGroup.CreateElem()); int ind = selNode != null && selNode.Tag is ElemGroup ? selNode.Index + 1 : template.ElemGroups.Count; template.ElemGroups.Insert(ind, elemGroup); // создание узла дерева группы элементов TreeNode grNode = NewElemGroupNode(elemGroup); grsNode.Nodes.Insert(ind, grNode); UpdateSignals(grNode); grNode.Expand(); treeView.SelectedNode = grNode; ctrlElemGroup.SetFocus(); // установка признака изменения Modified = true; }
private void btnAddElem_Click(object sender, EventArgs e) { // создание элемента и добавление в шаблон устройства ElemGroup elemGroup = selElemGroup == null ? selElemInfo.ElemGroup : selElemGroup; int maxElemCnt = elemGroup.MaxElemCnt; if (elemGroup.Elems.Count >= maxElemCnt) { MessageBox.Show(string.Format(KpPhrases.ElemCntExceeded, maxElemCnt), CommonPhrases.WarningCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } ElemInfo elemInfo = new ElemInfo(); elemInfo.Elem = elemGroup.CreateElem(); elemInfo.Elem.ElemType = elemGroup.DefElemType; elemInfo.ElemGroup = elemGroup; elemInfo.Settings = template.Sett; int ind = selNode.Tag is ElemInfo ? selNode.Index + 1 : elemGroup.Elems.Count; elemGroup.Elems.Insert(ind, elemInfo.Elem); // создание узла дерева элемента TreeNode elemNode = NewElemNode(elemInfo); TreeNode grNode = selNode.Tag is ElemInfo ? selNode.Parent : selNode; grNode.Nodes.Insert(ind, elemNode); UpdateElemNodes(grNode); UpdateSignals(grNode); treeView.SelectedNode = elemNode; ctrlElem.SetFocus(); // установка признака изменения Modified = true; }
/// <summary> /// Initializes the device tags. /// </summary> public override void InitDeviceTags() { DeviceTemplate deviceTemplate = GetDeviceTemplate(); if (deviceTemplate == null) { return; } // create device model deviceModel = CreateDeviceModel(); deviceModel.Addr = (byte)NumAddress; // add model elements and device tags foreach (ElemGroupConfig elemGroupConfig in deviceTemplate.ElemGroups) { bool groupActive = elemGroupConfig.Active; bool groupCommands = groupActive && elemGroupConfig.ReadOnlyEnabled; ElemGroup elemGroup = null; TagGroup tagGroup = new TagGroup(elemGroupConfig.Name) { Hidden = !groupActive }; int elemIndex = 0; if (groupActive) { elemGroup = deviceModel.CreateElemGroup(elemGroupConfig.DataBlock); elemGroup.Name = elemGroupConfig.Name; elemGroup.Address = (ushort)elemGroupConfig.Address; elemGroup.StartTagIdx = DeviceTags.Count; } foreach (ElemConfig elemConfig in elemGroupConfig.Elems) { // add model element if (groupActive) { Elem elem = elemGroup.CreateElem(); elem.Name = elemConfig.Name; elem.ElemType = elemConfig.ElemType; elem.ByteOrder = ModbusUtils.ParseByteOrder(elemConfig.ByteOrder) ?? deviceTemplate.Options.GetDefaultByteOrder(ModbusUtils.GetDataLength(elemConfig.ElemType)); elemGroup.Elems.Add(elem); } // add model command if (groupCommands && !elemConfig.ReadOnly && !string.IsNullOrEmpty(elemConfig.TagCode)) { deviceModel.Cmds.Add( CreateModbusCmd(deviceTemplate.Options, elemGroupConfig, elemConfig, elemIndex)); } // add device tag tagGroup.AddTag(elemConfig.TagCode, elemConfig.Name).SetFormat(GetTagFormat(elemConfig)); elemIndex++; } if (groupActive) { elemGroup.InitReqPDU(); elemGroup.InitReqADU(deviceModel.Addr, transMode); deviceModel.ElemGroups.Add(elemGroup); } DeviceTags.AddGroup(tagGroup); } // add model commands foreach (CmdConfig cmdConfig in deviceTemplate.Cmds) { deviceModel.Cmds.Add(CreateModbusCmd(deviceTemplate.Options, cmdConfig)); } deviceModel.InitCmdMap(); CanSendCommands = deviceModel.Cmds.Count > 0; InitModbusPoll(); }