Jython#

block

Внешний вид блока в REPEAT VISION#

 Jython блок позволяет выполнять программы, используя синтаксис и семантику языка Python 2 на платформе Java. Программа на Jython может импортировать и использовать классы и библиотеки, используемые в решателе на языке Java. Сам код возможно редактировать во встроенном редакторе Приложения, в который можно попасть по одному из следующих методов:

С помощью двойного нажатия ЛКМ по блоку

  1. Выделить блок, нажав по нему ЛКМ;

  2. Нажать на кнопку Редактировать код блока, расположенную в правой панели настройки проекта в разделе Действия.

Рис. 1 Редактировать код блока

Рис. 1 Редактировать код блока#

 В блоке Jython доступны три вкладки для реализации кода Python программы (см. рис. 2, рис. 3, рис. 4 ниже):

Код данного этапа выполняется 1 раз до начала моделирования с целью подготовки к процессу расчёта. На данном этапе необходимо выполнить:

  1. Импорт необходимых библиотек;

  2. Создать объекты программы, у которых требуется сохранять состояние между выполнением шагов интегрирования в процессе расчёта;

  3. Создать необходимые функции и классы для последующего вызова на этапе моделирования, в Коде расчета.

Код данного этапа выполняется на каждом шаге интегрирования от начала расчёта до его остановки. На данном этапе необходимо:

  1. Вызывать функции и методы классов Python программы, отвечающих за моделирование;

  2. Использовать значения in входных портов блока Jython и возвращать результаты на out выходные порты блока Jython;

Объекты, созданные в рамках кода расчёта не сохраняют своего состояния после завершения шага интегрирования.

Если вашим объектам необходимо сохранять состояние между шагами интегрирования, то их необходимо создавать и настраивать на этапе инициализации, а затем использовать в коде расчёта.

Код данного этапа выполняется 1 раз при остановке расчёта.

При завершении расчёта может выполняться обработка данных объектов Python программы, у которых требовалось сохранять состояние между выполнением шагов интегрирования в процессе расчёта.

Рис. 2 Инициализация

Рис. 2 Инициализация#

Рис. 3 Код расчета

Рис. 3 Код расчета#

Рис. 4 Завершение

Рис. 4 Завершение#

1.  Работа с портами блока#

 Блок позволяет изменять количество входных и выходных портов для того, чтобы их можно было использовать внутри кода скрипта (количество и наименование, см. рис. 5 ниже).

Рис. 5 Параметры блока Jython

Рис. 5 Параметры блока Jython#

 При добавлении входных портов в правой панели, переменные с соответствующим именем автоматически инициализируются на стороне решателя во время запуска расчета. Таким образом, внутри скрипта переменные входов можно использовать как уже заранее инициализированные и объявленные переменные, а переменные выходов необходимо только объявить, как показано в примере, рис. 6:

Рис. 6 Пример кода для блока Jython с двумя входами и одним выходом

Рис. 6 Пример кода для блока Jython с двумя входами и одним выходом#

 Количество и имена выбранных портов должны четко соответствовать переменным, используемым внутри кода. В противном случае решатель вернет ошибку в журнал, рис. 7:

Рис. 7 Пример ошибки, если не была объявлена переменная выхода out_1

Рис. 7 Пример ошибки, если не была объявлена переменная выхода out_1#

Важно

Выходной порт Jython не поддерживает целые числа. Для ввода целого числа достаточно поставить точку после него. Пример записи числа 3 для выходного порта блока Jython: 3.

2.  Использование библиотек#

 Для использования объектов и методов сторонних библиотек внутри скрипта необходимо импортировать соответствующие библиотеки с помощью конструкции: “from <путь библиотеки> import <имя класса>”, где необходимо указать путь до конкретного имени класса библиотеки. При указании некорректного пути соответствующая ошибка вернется в журнал при запуске расчета. Пути для импорта и описание доступных библиотек приведены в таблице. Также в среде Jython доступен ряд стандартных python-библиотек, описанные в официальной документации, в т.ч. математические: math, cmath, decimal, random и т.д.

