Интерфейс математического ядра
Klinachyov2Lib.K2_SimKernel

Интерфейс математического ядра позволяет создать объекты от C++ классов, чей предок полиморфный класс с виртуальной математической функцией индивидуально определенной у потомков. Включает объекты в массив, и, в процессе симуляции, циклически вызывает его.

Методы

K2_SimKernel.setSimProp

Метод для настройки свойств симуляции.

Синтаксис:

setSimProp (timeStart As Double, timeEnd As Double, dT As Double, [IntMethod As Metod_1s_Enum = ERK11], [mode As Byte], [RadHz As Boolean = True], [RandomSeed As Integer = -1], [ImplSolver As ImplSolver_Enum = Newton], [MaxFlowIter As Integer = 3], [ImplSolvErr As Double = 1E-05])

Аргументы:

timeStart Начальное время симуляции.
timeEnd Конечное время симуляции.
dT Шаг симуляции.
IntMethod Метод интегрирования.
mode Набор флагов для определения режима работы математического ядра:
mode = mode | 00000001b рестарт в автоматическом режиме;
mode = mode | 00000010b рестарт с сохранением состояния;
mode = mode | 00001000b привязка к реальному времени;
mode = mode | 00000100b предустановка начальных условий (выход на баланс по постоянной составляющей на первом шаге симуляции).
RadHz

Признак величины измерения частоты у блоков, имеющих соответствующий параметр. Может принимать значения: 1-Rad, 0-Hz.

RandomSeed Инициирующее число генератора псевдослучайных чисел.
ImplSolver Код, позволяющий активировать тот или иной неявный решатель: метод Ньютона-Рафсона, метод дихотомии и т.д. (см. список констант ImplSolver_Enum).
MaxFlowIter Максимальное количество повторных вызовов потока, которые итерационный решатель может использовать, подбирая корни алгебраических уравнений (обычно при решении алгебраических систем уравнений второго порядка требуется от 20 до 30 итераций для нахождения корней с относительной погрешностью 1e-6).
ImplSolvErr Относительная ошибка вычисления корней системы алгебраических уравнений.

 

K2_SimKernel.createRLC (v 2.0.0.0)

...

Синтаксис:

createRLC (node1 As Long, node2 As Long, ID_RLC As RLCEnum, [prmValue As Double])

...

 

K2_SimKernel.createBlock

Метод для создания экземпляров математических блоков, которые в K2-ядре составляют массив объектов порожденных от библиотеки С++ классов. Все классы библиотеки являются наследниками общего полиморфного предка, и индивидуально реализуют его виртуальную математическую функцию. При вызове метода нужно передать уникальный идентификатор С++ класса, количество аргументов, возвращаемых значений, и параметров математической функции.

Синтаксис:

createBlock (ID_LIB As LibBlocksEnum, amntInp As Integer, amntOut As Integer, amntPrm As Integer)

Аргументы:

ID_LIB Библиотечный идентификатор математического С++ класса, от которого в момент конфигурации ядра порождается математический объект. На языках раннего связывания можно использовать список констант LibBlocksEnum. Но на языках позднего связывания необходимо обращаться непосредственно к цифровому коду математического блока.
amntInp Число входов математического блока, которые в К2-ядре являются аргументами математической функции. Существуют математические блоки, у которых значение этого параметра может варьироваться в некоторых пределах. В качестве примера можно привести блок сумматор.
amntOut Число выходов математического блока, которые в К2-ядре являются возвращаемыми значениями математической функции.
amntPrm Число параметров математического блока, которые в К2-ядре являются параметрами математической функции. Например, у сумматора параметром является знак входного аргумента и поэтому amntPrm = amntInp.

K2_SimKernel.createWire

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

Синтаксис:

createWire(O_idBlk As Long, indexOut As Integer, indexInp As Integer, I_idBlk As Long)

Аргументы:

O_idBlk Индекс блока, от которого строится связь, в основном массиве блоков модели.
indexOut Номер выхода блока, от которого строится связь.
indexInp Номер входа привязываемого блока.
I_idBlk Индекс привязываемого блока в основном массиве блоков модели.

K2_SimKernel.setBlkParam

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

Синтаксис:

setBlkParam(idBlk As Long, indexPrm As Integer, prmValue As Double)

Аргументы:

idBlk Индекс блока в основном массиве блоков модели.
indexPrm Номер параметра, значение которого требуется изменить.
prmValue Новое значение параметра.

K2_SimKernel.loadSimML

Конфигурация математического ядра с помощью функций createBlock, createWire, setBlkParam затруднена из-за не наглядности аргументов данных методов. Альтернативным является вариант настройки при помощи SimML-модели. Этот способ не является оптимальным, поскольку XML-файл содержит дополнительную информацию о графическом представлении модели. Преимуществом же является тот факт, что XML-файлы адаптированы для распространения в среде Интернет. После трансформации на рабочем столе в целях отладки может быть сохранен промежуточный файл, используемый для программирования математического ядра (toSK.xml), и/или файл XLST4SimML.xsl, содержащий XSLT-фильтр, который содержится в разделе ресурсов dll-библиотеки.

Синтаксис:

loadSimML(SimMLCode As String, [mode As Byte])

Аргументы:

