Java-функция#

block

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

 Блок Java-функция позволяет выполнять программы используя синтаксис и семантику языка Java. Сам код возможно редактировать во встроенном редакторе Приложения, в который можно попасть двойным нажатием ЛКМ по блоку.

Built-in editor

Встроенный редактор#

 Блок содержит четыре подсекции с кодом:

  1. Импорт - для импорта Java-библиотек (например: import java.lang.Math;);

  2. Инициализация - для объявления и инициализации локальных переменных;

  3. Код расчета - основной код расчета;

  4. Методы - объявление пользовательских методов.

Initialization

Инициализация#

Calculation code

Код расчета#

Methods

Методы#

1.  Настройка портов#

 Для настройки портов необходимо:

  • Добавить вход или выход путём нажатия на зелёную кнопку +, расположенную в правой панели рядом с каждым параметром Входы и Выходы;

  • Удалить вход или выход путём нажатия на красную кнопку -, расположенную в правой панели рядом с каждым параметром Входы и Выходы и появляющуюся при наведении курсора на нужный параметр;

  • Возможно задать свое пользовательское название порта и использовать это название как переменную в подсекции Код расчета. Чтобы задать свое название нужно двойным кликом ЛКМ на название порта активировать поле редактирования названия, затем задать свое название. Название порта будет использована в коде расчета Java как переменная double, значит название должно соответствовать требованиям переменной Java (латиница, без запрещенных символов, не должен быть ключевым словом таким как class, public и т.д.).

Parameters

Параметры#

Подсказка

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

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.*;
import java.lang.Math;
и т.д.

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

ссылка

Apache Math

import org.apache.commons.math3.linear.RealVector;

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

ссылка

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

import org.apache.commons.lang3. …
import org.apache.commons.collections4. …

Apache Commons содержит набор библиотек утилит Java самого разного назначения, доступных по лицензии Apache License, и использующихся во многих других проектах с открытым исходным кодом.

ссылка 1
ссылка 2

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;
import cern.colt.matrix.linalg.LUDecomposition;

Colt предоставляет набор библиотек с открытым исходным кодом для высокопроизводительных научных и технических вычислений на Java.

ссылка

4.  Описание работы блока#

 Как и большинство блоков в приложении, блок Java-функция совершает расчет в общем цикле модели с заданным шагом, который определяется решателем с помощью численного метода решения набора уравнений. Таким образом, программа (скрипт) на Java-функция компилируется один раз перед началом расчета и исполняется на каждом шаге.

5.  Вывод ошибок#

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

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

 При работе с блоком Java-функция можно использовать весь синтаксис и семантику языка Java, однако в связи с особенностью вычислений циклов расчета (см. п. Вывод ошибок) не рекомендуется внутри кода использовать циклы с множественным количеством итераций, в особенности бесконечные циклы. Все циклы должны иметь обязательное условие выхода, в противном случае результаты расчета могут быть непредсказуемыми, также это может сильно повлиять на производительность расчета. В том числе не рекомендуется использовать вызовы функций для работы со стандартным потоком ввода/вывода такие как: System.out.println() и др., т.к. эти функции не обрабатываются при компиляции кода. Тоже самое касается любых системных вызовов.

7.  Свойства#

Нет

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

Параметры

Вход/Выход

Описание

Единицы измерения

Тип порта

in_1

Вход

–

–

Автоматика

out_1

Выход

–

–

Автоматика

out_2

Выход

–

–

Автоматика

out_3

Выход

–

–

Автоматика

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

См. также

С примером использования данного блока можно ознакомиться в уроке раздела Внешние модели - Реализация фильтра скользящего среднего с помощью блока «Java-функция».