Member 12859240 Ответов: 1

Справка по структуре модели данных


В настоящее время я работаю над приложением для станка с ЧПУ, которое я запускаю, и мне нужна некоторая помощь в том, как структурировать модели данных. Машина имеет башенку, представленную классом башенок, который имеет заданное количество станций, на которых инструментальные блоки могут быть "установлены" как в прямом, так и в обратном направлении. Каждый блок инструментов имеет заданное число положений блоков, на которые может быть установлен "инструмент", по одному на каждую позицию. В приложении мне нужен список размонтированных блоков инструментов и инструментов. Затем, когда я монтирую инструментальный блок на станцию, мне нужно, чтобы он стал недоступен в списке размонтированных инструментальных блоков. То же самое и с установкой инструмента в Блокпозицию.

Часть, которая ставит меня в тупик, заключается в том, что когда я монтирую инструмент в Блокпозицию, мне также нужно сохранить целое число, представляющее номер смещения, который будет использовать машина, и Блокпозицию для ссылки на монтируемый инструмент. Для меня не имеет смысла иметь свойство объекта "инструмент" в классе BlockPosition, когда оно мне нужно только в том случае, если это смонтированный блок инструментов.

При запуске приложения мне просто нужно перезагрузить какой инструментальный блок был на какой станции и инструмент был на какой Блокпозиции. Поэтому у меня есть вопрос, есть ли у кого-нибудь хороший способ структурировать эти модели.

Вот очень упрощенные классы, с которыми я работаю:
public class ToolBlock
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<BlockPosition> Positions { get; set; }
}
public class BlockPosition
{ 
    public int ID { get; set; }
    public string Name { get; set; }
    public double Offset { get; set; }
}
public class Station
{
    public int ID { get; set; }
    public ToolBlock ToolBlock { get; set; }
    public BlockMountingPositionEnum BlockPosition { get; set; }
}
public class Turret
{
    public List<Station> Stations { get; set; }
}
public class Tool
{
    public int ID { get; set; }
    public double Offset { get; set; }
    public string Name{ get; set; }
}
public enum BlockMountingPositionEnum
{
    Foward = 0,
    Reverse = 1
}


Что я уже пробовал:

До сих пор я пытался наследовать от класса ToolBlock и BlockPosition, чтобы создать класс MountedToolBlock и MountedBlockPosition следующим образом:
public class MountedToolBlock : ToolBlock
{
    public MountedBlockPositionEnum BlockPosition { get; set; }
}
public class MountedBlockPosition : BlockPosition
{
    public int OffsetNo { get; set; }
    public Tool Tool { get; set; }
}
Я просто не могу сделать это изящным способом, который имеет смысл. Я также попытался реализовать интерфейсы вместо конкретных классов для списка Блокпозиций. Я думал об использовании словаря< gt; Для хранения Блокпозиции с помощью OffsetNo и инструмента, но у меня ничего не получается. Я застрял на процессе фактического монтажа блоков инструментов и инструментов и структурирования этих данных, чтобы я мог сохранить их в xml.

Если это поможет, то в каждом блоке инструментов будет только до 4 Блокпозиций, так что, возможно, список-не самый лучший подход.

Надеюсь, я говорю разумно, любая помощь будет оценена по достоинству.

1 Ответов

Рейтинг:
1

Maciej Los

До сих пор я понимаю, что каждый из них Tool должен быть установлен в ToolBlock, затем в Station Список станций имеет общее название: Turret.
Похоже, у вас есть 2 набора данных: один - размонтированные инструменты (Tool класс) и второй - навесные инструменты, которые создают станции (Station класс).
Навесные инструменты:

Turret
|_Station
  |_ToolBlock

Демонтирована инструменты:
Warehouse
|_Tool


Поскольку ToolBlock обладает несколькими свойствами: Tool, чем ToolBlock должны наследует от объекта.

Если вы хотите это знать Tool был установлен в ToolBlock, вы можете добавить какой-то маркер в Tool класс. Это может быть IsMounted собственность или даже лучше StationID, которые могут быть использованы для идентификации Station Где Tool был смонтирован. По умолчанию StationID собственность компании Tool объект должен быть равен 0 (нулю) и любое значение больше нуля после монтажа.


Что касается меня, то ваша модель мне непонятна... Каждый станок с ЧПУ должен знать порядок (последовательность) и локализацию каждого элемента. Я понятия не имею, как ваша машина сможет распознать Station Я постараюсь изложить его на простой диаграмме (ниже).
-----------------------------TURRET-----------------------------------------
 _STATION_  _________  _________  _________ 
|  _   _  ||  _   _  ||  _   _  ||  _   _  |
| |_| |_| || |_| |_| || |_| |_| || |_| |_|-----Tools (ToolBlock)
|  _   _  ||  _   _  ||  _   _  ||  _   _  |    |
| |_| |_| || |_| |_| || |_| |_| || |_| |_|------|
| _______ || ________|| ________|| _______ |
------------------------------------------------------------------------

Представьте себе, что объект-это лента (или любой другой объект, например, кусок дерева, лист пластика или жестяная посуда). В упрощенной модели можно монтировать только одну станцию за другой. Но - в реальности - там может быть несколько станций с набором инструментов в определенном порядке и локализации.

-----------------------------TURRET-----------------------------------------
 _STATION_  _________  _________  _________ 
|  _   _  ||  _   _  ||  _   _  ||  _   _  |
| |_| |_| || |_| |_| || |_| |_| || |_| |_|-----Tools (ToolBlock)  >--
|  _   _  ||  _   _  ||  _   _  ||  _   _  |    |                    |
| |_| |_| || |_| |_| || |_| |_| || |_| |_|------|                    |
| _______ || _______ || _______ || _______ |                         ˅
 _STATION_  _________  _________  _________               the direction of laying
|  _   _  ||  _   _  ||  _   _  ||  _   _  |                         ˅
| |_| |_| || |_| |_| || |_| |_| || |_| |_| |                         |
|  _   _  ||  _   _  ||  _   _  ||  _   _  |<-----------<------------|
| |_| |_| || |_| |_| || |_| |_| || |_| |_| |
| _______ || _______ || _______ || _______ |
------------------------------------------------------------------------


Я бы посоветовал взять лист бумаги и карандаш, чем рисовать модель Turret на нем. Когда вы закончите, вы сможете определить классы.