SimMLCode Строка SimML-кода.
mode Набор двоичных флагов. У которых младший бит отвечает за активацию/деактивацию определенных функций. Так при значении mode=mode|00000010b происходит генерация вспомогательного файла toSK.xml, при mode=mode|00000100b на рабочий стол помещается файл XLST4SimML.xsl, при mode=mode|00000001b игнорируются свойства симуляции, записанные в SimML-файле. В этом случае пользователь должен задать свои параметры.

K2_SimKernel.ReInitKernel

Метод для выгрузки модели из памяти и перезагрузки (реинициализации) K2-ядра. При этом освобождается память, занятая ранее массивом блоков математического ядра, созданных методом K2_SimKernel.createBlock. При успешном выполнении К2-ядро формирует событие RunIn (STAGE As K2StageEnum= sk_InRAM), которое  информирует контейнер о готовности ядра к (ре)конфигурации. После чего контейнер может синхронизировать пункт Simulate в своем главном меню. В результате пользователь сможет запустить процедуру интерпретации графической модели в конфигурирующие математическое ядро команды только в разрешенные моменты времени. Само меню создается при первой генерации события.

Синтаксис:

ReInitKernel()

K2_SimKernel.ReStart

Метод для запуска процедуры симуляции модели. Генерирует событие RunIn (STAGE As K2StageEnum= sk_InContinuousMode), информирующее контейнер о том, что К2-ядро непрерывно функционирует в отдельном потоке. Будучи проинформированным, контейнер может блокировать соответствующие пункты меню Simulate > Go & Step & Resume.

Синтаксис:

ReStart()

K2_SimKernel.ByStep

Метод для симуляции модели по шагам. Генерирует событие RunIn (STAGE As K2StageEnum=sk_InStep), информирующие контейнер о том, что К2-ядро выполняет один шаг симуляции в отдельном потоке. Будучи проинформированным, контейнер может блокировать соответствующие пункты меню Simulate > Go & Step & Resume.

Синтаксис:

ByStep()

K2_SimKernel.Resume

Метод для возобновления процедуры симуляции модели от приостановленного состояния. Генерирует событие RunIn (STAGE As K2StageEnum=sk_InContinuousMode), информирующее контейнер о том, что К2-ядро непрерывно функционирует в отдельном потоке. Будучи проинформированным, контейнер может блокировать соответствующие пункты меню Simulate > Go & Step & Resume.

Синтаксис:

Resume()

K2_SimKernel.Suspend

Метод для приостановки процедуры симуляции модели. При вызове данного метода события не генерируются. Контейнер сам должен активировать блокированные ранее пункты меню Simulate > Go & Step & Resume, и деактивировать пункт Simulate > Suspend.

Синтаксис:

Suspend()

K2_SimKernel.Break

Метод для завершения процедуры симуляции модели. При вызове данного метода события не генерируются. Контейнер сам должен активировать блокированные ранее пункты меню Simulate > Go & Step, и деактивировать пункты Simulate > Resume & Suspend & Break.

Синтаксис:

Break()

K2_SimKernel.Copyrigth

Метод для вызова диалогового окна с информацией о версии компонента и об авторских правах.

Синтаксис:

Copyrigth()

Свойства

K2_SimKernel.Version As Long

Свойство, с помощью которого управляющий скрипт может получить номер версии K2-ядра. Доступно как для чтения, так и для записи. При выполнении операции записи математическое ядро проверяет вводимый и существующий номер версии на равенство, и в случае несовпадения выводит на экран предупреждающее сообщение.

K2_SimKernel.getBlkState(idBlk As Long, indexOut As Integer) As Double

Свойство для опроса значений сигналов на выходах математических блоков.

События

K2_SimKernel.RunIn (STAGE As K2StageEnum)

Информирует контейнер об изменений рабочих состояний математического K2-ядра. Можно использовать для синхронизации меню Simulate в контейнере. Рабочее состояние кодируется передаваемой в аргументе константой. Список констант представлен в виде перечисления K2StageEnum.

K2_SimKernel.SV_Add (ID_LIB As LibBlocksEnum, idBlk As Long)

Информирует контейнер о том, что в основном массиве K2-ядра создан объект для подключения сервера визуализации. При помощи данного объекта координаты модели либо считываются с сервера визуализации, либо записываются на него. В качестве параметров передаются библиотечный идентификатор блока и его индекс в массиве. Управляющий скрипт должен передать объекту идентификатор сервера.

K2_SimKernel.ModelIn (idBlk As Long)

Информирует контейнер о необходимости выполнения каких-то действий. Генерируется блоками Event в моделе пользователя. Можно использовать для синхронизации сторонних серверов визуализации. Например, анимации. В качестве параметра передается индекс соответствующего блока Event в массиве. Управляющий скрипт может использовать его при вызове метода K2_SimKernel.getBlkState.

Перечисления

ImplSolver_Enum

Перечисление, содержащее константы - идентификаторы методов решения алгебраических уравнений.

K2StageEnum

Перечисление, содержащее константы, отвечающие за режимы работы математического К2-ядра.

LibBlocksEnum

Перечисление, содержащее константы - идентификаторы математических блоков.

Metod_1s_Enum

Перечисление, содержащее константы - идентификаторы методов интегрирования.