Java-функция#
Внешний вид блока в REPEAT VISION#
Блок Java-функция позволяет выполнять программы используя синтаксис и семантику языка Java. Сам код возможно редактировать во встроенном редакторе Приложения, в который можно попасть двойным нажатием ЛКМ по блоку.
Встроенный редактор#
Блок содержит четыре подсекции с кодом:
Импорт- для импорта Java-библиотек (например: import java.lang.Math;);Инициализация- для объявления и инициализации локальных переменных;Код расчета- основной код расчета;Методы- объявление пользовательских методов.
Инициализация#
Код расчета#
Методы#
1. Настройка портов#
Для настройки портов необходимо:
Добавить вход или выход путём нажатия на зелёную кнопку
+, расположенную в правой панели рядом с каждым параметромВходыиВыходы;Удалить вход или выход путём нажатия на красную кнопку
-, расположенную в правой панели рядом с каждым параметромВходыиВыходыи появляющуюся при наведении курсора на нужный параметр;Возможно задать свое пользовательское название порта и использовать это название как переменную в подсекции
Код расчета. Чтобы задать свое название нужно двойным кликом ЛКМ на название порта активировать поле редактирования названия, затем задать свое название. Название порта будет использована в коде расчета Java как переменная double, значит название должно соответствовать требованиям переменной Java (латиница, без запрещенных символов, не должен быть ключевым словом таким как class, public и т.д.).
Параметры#
Подсказка
Для возврата к схеме необходимо нажать на кнопку Вернуться к схеме, расположенную в правой панели.
2. Заполнение секций кода#
2.1. Импорт#
В данном разделе происходит импорт пакетов и классов, используемых в вычислениях например, класс java.lang.Math, содержащий математические функции и константы:
import java.lang.Math;
import org.apache.commons.math3.linear.RealVector;
2.2. Инициализация#
Инициализация представляет собой этап объявления переменных, участвующих в вычислениях, а также можно объявлять переменные в секции Код расчета.
Можно объявлять:
как примитивные переменные double , int и т.д.
так и классы String, RealVector, Vector и т.п.
double[] arr = new double[]{9,7,4,5};
int lastIndex = arr.length -1;
RealVector v1 = new ArrayRealVector(new double[]{1, 3, 5});
RealVector v2 = new ArrayRealVector(new double[]{2, 4, 6}).
2.3. Код расчета#
В этом разделе пишется код, выполняемый на каждом шаге расчета модели, а также можно объявлять переменные.
Допускается вызов методов, импортированных классов, например, возрастающая сортировка .sort() для String.
В примере производится скалярное произведение векторов v1,v2 при помощи метода .dotProduct() для RealVector:
Arrays.sort(arr);
double degrees = in_1;
double highestValue = arr[lastIndex];
double dotProduct = v1.dotProduct(v2);
А также можно вызвать пользовательский метод toRadians(), который можно задать в секции Методы:
out_1 = toRadians(degrees);
out_2 = highestValue;
out_3 = dotProduct;
Примечание
Переменные портов (пример: in_1, out_1, out_2, out_3) объявляются во время компиляции java-кода с типом переменных double, поэтому их не нужно отдельно инициализировать
2.4. Методы#
Пользовательские методы, вызываемые в процессе расчета, записываются в данном разделе.
В примере описана функция, переводящая значение переданного аргумента в радианы:
private Double toRadians(double x){
return Math.toRadians(x);
}
3. Использование библиотек#
Для использования объектов и методов сторонних библиотек внутри скрипта необходимо импортировать соответствующие библиотеки с помощью конструкции: “import <имя класса>”.
Библиотека |
Пример |
Описание |
Документация |
|---|---|---|---|
Java (standard library) |
import java.util.*; |
Стандартные библиотеки Java версии LibericaJDK-17. |
|
Apache Math |
import org.apache.commons.math3.linear.RealVector; |
Commons Math — это библиотека легких, математических и статистических компонентов, решающая наиболее распространенные проблемы, недоступные в языке программирования Java или Commons Lang. |
|
Другие библиотеки apache commons |
import org.apache.commons.lang3. … |
Apache Commons содержит набор библиотек утилит Java самого разного назначения, доступных по лицензии Apache License, и использующихся во многих других проектах с открытым исходным кодом. |
|
Neqsim |
import neqsim.process.equipment.stream.Stream; |
NeqSim — это библиотека Java с открытым исходным кодом для моделирования теплогирдравлических процессов. |
|
JAMA |
import Jama.Matrix; |
JAMA — это базовый пакет линейной алгебры для Java. |
|
SSJ - Stochastic Simulation in Java |
import umontreal.ssj. randvar.GeometricGen; |
SSJ (Stochastic Simulation in Java) — это библиотека Java, предлагающая инструменты для стохастического моделирования (Монте-Карло). |
|
Colt |
import cern.colt.matrix.DoubleMatrix2D; |
Colt предоставляет набор библиотек с открытым исходным кодом для высокопроизводительных научных и технических вычислений на Java. |
4. Описание работы блока#
Как и большинство блоков в приложении, блок Java-функция совершает расчет в общем цикле модели с заданным шагом, который определяется решателем с помощью численного метода решения набора уравнений. Таким образом, программа (скрипт) на Java-функция компилируется один раз перед началом расчета и исполняется на каждом шаге.
5. Вывод ошибок#
Описание ошибок при запуске схемы с блоком Java-функция можно посмотреть в журнале. Если ошибка расчета непосредственно связана с кодом (ошибки синтаксиса или вызов исключения), то по верхнему вызову стек-трейса в журнале можно определить причину ошибки.
6. Рекомендации по написанию кода#
При работе с блоком Java-функция можно использовать весь синтаксис и семантику языка Java, однако в связи с особенностью вычислений циклов расчета (см. п. Вывод ошибок) не рекомендуется внутри кода использовать циклы с множественным количеством итераций, в особенности бесконечные циклы. Все циклы должны иметь обязательное условие выхода, в противном случае результаты расчета могут быть непредсказуемыми, также это может сильно повлиять на производительность расчета. В том числе не рекомендуется использовать вызовы функций для работы со стандартным потоком ввода/вывода такие как: System.out.println() и др., т.к. эти функции не обрабатываются при компиляции кода. Тоже самое касается любых системных вызовов.
7. Свойства#
Нет
8. Входы и выходы#
Параметры |
Вход/Выход |
Описание |
Единицы измерения |
Тип порта |
|---|---|---|---|---|
in_1 |
Вход |
– |
– |
Автоматика |
out_1 |
Выход |
– |
– |
Автоматика |
out_2 |
Выход |
– |
– |
Автоматика |
out_3 |
Выход |
– |
– |
Автоматика |
Для того, чтобы посмотреть возможности подключения блока необходимо перейти на страницу Описание портов блоков
См. также
С примером использования данного блока можно ознакомиться в уроке раздела Внешние модели - Реализация фильтра скользящего среднего с помощью блока «Java-функция».