9 - 2017

Технология отладки скриптов системы БАЗИС в кроссплатформенной среде Visual Studio Code

Павел Бунаков, 
д.т.н., ведущий программист ООО «Базис-Центр»
Павел Бунаков, д.т.н., ведущий программист ООО «Базис-Центр»,
Роман Колесников, 
ведущий программист 
ООО «Базис-Центр»
Роман Колесников, ведущий программист ООО «Базис-Центр»,
Сергей Мещанинов, программист 
ООО «Базис-Центр»
Сергей Мещанинов, программист ООО «Базис-Центр»

Система встроенного программирования в САПР БАЗИС зарекомендовала себя как удобный инструмент для реализации специфических проектных операций. В новой версии системы добавлена возможность разработки скриптов в среде Visual Studio Code.

Мебельная промышленность — одна из наименее зависимых от политических и экономических потрясений. Мебель нужна людям всегда, независимо от курса валюты, времени года или флуктуаций в экономике. Даже в кризис мебельные магазины не пустуют, разве что у людей изменяются запросы и вместо элитной мебели они покупают мебель эконом­класса.

Подтверждением этого служит довольно большой спрос на высокотехнологичное оборудование для мебельного производства и программное обеспечение для автоматизации проектирования. Сегодня найти предприятие, где не использовались бы пильные центры, фрезерно­присадочные станки с ЧПУ или современное кромкооблицовочное оборудование, практически невозможно. А вот спрос на механические форматно­раскроечные станки падает уже несколько лет.

Уровень массовой автоматизации предприятий по производству корпусной мебели весьма высок. Специализированные САПР охватывают все дизайнерские, конструкторские, технологические и производственные службы предприятий, а также частично реализуют маркетинговые, учетные, снабженческие и управленческие функции. К ним относятся многофункциональные программные комплексы, преимущественно отечественной разработки. Однако в силу высокой вариативности подходов и методов проектирования и производства мебели на разных предприятиях автоматизировать одинаково эффективно все проектные операции не представляется возможным. Это делает актуальной разработку программных средств для расширения функциональности мебельных САПР силами самих пользователей. Безусловно, такой аппарат не станет массовым, поскольку требует определенных знаний, навыков и затрат времени, но для «продвинутых» пользователей это настоящая находка. Тем более что свои наработки они часто выкладывают в свободный доступ, делая их достоянием всех мебельщиков.

Зачем программировать?

Практически всё, что можно создать при помощи скриптов, можно реализовать и с помощью интерактивного инструментария системы БАЗИС, причем это будет быстрее, чем написание и отладка скрипта (если говорить о единичной модели или операции). Возникает закономерный вопрос: а есть ли смысл тратить время на программирование?

Разрабатывать скрипт для построения единичной эксклюзивной модели абсолютно бессмысленно. Однако есть множество ситуаций, когда затраты на создание скриптов не только оправдываются, но и приносят реальные выгоды. Назовем некоторые из них:

  • часто возникает необходимость «ускоренного» моделирования, то есть быстрого создания достаточно сложной модели, например при работе с клиентом. С помощью графического редактора это может занять немало времени, а подходящий скрипт построит модель практически мгновенно в соответствии с размерами, представленными клиентом, и его пожеланиями;
  • для качественного проектирования изделий в системе БАЗИС (как, впрочем, и в любой САПР) требуется хорошая конструкторская подготовка, а найти специалистов соответствующего уровня не всегда удается. Применение скриптов значительно понижает профессиональную планку за счет простоты использования и заложенных в них алгоритмов контроля корректности действий;
  • скрипты существенно снижают психоэмоциональную нагрузку на проектировщика в процессе работы. При их использовании он сосредотачивается на наиболее важных аспектах, а многие «мелкие» вещи (крепление панелей, облицовывание торцов и т.п.) выполняются автоматически;
  • скрипты — прекрасное средство унификации конструкции изделий, что особенно актуально для технологов. Ситуацию, когда каждый «творит, как хочет», можно полностью исключить;
  • при наличии модельных рядов выпускаемой продукции, особенно если различия в рядах не только размерные, но и качественные, скрипты позволяют избежать необходимости создания большого количества 3D­моделей и их организации в виде библиотек. Любые изменения в модельном ряду гораздо проще реализовать доработкой алгоритма в скрипте, нежели вносить изменения во все модели ряда;
  • с помощью скриптов легко производится экспорт информации из любой модели в различные сторонние программы, используемые на предприятии.

