/// <summary> /// Редактировать выбранный блок данных /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void editDataBlockToolStripMenuItem_Click(object sender, EventArgs e) { AddDataBlock addDataBlock = new AddDataBlock(); int uid = 0; if (dataBlocks.CurrentRow != null) { uid = int.Parse(dataBlocks.CurrentRow.Cells[0].Value.ToString() ?? "0"); } DataBlockUnit dataBlock = _configuration.FindDataBlock(uid); addDataBlock.DataBlock = dataBlock; addDataBlock.EditDataBlock(); if (addDataBlock.Result == DialogResult.OK) { DataBlockUnit unit = addDataBlock.DataBlock; _configuration.ReplaceDataBlockUnit(unit); UpdateThreadsList(); _statusBarMessage = $"Добавлена новая нить [{unit.Name}]"; statusBar1.Text = _statusBarMessage; _modified = true; } UpdateDataBlockList(); addDataBlock.Dispose(); }
/// <summary> /// Обновить список сигналов /// </summary> private void UpdateSignalsList() { List <SignalView> dataSource = new List <SignalView>(); List <SignalUnit> signals = _configuration.ListSignalUnits.GetItems(); foreach (SignalUnit signal in signals) { SignalView view = new SignalView(); view.Uid = signal.Uid.ToString(); view.Name = signal.Name; view.Type = signal.Type.ToString(); DataBlockUnit dataBlock = _configuration.FindDataBlock(signal.DataBlockUid); string dbName = ""; if (dataBlock != null) { dbName = dataBlock.Name; } view.DataBlockName = dbName; view.Byte = signal.Byte.ToString(); dataSource.Add(view); } dataThreadSignals.DataSource = dataSource; dataThreadSignals.Columns[0].HeaderText = "UID"; dataThreadSignals.Columns[0].Width = 50; dataThreadSignals.Columns[1].HeaderText = "Наименование"; dataThreadSignals.Columns[1].Width = 200; dataThreadSignals.Columns[2].HeaderText = "Тип"; dataThreadSignals.Columns[2].Width = 50; dataThreadSignals.Columns[3].HeaderText = "Блок данных"; dataThreadSignals.Columns[3].Width = 150; dataThreadSignals.Columns[4].HeaderText = "Байт"; dataThreadSignals.Columns[4].Width = 50; }
/// <summary> /// Изменить параметры блока данных /// </summary> /// <param name="dataBlock">Блок данных с измененными параметрами</param> public void ReplaceDataBlockUnit(DataBlockUnit dataBlock) { for (int i = 0; i < ListDataBlockUnits.GetItemsCount(); i++) { if (ListDataBlockUnits[i].Uid == dataBlock.Uid) { ListDataBlockUnits[i] = dataBlock; break; } } }
/// <summary> /// Найти блок данных по имени /// </summary> /// <param name="uid"></param> /// <returns></returns> public DataBlockUnit FindDataBlock(int uid) { DataBlockUnit res = null; foreach (DataBlockUnit item in ListDataBlockUnits) { if (item.Uid == uid) { res = item; break; } } return(res); }
/// <summary> /// Найти блок данных по имени /// </summary> /// <param name="name"></param> /// <returns></returns> public DataBlockUnit FindDataBlock(string name) { DataBlockUnit res = null; foreach (DataBlockUnit item in ListDataBlockUnits) { if (item.Name == name) { res = item; break; } } return(res); }
public object FindElementByUid(int uid, UnitsTypes type) { object res = null; switch (type) { case UnitsTypes.Thread: ThreadUnit t = FindThreadUnitByUid(uid); res = t; break; case UnitsTypes.DataBlock: DataBlockUnit d = FindDataBlock(uid); res = d; break; } return(res); }
/// <summary> /// Добавить новый блок данных /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void addDataBlockToolStripMenuItem_Click(object sender, EventArgs e) { AddDataBlock addDataBlock = new AddDataBlock(); addDataBlock.ShowDialog(); if (addDataBlock.Result == DialogResult.OK) { DataBlockUnit dataBlock = addDataBlock.DataBlock; _configuration.ListDataBlockUnits.Add(dataBlock); UpdateThreadsList(); _statusBarMessage = $"Добавлен новый блок данных [{dataBlock.Name}]"; statusBar1.Text = _statusBarMessage; _modified = true; } UpdateDataBlockList(); addDataBlock.Dispose(); }
/// <summary> /// Удалить блок данных по его идентификатору /// </summary> /// <param name="uid">Идентификатор блока данных</param> /// <param name="cascade">Удаление также всех сигналов, привязанных к блоку данных</param> /// <returns>Результат выполнения операции удаления (-1 - не найден блок данных, 0 - успех, иначе - количество сигналов, привязанных к блоку данных)</returns> public int DeleteDataBlock(int uid, bool cascade = false) { int result = -1; DataBlockUnit db = FindDataBlock(uid); if (db == null) { return(result); // Если блок данных не найдем, возвращаем статус -1 } // Найдем сигналы, привязанные к блоку данных result = 0; for (int i = 0; i < ListSignalUnits.GetItemsCount(); i++) { if (ListSignalUnits[i].DataBlockUid == uid) { if (cascade) { // Удаляем все сигналы, привязанные к этому блоку данных ListSignalUnits.RemoveItem(i); } else { result++; } } } if (result == 0) { for (int i = 0; i < ListDataBlockUnits.GetItemsCount(); i++) { if (ListDataBlockUnits[i].Uid == uid) { ListDataBlockUnits.RemoveItem(i); break; } } } return(result); }
/// <summary> /// Нажата кнопка OK /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { DataBlock = new DataBlockUnit(); DataBlock.Uid = string.IsNullOrEmpty(textUid.Text) ? 0 : int.Parse(textUid.Text); DataBlock.Name = textName.Text; DataBlock.Port = string.IsNullOrEmpty(textPort.Text) ? 0 : int.Parse(textPort.Text); DataBlock.DataBlockSize = string.IsNullOrEmpty(textBlockSize.Text) ? 0 : int.Parse(textBlockSize.Text); DataBlock.SenderHost = textSenderIp.Text; DataBlock.SenderPort = string.IsNullOrEmpty(textSenderPort.Text) ? 0 : int.Parse(textSenderPort.Text); DataBlock.Reversal = checkReversal.Checked; DataBlock.HasHead = checkHeader.Checked; DataBlock.ServerName = textServer.Text; DataBlock.ServerPath = textPath.Text; switch (comboType.Text) { case "TIMESET": DataBlock.Type = DataBlockType.TIMESET; break; case "TCP_CLIENT": DataBlock.Type = DataBlockType.TCP_CLIENT; break; case "TCP_SERVER": DataBlock.Type = DataBlockType.TCP_SERVER; break; case "OPC": DataBlock.Type = DataBlockType.OPC; break; case "UDP": DataBlock.Type = DataBlockType.UDP; break; } Result = DialogResult.OK; }