12
Руководство пользователя
×

5.4.19 Обновление значений датчиков с использованием DLL-модуля

 Данный метод изменяет значения датчиков, созданных методом переменный датчик с заданным начальным значением. Изменение значений датчиков производится в программе пользователя, которая должна быть оформлена в виде DLL-модуля.
Если для изменения значения переменного датчика используется данный метод и для этого датчика дополнительно не задается производная переменного датчика, то между этими изменениями он сохраняет постоянное значение и его производные по времени равны нулю. Если же производная переменного датчика определена, то датчик будет мгновенно менять свое значение в моменты срабатывания данной реформы, а между этими моментами значение датчика будет изменяться согласно заданному дифференциальному уравнению.
Если в момент срабатывания реформы DLL-модуль возвращает предустановленное значение равное -1, соответствующее невозможности расчета, то расчет останавливается. Нулевое значение соответствует корректному завершению расчета значений датчиков. Если DLL-модуль возвращает значение отличное от нуля и -1, то в этот момент времени переменные датчики не имеют значения. В дальнейшем для того чтобы значения переменных датчиков вновь стало определено, их значения нужно обновить с помощью одного из соответствующих изменений механизма корректными значениями. Если данное изменение механизма используется совместно с методом производная переменного датчика, то дополнительно требуется корректное значение производной.
Синтаксис метода создания
updateSensorDLL(DLLName, FunctionName, Input, Output)
Обязательные позиционные параметры метода
string DLLName
Имя DLL-модуля.
string FunctionName
Имя функции из DLL-модуля, которая используется для расчета.
string Input
Строка описания имен входных параметров – скаляров и/или датчиков с указанием единиц измерения, в которых они передаются в функцию DLL-модуля. Объекты в строке отделяются друг от друга запятыми, единицы измерения каждого объекта указываются после его имени в квадратных скобках. Если величина безразмерная, то квадратные скобки можно опустить.
Пример строки, описывающей входные параметры:
«sensorIn_1 [kg], scalarIn_2, sensorIn_3 [m/s], …»
string Output
Строка описания имен выходных изменяемых датчиков и единиц измерения их значений, в которых они передаются из функции DLL-модуля в программный комплекс. Объекты в строке отделяются друг от друга запятыми, единицы измерения каждого объекта указываются после его имени в квадратных скобках. Если величина безразмерная, то квадратные скобки можно опустить. Все изменяемые датчики должны быть созданы методом переменный датчик с заданным начальным значением.
Пример строки, описывающей выходные датчики:
«sensorOut_1, sensorOut_2 [N], sensorOut_3 [m], …»
Описание
Расчет проходит по следующей схеме. Когда требуется обновить значения датчиков с использованием DLL -модуля, программный комплекс определяет значения объектов, заданных в качестве входных параметров. С этими значениями вызывается функция из DLL-модуля, а затем вычисляются значения выходных датчиков. Если возвращаемое значение функции равно нулю, расчет продолжается, и значения датчиков обновляются. Если возвращаемое значение равно -1, то расчет будет остановлен с выдачей соответствующей диагностики. Во всех остальных случаях обновляемые датчики не имеют значения.
Входные данные передаются в функцию DLL-модуля в единицах измерения, заданных пользователем в строке Input. Значения выходных данных, которыми обновляются значения датчиков с заданным начальным значением, должны вычисляться в единицах измерения, указанных пользователем в строке Output.
Алгоритм для расчета должен быть оформлен в виде функции, которая имеет в терминологии языка Си следующее описание:
int имя_функции (int sInput, double *input, int sOutput, double *output).
Возвращаемое значение функции
Переменная целого типа. Если значение переменной равно нулю, то расчет прошел корректно. Если значение переменной равно -1, то расчет останавливается, т.е. считаем, что данный код возврата зарезервирован для случаев, когда расчет не может быть продолжен. Во всех остальных случаях это значение – код ошибки, который будет выведен при расчете механической системы в информационном окне.
Входные параметры
      int sInput – количество входных параметров. Значение sInput вычисляется перед обращением к функции.
      double *input – указатель на массив значений входных параметров. Выделение памяти под массив и определение значения указателя происходит в программном комплексе. Перед обращением к функции в данный массив записываются значения входных параметров. При этом в первый элемент массива записывается значение первого входного параметра, во второй – второго параметра и т.д.
Выходные параметры
      int sOutput – количество выходных датчиков. Значение sOutput вычисляется перед обращением к функции.
      double *output – указатель на массив значений выходных датчиков. Выделение памяти под массив и определение значения указателя происходит в программном комплексе. После обращения к функции из этого массива извлекаются значения выходных датчиков. При этом из первого элемента массива извлекается значение первого выходного датчика, из второго – второго датчика и т.д.
Имя функции может быть произвольным. При вызове функции программный комплекс EULER использует соглашение о вызове функций в стиле Си (__cdecl).