Встроенное программирование в САПР БАЗИС

Подход к расширению функциональных возможностей, воплощенный в системе БАЗИС, можно назвать профессионально ориентированным программированием. Разработка встроенных модулей выполняется на языке JavaScript, расширенном дополнительным набором объектов и функций для взаимодействия с файловой системой и системой БАЗИС.

Скриптовый язык выбран в силу легкости его освоения людьми, не имеющими серьезных знаний в области вычислительной техники и программирования [1]. Он прекрасно сочетает в себе простоту написания кода с возможностью создания достаточно сложных по структуре программных модулей. Скрипты имеют открытый код, поэтому далеко не всегда требуется их разработка «с нуля». В Интернете накоплено достаточно большое количество самых разных скриптов для системы БАЗИС, что позволяет адаптировать сторонние разработки под свои нужды с минимальными затратами.

 Тем не менее семантика команд реализована в соответствии со спецификой предметной области. Данные, с которыми работает программист, являются составными объектами корпусной мебели: панели, фурнитура, крепеж, облицовочный материал и т.д. Команды — это, по сути, наименования проектных операций, например облицевать торец панели, скрепить две панели по схеме «торец — пласть» или установить штангу для одежды. Приведем пример простого скрипта, позволяющего построить корпус (без задней стенки) из текущего материала:

var Толщина = ActiveMaterial.Thickness;

AddVertPanel(0, Толщина, 700, 1800 ­ Толщина, 0);

AddVertPanel(0, Толщина, 700, 1800 ­ Толщина, 1000 ­ Толщина);

AddHorizPanel(0, 0, 1000, 700, 0);

AddHorizPanel(0, 0, 1000, 700, 1800 ­ Толщина);

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

Среда скриптового программирования в САПР БАЗИС открывает практически полный доступ ко всем графическим, и не только, возможностям системы. В ней можно создавать столь же сложные модели мебельных изделий, как и при интерактивном проектировании, поскольку нет ограничений на вложенность программируемых объектов и сложность геометрических форм контуров. Для написания и использования скриптов не требуется установки каких­либо дополнительных программ — всё необходимое уже встроено в систему БАЗИС.

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

Создаваемые с помощью скриптов модели являются параметрическими. Это требует разработки алгоритмов их пересчета в зависимости от вводимых параметров, что в ряде случаев представляет собой достаточно сложную задачу. Для ее решения необходимы знания основ проектирования корпусной мебели и особенностей принятой технологии изготовления изделий. Зато усилия, единожды затраченные на разработку программы, в дальнейшем окупятся резким повышением производительности труда конструкторов.

Возможности встроенного редактора

Скриптовое программирование в системе БАЗИС реализовано достаточно давно. Первоначально оно было встречено пользователями весьма осторожно, поскольку в некоторых параметрических мебельных системах программирование типовых моделей (прототипов) является сложной задачей и выполняется разработчиками систем. Одни мебельщики сталкивались с подобными проблемами, когда для любого изменения модельного ряда приходилось обращаться к разработчикам, другие — слышали об этом. В любом случае имело место мнение о том, что создание программ для САПР — очень трудная задача, доступная только самим разработчикам. Когда же выяснилось, что программирование в системе БАЗИС существенно отличается от этого стереотипа, стали появляться первые, достаточно простые макросы.

Рис. 1. Окно редактора скриптов

Рис. 1. Окно редактора скриптов

