В данной статье , постараюсь изложить зачем нужен такой софт как openPLM в чем его отличие от всяких «систем управления документами» или проектами. Также будут описаны словленные баги , декларируемые на сайте возможности, а также что хотелось бы видеть и исправить в проекте openPLM.

openplmintro_title.png

Итак ,когда вы начинаете делать свой «hardware» проект,обычно вы не ведете никаких записей, (ну только если вы не химик и вас к этому жестко не приучили) все кажется простым и легким, а если получается не сразу, изредка на листах остаются набросанные от руки размеры и черновики, со временем Вы забываете все необходимое, если не сразу. И вот нужно вернутся доработать старый прроект или выдрать из него какой блок ,начинается безумное копашение в схемах, версиях схематики, чеках из магазина радиодеталей, особенно если Вы все это делали с перерывами в недели и месяцы.

А представте что Вы захотите сделать нечто большое и сложное и документов, даташитов, чертежей и моделей будет гораздо больше, вариантов начинки , ещё больше. А ещё кто-то будет Вам помогать.

Вы создадите папку, потом систему подпапок ,может за долгое время у Вас выработается некая система хранения. Но иногда все же хорошо иметь в своем распоряжении Менеджер Проектов ,правда он не универсальный и не подходит под весь софт.

Тогда, Вы создадите git и будете туда помещать кучу бинарных файлов, вечно проверять коммиты. Можете поднять GitLab и с друзьями писать заявки и заметки.

PLM софт, занимается тем что связывает все ваши документы и чертежи в единое информационное целое, достаточно понятное, а также позволяющие этот объект переносить, поддерживать и создавать модификации.

Описание.

OpenPLMDjango приложение , в нем используется модуль миграции базы данных — South. Так как предполагается, что на стороне сервера будут объемные и длительные задачи вроде рендеринга деталей, преобразования и генерации PDF , добавлено управление ассинхронными задачами с помощью Celery c очередью задач RabbitMQ. Для внутреннего поиска используются Haystack и xapian.

Также расширения для работы с pdf и xml и текстовые редактор позволяющий писать описания и комментарии используя Markdown разметку.

Используется стандартная база данных — PostgreSQL , с другими автор просто не пробовал.

Для удобного визуального представления используется Graphviz.

Для преобразования форматов step и stl на стороне сервера используется PythonOCC (Python привязка к геометрическому CAD ядру Open Cascade)

Основные понятия

Part

Деталь, это некий объект обозначающий как реальный объект, вроде подшипника или объектива в сборе , так и нечто относительно воображаемое вроде «Проект №234» или «Програмное обеспечение». Любая деталь по сути может быть и сборкой для этого достаточно указать её Потомков(BOM Child), также у детали входящей в какую нибудь сборку , есть Предки(Parents). У Детали может быть множество предков и множество наследников.

openplmintro_parentchild.png

Figure 2: Детали могут иметь как несколько потомков так и несколько предков

У двух деталей Предка и Потомка есть два свойства их связи это Порядок(Order) — порядок сборки ,установки и количество (Quantity) выраженное в штуках, кг или метрах.

Все остальные классы Деталей, вроде Assembly или Motherboard, Engine — это обычные детали у которых есть новые свойства. Так у Assembly появляется Manufacturer — производитель. У Motherboard — полнотекстовое поле технических деталей(описания.) Все эти свойства потом указываются в BOM

Document

Это некий объект содержащий информацию об изделии, это может быть офисный документ, просто файл. Различие под типов документа нужно для двух вещей

  • для удобного поиска файлов по их подтипам
  • для создания постобработчиков на стороне сервера таких как 3D визуализация или создание иконок для PDF документов.

User

Собственно пользователь они в openPLM делятся на типы

  • administrator — может лазить куда угодно ,смотреть и править что угодно.
  • contributor — может создавать и просматривать объекты в группах в которые входит (при этом если подробности самих объектов неизвестны, они видны в окне Browse — точнее их иконки )
  • Can publish — можно опубликовывать объекты к которым есть доступ, объекты должны быть в официальном состоянии. Опубликованные объекты видны анонимным пользователям.
  • Restricted — видит только опубликованные объекты

Эти параметры необходимо установить каждому пользователю особенно первому которого можно создать только через admin-ку, парметры настраиваются в UserProfiles

openplmintro_newuser.png

Figure 3: Добавление нового пользователя через web-форму(по умолчанию contributor)

Также пользователь обладает почтой и может передать права на объект другому Contributor-у из группы. Владелец объекта может переводить его в разные состояния в жизненном цикле. У Delegation — есть и другие параметры, но не нашел их описания.

Есть тонкая настройка возможностей пользователя (которую можно увидеть в админке при создании пользователя) насколько взаимосвязаны они не проверял (надо создать Restricted и впихнуть ему права на создание одного типа объектов)

Group

Просто сборище людей. Люди из других групп не могут просматривать объекты не из своей группы если только те не являются официальными.

Есть тонкая настройка возможностей группы (которую можно увидеть в админке при создании группы, но лучше её создавать через основную форму). насколько взаимосвязаны они не проверял (надо создать Restricted и впихнуть ему права на создание одного типа объектов)

Lifecycle

openplmintro_baselfc.png

Figure 4: Минимально возможный(базовый) жизненный цикл изделия