Библиотека

Import path

Описание

Документация

Java (standard library)

java.util
java.math
java.lang
и т.д

Стандартные библиотеки Java версии LibericaJDK-17.

ссылка

Apache Math

org.apache.commons.math3

Commons Math — это библиотека легких, математических и статистических компонентов, решающая наиболее распространенные проблемы, недоступные в языке программирования Java или Commons Lang.

ссылка

Другие библиотеки apache commons

org.apache.commons.lang3
org.apache.commons.
collections4

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 Пример вызова исключения деления на ноль и вывод журнала с описанием ошибки

Рис. 8 Пример вызова исключения деления на ноль и вывод журнала с описанием ошибки#

5.  Рекомендации по написанию кода#

 При работе с блоком Jython можно использовать весь синтаксис и семантику языка Python 2, однако в связи с особенностью вычислений циклов расчета (см. предыдущий пункт) не рекомендуется внутри кода использовать циклы с множественным количеством итераций, в особенности бесконечные циклы. Все циклы должны иметь обязательное условие выхода, в противном случае результаты расчета могут быть непредсказуемыми, также это может сильно повлиять на производительность расчета. В том числе не рекомендуется использовать вызовы функций для работы со стандартным потоком ввода/вывода такие как: print(), input() и др., т.к. эти функции не обрабатываются при компиляции кода. Тоже самое касается любых системных вызовов.

6.  Возможные затруднения#

 При работе с различными типами данных стоит помнить, что Jython – это библиотека для интерпретирования синтаксиса языка Python на язык Java. Поэтому некоторые операции с типами на языке Python не соответствуют операциям в Java. Например, целочисленное деление в Python возможно из-за динамической типизации данных. В Jython данная операция не поддерживается, так как в Java целочисленное деление всегда возвращает ноль, что может повлиять на итоговый результат расчета. Поэтому в коде скрипта при делении следует использовать вещественные числа типа float, рис. 9:

Рис. 9 Пример целочисленного деления на Jython

Рис. 9 Пример целочисленного деления на Jython#

7.  Загрузка пользовательского изображения#

 Для блока можно добавить пользовательское изображение.

 Для этого необходимо:

  1. Выбрать блок Jython, нажав по нему ЛКМ;

  2. Справа от изображения блока нажать на кнопку + («Добавить изображение»), рис. 10:

Рис. 10 Добавить изображение

Рис. 10 Добавить изображение#

  1. Выбрать необходимое изображение на ПК

8.  Замена стандартной иконки блока#

 У блока есть возможность замены иконки на произвольное изображение. Для этого необходимо нажать по блоку ПКМ и выбрать ЛКМ - Выбрать изображение, рис. 11:

Рис. 11 Выбрать изображение

Рис. 11 Выбрать изображение#

 После чего выбрать нужное изображение на своём ПК.

 Когда изображение добавлено, после нажатия на блок ПКМ становятся доступны две опции (см. рис. 12 ниже):

Рис. 12 Замена/удаление изображения

Рис. 12 Замена/удаление изображения#

Подсказка

Если удалить произвольное изображение блока, то оно вернётся к изображению блока по умолчанию

9.  Свойства#

Свойства блока задаются сразу при создании пользователем модели.

10.  Входы и выходы#

Свойства портов блока задаются при создании пользователем модели.

11.  Примеры использования#

 С примерами использования данного блока можно ознакомиться в следующих разделах:

Практическое руководство

Раздел

Название руководства

Авиастроение

Разработка математической модели системы управления углом тангажа летательного аппарата

Обработка данных диагностики и результатов измерений

Применение фильтра Калмана для оценки результатов измерений

Электротехника / Электроэнергетика

Дифференциально-токовая защита силового трансформатора;

Моделирование токовой направленной защиты нулевой последовательности ЛЭП 220 кВ

Электротехника

Cоздание системы управления батареей

Энергетика

Разработка модели системы промконтура маслоохладителей АЭС с ВВЭР