Легкость изучения языка JavaScript и появление хорошего методического обеспечения в виде документации и видеороликов, созданных как разработчиками системы БАЗИС, так и ее пользователями, быстро сделали свое дело: сложность встроенных программ начала возрастать. Они стали многофункциональными и структурированными приложениями, а их интерфейс — более совершенным. Это привело к увеличению времени разработки и усложнению процесса отладки. Функциональности встроенного редактора скриптов (рис. 1) вполне хватало для разработки приложений средней сложности, однако для работы с большими программами ее оказалось недостаточно. Возникла необходимость в подключении или разработке более мощного средства, которое позволило бы в полном объеме реализовать типовую процедуру локализации и исправления ошибок, которая включает следующие операции:

  • установка контрольных точек в тех местах программы, которые, возможно, являются источником ошибки;
  • запуск скрипта и его «вывод» на одну из контрольных точек;
  • переход к пошаговому выполнению команд;
  • изучение структуры стека для определения той цепочки шагов, которые привели в данную контрольную точку;
  • исследование значений переменных с целью обнаружения их отклонения от ожидаемых значений, с использованием, в случае необходимости, выражений для вычисления интересующих значений;
  • изменение значений переменных и повторение выполнения определенного фрагмента кода.

Анализ рынка интегрированных средств отладки показал, что заниматься разработкой собственной среды нет необходимости, а сравнение наиболее известных вариантов склонило чашу весов в сторону Visual Studio Code.

Среда Visual Studio Code

Visual Studio Code — это современный кроссплатформенный редактор исходного кода программ, написанных на наиболее популярных языках программирования, в частности на JavaScript. Он является открытым программным обеспечением, то есть распространяется бесплатно и имеет доступный для редактирования исходный код. Первая версия редактора была представлена компанией Microsoft в апреле 2015 года, а через год появился рабочий релиз. За столь небольшой промежуток времени Visual Studio Code стал исключительно популярным в среде программистов благодаря легкости освоения, которая сочетается с широкими возможностями по созданию, редактированию и отладке программного кода. Редактор неплохо документирован и легко устанавливается.

Для быстрого написания исходного кода и его эффективной отладки Visual Studio Code имеет следующие действенные средства:

  • контекстные подсказки и подсветка синтаксиса;
  • автодополнение кода с использованием технологии IntelliSense, то есть распознавание типовых конструкций используемого языка по первым вводимым символам и автоматическое построение нужного шаблона;
  • вставка заранее заготовленных блоков кода для упрощения его повторного использования;
  • средства навигации по коду и его рефакторинга;
  • встроенный отладчик;
  • распределенная система управления версиями Git — свободно распространяемое и удобное средство для организации коллективной работы программистов над проектом;
  • расширение функционала за счет плагинов.

Интересной и нужной возможностью Visual Studio Code являются задачи. Благодаря им можно выполнить любую команду командной строки и увидеть результат ее выполнения непосредственно из среды разработки. Это дает возможность подключения внешних инструментов, например компиляторов или средств тестирования.

Таким образом, сочетание простоты и мощности Visual Studio Code стало веским аргументом в его пользу при выборе средства для разработки встроенных приложений для системы БАЗИС.

Node.js — новый движок для скриптового программирования

В новой версии системы БАЗИС 10 для исполнения скриптов используется новый движок на основе Node.js. Он имеет ряд существенных преимуществ:

  • поддержка современных стандартов языка JavaScript. Язык достаточно быстро развивается. В последней версии стандарта предусмотрены, например, именованные параметры функций, блочная область видимости, вложенные модули и множество других вещей, очень интересных для программистов;
  • поддержка синтаксиса языка TypeScript, позволяющего работать с типизированными данными, чего не было в классическом JavaScript. Это не только позволяет избежать ошибок по причине записи несовместимых типов, но и делает функцию автодополнения более «интеллектуальной»;
  • наличие большого количества функций для работы с системой;
  • возможность организации эффективной модульной структуры программы с использованием уже существующих модулей, утилит, библиотек и фреймворков. Для удобства работы с любыми сторонними решениями они представляются в виде пакетов, то есть некоторого набора функциональных возможностей. Их установка и обновление реализуются с помощью системы управления пакетами или менеджера. В движке Node. js используется пакетный менеджер NPM, который по умолчанию устанавливается вместе с ним.

