Jython#
Внешний вид блока в REPEAT VISION#
Jython блок позволяет выполнять программы, используя синтаксис и семантику языка Python 2 на платформе Java. Программа на Jython может импортировать и использовать классы и библиотеки, используемые в решателе на языке Java. Сам код возможно редактировать во встроенном редакторе Приложения, в который можно попасть по одному из следующих методов:
С помощью двойного нажатия ЛКМ по блоку
Выделить блок, нажав по нему ЛКМ;
Нажать на кнопку
Редактировать код блока, расположенную в правой панели настройки проекта в разделеДействия.
Рис. 1 Редактировать код блока#
В блоке Jython доступны три вкладки для реализации кода Python программы (см. рис. 2, рис. 3, рис. 4 ниже):
Код данного этапа выполняется 1 раз до начала моделирования с целью подготовки к процессу расчёта. На данном этапе необходимо выполнить:
Импорт необходимых библиотек;
Создать объекты программы, у которых требуется сохранять состояние между выполнением шагов интегрирования в процессе расчёта;
Создать необходимые функции и классы для последующего вызова на этапе моделирования, в Коде расчета.
Код данного этапа выполняется на каждом шаге интегрирования от начала расчёта до его остановки. На данном этапе необходимо:
Вызывать функции и методы классов Python программы, отвечающих за моделирование;
Использовать значения in входных портов блока Jython и возвращать результаты на out выходные порты блока Jython;
Объекты, созданные в рамках кода расчёта не сохраняют своего состояния после завершения шага интегрирования.
Если вашим объектам необходимо сохранять состояние между шагами интегрирования, то их необходимо создавать и настраивать на этапе инициализации, а затем использовать в коде расчёта.
Код данного этапа выполняется 1 раз при остановке расчёта.
При завершении расчёта может выполняться обработка данных объектов Python программы, у которых требовалось сохранять состояние между выполнением шагов интегрирования в процессе расчёта.
Рис. 2 Инициализация#
Рис. 3 Код расчета#
Рис. 4 Завершение#
1. Работа с портами блока#
Блок позволяет изменять количество входных и выходных портов для того, чтобы их можно было использовать внутри кода скрипта (количество и наименование, см. рис. 5 ниже).
Рис. 5 Параметры блока Jython#
При добавлении входных портов в правой панели, переменные с соответствующим именем автоматически инициализируются на стороне решателя во время запуска расчета. Таким образом, внутри скрипта переменные входов можно использовать как уже заранее инициализированные и объявленные переменные, а переменные выходов необходимо только объявить, как показано в примере, рис. 6:
Рис. 6 Пример кода для блока Jython с двумя входами и одним выходом#
Количество и имена выбранных портов должны четко соответствовать переменным, используемым внутри кода. В противном случае решатель вернет ошибку в журнал, рис. 7:
Рис. 7 Пример ошибки, если не была объявлена переменная выхода out_1#
Важно
Выходной порт Jython не поддерживает целые числа. Для ввода целого числа достаточно поставить точку после него. Пример записи числа 3 для выходного порта блока Jython: 3.
2. Использование библиотек#
Для использования объектов и методов сторонних библиотек внутри скрипта необходимо импортировать соответствующие библиотеки с помощью конструкции: “from <путь библиотеки> import <имя класса>”, где необходимо указать путь до конкретного имени класса библиотеки. При указании некорректного пути соответствующая ошибка вернется в журнал при запуске расчета. Пути для импорта и описание доступных библиотек приведены в таблице. Также в среде Jython доступен ряд стандартных python-библиотек, описанные в официальной документации, в т.ч. математические: math, cmath, decimal, random и т.д.
Библиотека |
Import path |
Описание |
Документация |
|---|---|---|---|
Java (standard library) |
java.util |
Стандартные библиотеки Java версии LibericaJDK-17. |
|
Apache Math |
org.apache.commons.math3 |
Commons Math — это библиотека легких, математических и статистических компонентов, решающая наиболее распространенные проблемы, недоступные в языке программирования Java или Commons Lang. |
|
Другие библиотеки apache commons |
org.apache.commons.lang3 |
Apache Commons содержит набор библиотек утилит Java самого разного назначения, доступных по лицензии Apache License, и использующихся во многих других проектах с открытым исходным кодом. |
|
Neqsim |
org.neqsim |
NeqSim — это библиотека Java с открытым исходным кодом для моделирования теплогирдравлических процессов. |
|
JAMA |
gov.nist.math.Jama |
JAMA — это базовый пакет линейной алгебры для Java. |
|
SSJ - Stochastic Simulation in Java |
ca.umontreal.ssj.charts |
SSJ (Stochastic Simulation in Java) — это библиотека Java, предлагающая инструменты для стохастического моделирования (Монте-Карло). |
|
Colt |
colt |
Colt предоставляет набор библиотек с открытым исходным кодом для высокопроизводительных научных и технических вычислений на Java. |
3. Описание работы блока#
Как и большинство блоков в приложении, блок Jython совершает расчет в общем цикле модели с заданным шагом, который определяется решателем с помощью численного метода решения набора уравнений. Таким образом, программа (скрипт) на Jython компилируется один раз перед началом расчета и исполняется на каждом шаге.
4. Вывод ошибок#
Описание ошибок при запуске схемы с блоком Jython можно посмотреть в журнале. Если ошибка расчета непосредственно связана с кодом (ошибки синтаксиса или вызов исключения), то по верхнему вызову стек-трейса в журнале можно определить причину ошибки. Чаще всего исключения будут обработаны методом библиотеки “org.python.core” и в журнале должен быть указан конкретный номер строки скрипта (см рис. 8 ниже), в противном же случае обратитесь в техническую поддержку.
Рис. 8 Пример вызова исключения деления на ноль и вывод журнала с описанием ошибки#
5. Рекомендации по написанию кода#
При работе с блоком Jython можно использовать весь синтаксис и семантику языка Python 2, однако в связи с особенностью вычислений циклов расчета (см. предыдущий пункт) не рекомендуется внутри кода использовать циклы с множественным количеством итераций, в особенности бесконечные циклы. Все циклы должны иметь обязательное условие выхода, в противном случае результаты расчета могут быть непредсказуемыми, также это может сильно повлиять на производительность расчета. В том числе не рекомендуется использовать вызовы функций для работы со стандартным потоком ввода/вывода такие как: print(), input() и др., т.к. эти функции не обрабатываются при компиляции кода. Тоже самое касается любых системных вызовов.
6. Возможные затруднения#
При работе с различными типами данных стоит помнить, что Jython – это библиотека для интерпретирования синтаксиса языка Python на язык Java. Поэтому некоторые операции с типами на языке Python не соответствуют операциям в Java. Например, целочисленное деление в Python возможно из-за динамической типизации данных. В Jython данная операция не поддерживается, так как в Java целочисленное деление всегда возвращает ноль, что может повлиять на итоговый результат расчета. Поэтому в коде скрипта при делении следует использовать вещественные числа типа float, рис. 9:
Рис. 9 Пример целочисленного деления на Jython#
7. Загрузка пользовательского изображения#
Для блока можно добавить пользовательское изображение.
Для этого необходимо:
Выбрать блок Jython, нажав по нему ЛКМ;
Справа от изображения блока нажать на кнопку
+(«Добавить изображение»), рис. 10:
Рис. 10 Добавить изображение#
Выбрать необходимое изображение на ПК
8. Замена стандартной иконки блока#
У блока есть возможность замены иконки на произвольное изображение. Для этого необходимо нажать по блоку ПКМ и выбрать ЛКМ - Выбрать изображение, рис. 11:
Рис. 11 Выбрать изображение#
После чего выбрать нужное изображение на своём ПК.
Когда изображение добавлено, после нажатия на блок ПКМ становятся доступны две опции (см. рис. 12 ниже):
Рис. 12 Замена/удаление изображения#
Подсказка
Если удалить произвольное изображение блока, то оно вернётся к изображению блока по умолчанию
9. Свойства#
Свойства блока задаются сразу при создании пользователем модели.
10. Входы и выходы#
Свойства портов блока задаются при создании пользователем модели.
11. Примеры использования#
С примерами использования данного блока можно ознакомиться в следующих разделах:
Уроки;
Описание Демо-проектов.
Практическое руководство
Раздел |
Название руководства |
|---|---|
Авиастроение |
Разработка математической модели системы управления углом тангажа летательного аппарата |
Обработка данных диагностики и результатов измерений |
|
Электротехника / Электроэнергетика |
Дифференциально-токовая защита силового трансформатора; |
Электротехника |
|
Энергетика |
Разработка модели системы промконтура маслоохладителей АЭС с ВВЭР |