Жизненые цикл состоит из состояний. Цикл есть у каждого объекта

  • Все стандартные lifecycles должны иметь официальный статус
  • Все стандартные lifecycles должны иметь устаревший(depricated) статус
  • Все стандартные lifecycles должны иметь один или более статусов перед официальным статусом (draft, чтобы быть проверенными, …)
  • Только один объект указанного типом/ревизией может иметь официальный статус
  • Деталь должна иметь ссылку хотя бы на один официальный документ чтобы её можно было повысить
  • Документ нельзя повысить если хотя бы один из файлов в нем заблокирован
  • Продвижение детали в официальную версию , перетаскивает предыдущую официальную версию в состояние устарела
  • Продвижение объекта в официальный статус превращает остальные его ревизии в «Ожидающие закрытия»
  • Деталь не может быть продвинута выше статуса своих потомков
  • Официальная деталь — видна всем группам пользователей

Подробно

openplmintro_advlfc.png

Figure 5: Собственный жизненный цикл изделия

OpenPLM — декларируемые возможности

Возможности для пользователей

2.0

  • Навигация используя ссылки на объекты
  • Электронные подписи на объектах
  • Полнотестовый поиск по документации
  • Возможность комментировать на страницах объектов, пользователей, групп

Управление деталями и документами

  • Создание с помошью вебформ или csv файлов
  • Модификация:
    • изменение атрибутов (например имя)
    • передача прав (владелец, подписчик)
    • уведомление пользователей
    • изменение ревизиии объектов
  • Сохраняемая история изменений каждого объекта

Управление деталями

Создание связи мнжду документом и деталью Создание и редактирование BOM ( Bill Of Materials — Список материалов) Автоматическая генерация BOM основанная на STEP формате

openplmintro_partbom.png

Figure 6: Пример BOM

Управление документами

  • Check-in / Check-out / Download для все типов файлов
  • Создание миниатюр документов
  • Объединение pdf файлов
  • Скачивание множества файлов внутри сжатого архива
  • Визуализация трехмерных данных (STEP и STL файлы)

Управление пользователями

  • Добавление/Приглашеие новых пользователей черех веб-форму или csv файл
  • Передача прав
  • Уведомление по электронной почте

Plugins ( list)

Административные возможности

Скорее я бы сказал возможности настройки.

  • Все производные от простейшего класса Деталь могут быть адаптированы/написаны под нужды компании
  • Все производные от простейшего класса Документ могут быть адаптированы/написаны под нужды компании
  • Атрибуты каждого типа могут быть изменены
  • Жизненные циклы и элкутронные подписи, можно изменить
  • Все функции необходимые компаниии могут быть адаптированы ,изменены или созданы

Приступим к работе

Заходим на страницу админки Django, у меня это соответственно 192.168.1.225/admin/

  • Создаем пользователя
  • Назначаем профиль пользователя Home › Plmapp › User profiles › UserProfile<valber>
  • Назначаем пользователя — администратором
  • Создаем LifeCycle(не обязательно)
    • Создаем LifeCycle state
  • Выходим и заходим на главную логинясь как созданные пользователь
  • Создаем группу в вебформе

Все остальное проще смотреть на видео

Учебник

А том чего не хватает и что не работает

  • Есть баги с автообновлением поискового индекса пока чинится костылем
  • Есть баг с генерацией 3D -то ли памяти не хватает то ли Cekery теряет задачу
  • Есть баг с генерацией иконок на основе pov-ray для 3D документов
  • OpenOffice плагин устарел
  • Thunderbird плагин устарел
  • FreeCAD — пока нужно его починить и переопределить генерацию STEP
  • openPLM слишком толстый для хоббистов (1Гб памяти и то еле еле)
  • Не видно как раздовать задачи пользователям, а работать все время с комментами не интересно
  • Graphviz — интересная идея но интерактивности и управления в режиме Navigate не хватает
  • Демо виртуальной машины на сайте не дает доступа по SSH и root
  • Не решен вопрос с представлением програмной начинки устройства в PLM,такой как Git/SVN хранилище, плагина нет да и реализация странная.
  • Не хватает иконок для Part чтобы было удобней искать и ориентироваться — визуально
  • Судя по возможностям — сервер предоставляет 1 сервер — 1 проект, потому как только документ становится официальным он виден всем на сервере кроме анонимных пользователей. При достаточной пухлости openPLM неудобно когда работники знают о всех проектах на сервере.
  • Стартовый экран навигации не настраивается… например на топовую сборку конкретного проекта.
  • Интересно как реализован проект переноса частей проекта в новый проект?

Нужны плагины

  • FreeCAD — с последующей интеграцией с Assembly модулем
  • KiCAD — с желательным составлением BOM и конвертацией на стороне сервера
  • LibreCAD/QCAD3CE
  • Blender

Вот так. Пока это все , хотя мы не затронули процесс Check-In/Check-Out с файлами в документах , а также ревизии и подписчиков. Это будет позже добавлено сюда.

Прошу прощения что так долго откладывал статью. Это лень, переезд, диван, Фарго, Тула и Gravityfalls и ещё много всего.

Надеюсь в скором времени выложить код openPLM на github, как только разберусь с багом на индекс или напишу свой вариант подкласса Document