Технология разработки скрипта

Основная особенность разработки скриптов в системе БАЗИС заключается в том, что для реализации своих замыслов пользователь может использовать практически все алгоритмы, созданные ее разработчиками. Именно это делает их разработку сравнительно несложным процессом.

Рассмотрим пример. Одной из часто используемых проектных операций у мебельщиков является замена материалов, из которых изготовлено изделие. В системе БАЗИС есть соответствующая команда (рис. 2), но она работает только с материалами одинаковой толщины, поскольку в противном случае возможно множество алгоритмов перестроения геометрии модели, и выбрать оптимальный из них проблематично.

Рис. 2. Окно замены материалов

Рис. 2. Окно замены материалов

Рис. 3. Visual Studio Code с расширением для системы БАЗИС

Рис. 3. Visual Studio Code с расширением для системы БАЗИС

Рис. 4. Окно скрипта замены материалов

Рис. 4. Окно скрипта замены материалов

Если на некотором конкретном предприятии известен алгоритм пересчета геометрии, то можно написать скрипт, который будет перестраивать модель в соответствии с ним. Последовательность действий будет следующей:

  1. Устанавливаем Visual Studio Code со специальным расширением для системы БАЗИС (рис. 3).
  2. Разрабатываем дизайн окна ввода исходных данных и описываем соответствующую форму. Для работы скрипта необходимо выбрать все материалы, используемые в текущей модели, и дать возможность для каждого из них задавать новый материал (рис. 4). Кроме того, если на модели выделены некоторые панели, желательно указать, выполнять замену надо для всех панелей или только для выделенных. Код описания формы приведен на рис. 5.
  3. Описываем алгоритм пересчета. Толщина панелей меняется автоматически в соответствии с новым материалом. Расположение их в зависимости от выбранного алгоритма может изменяться или оставаться неизменным. Например, для сохранения ширины изделия левая габаритная панель остается на месте, тогда как правая панель смещается на расстояние, равное разности толщин старого и нового материалов. Толщину внутренних перегородок можно изменять симметрично.
  4. Корректируем размеры примыкающих панелей.
  5. Все вновь построенные панели передаем в БАЗИС.

Рис. 5. Код описания формы

Рис. 5. Код описания формы

Рис. 6. Интерфейс выбора вариантов редактирования панелей

Рис. 6. Интерфейс выбора вариантов редактирования панелей

Можно сделать более универсальный вариант. По сути, пересчет геометрии определяется тем, как изменяется положение панелей, у которых меняется материал. Дадим пользователю возможность изменять принятые в пункте 3 правила, предложив их в качестве умолчаний. Для этого отобразим в «окошках», расположенных справа и слева от вертикальных панелей, соответственно сверху и снизу от горизонтальных панелей, суммарное значение изменения толщины (рис. 6). Теперь можно, изменяя те или иные значения, определять алгоритм пересчета геометрии. Разумеется, необходим контроль корректности ввода, ведь пользователь может случайно ввести значения, превышающие разность толщин материалов. Для удобства работы с новым скриптом его можно оформить в виде дополнительной инструментальной панели с кнопками модуля БАЗИС­Мебельщик (рис. 7).

Рис. 7. Инструментальная панель для скрипта

Рис. 7. Инструментальная панель для скрипта

Заключение

Опытный конструктор всегда стремится использовать в своей работе максимум возможностей применяемой САПР. С этой точки зрения встроенное программирование в системе БАЗИС можно рассматривать как возможность выполнять некоторые проектные операции не предусмотренным в системе способом. Однако для этого надо уметь и проектировать, и программировать. Разработка скриптов в умелых руках может стать отличным средством повышения эффективности работы всех специалистов мебельного производства.