Математическая модель представляет собой систему взаимоувязанных дифференциально – разностных и логических уравнений (количество переменных и уравнений неограниченно).
С целью повышения производительности разработки математических моделей в среде АТЛАС предусмотрены следующие средства:
Язык описания математической модели содержит формулы расчета величин, отражающих технологический процесс, и состоит из констант, переменных, знаков арифметических действий, скобок, функций, операторов и комментариев.
[знак] | + положительное (по умолчанию при отсутствии знака); |
– отрицательное; | |
[цифры] | набор цифр от 0..9 |
В наименовании переменных допускается использовать до 15 русских или английских символов причем строчные и заглавные символы эквивалентны, кроме того допускается использование символов “_”, “%”. Переменные объявляются автоматически при разборе уравнений. Под значение переменной отводится 6 байт, что позволяет работать с числами в диапазоне 2.9e-39..1.7e38 вычисления проводятся с 11 знаками.
При объявлении переменной ей присваивается нулевое значение, при необходимости установить не нулевые начальные условия предназначен оператор Def. Объявление переменных самописцев, для которых необходимо хранить предшествующие значения, осуществляется оператором Sam.
Предопределенной является переменная T в которой хранится текущее время модели. Перед началом тестирования проводится предварительный расчет аварийной ситуации, до тех пор пока переменная T не станет больше или равна нулю, этот момент считается началом тестирования.
Таблица 1
Обозначение | Действие | Приоритет | Комментарий | Пример |
^ | Возведение в степень | 2 | A^B | |
Delay | Задержка | 2 | Ф(t)=F( t - m * dT) задержка на m отсчетов | B:=F Delay 5 |
* | Умножение | 3 | A*32 | |
/ | Деление | 3 | A/B | |
Div | Целочисленное деление | 3 | A Div B | |
Mod | Остаток от деления | 3 | A Mod B | |
NORMA | Нормирование | 3 | F(x,y)=100*x/y | X norma Y |
And | Логическое И | 3 | =0 - ложь <>0 - истина | A and (C=D) |
Or | Логическое ИЛИ | 4 | A or B | |
Xor | Исключающее ИЛИ | 4 | A:=B Xor C | |
+ | Сложение | 4 | A + B | |
- | Вычитание | 4 | A – B | |
Max | Наибольшее | 4 | Ограничение снизу | A max 0 |
Min | Наименьшее | 4 | Ограничение сверху | A min 10 |
<= | Меньше равно | 5 | результат логических функций истина – 1 ложь – 0 | A<=5 |
<> | Не равно | 5 | A<>B | |
< | Меньше | 5 | A<B | |
= | Равно | 5 | A=B | |
>= | Больше равно | 5 | A>=B | |
> | Больше | 5 | A>B |
Перечень основных функций приведен в таблице 2. К основным функциям могут быть добавлены дополнительные при использовании Dll.
Таблица 2
Обозначение | Действие | Комментарий | Пример |
RND | Случайное число | Возвращает случайное число от 0 до аргумента | Rnd(5) |
COS | Косинус | Значение аргумента в радианах | Cos(3.14) |
SIN | Синус | Sin(A) | |
TAN | Тангенс | Tan(B) | |
ARCCOS | Арккосинус | Обратные тригонометрические функции | |
ARCSIN | Арксинус | ||
ARCTAN | Арктангенс | ||
ARCCTAN | Арккатангенс | ||
SIGN | Знак | 1 при положительном аргументе иначе 0 | |
EXP | e в степени | Exp(2) | |
LG | Десятичный логарифм | Lg(10) | |
LN | Натуральный логарифм | Ln(A) | |
NOT | Отрицание | Not(A) | |
ROUND | Округление | Round(B) | |
SQR | Квадратный корень | Sqr(A) | |
ABS | Модуль | Abs(B) | |
TRUNC | Целая часть | Trunc(B) | |
Up | По фронту | В устанавливается в 1 при изменении аргумента 0-не 0 | If Up(A) then B:=1 |
Exit | Выход | Выход из программы | if T>1000 then Exit(T) |
Out | Вывод | Вывод значения переменной в ответ | if A>B then Out(A) |
Оператор присвоения имеет вид:
[Переменная]:=[Выражение] {; Комментарий}
Выражение состоит из констант, переменных, функций, скобок и знаков арифметических действий.
Пример: P_PD69A: =3.5+(Rnd(0.1)-0.05) T:= T + dT; Шаг по времени
Начальные значения переменным присваиваются оператором Def:
Def [Имя переменной]=[Значение] {;Комментарий}
[Значение] - константа, переменная или выражение.
Пример: Def Tv_k270=А MAX B; Температура верха колонны k270
Описание: Def Переменная = Величина,1
После каждого расчета дифференциальных уравнений при изменении переменной ответа её значение записывается в файл ответа.
Пример: Def dP_E97=0,1; давление в монжусе (ёмкость 97) Def v_e97=0 P_E97:=P_E97+(rnd(0.1)-0.05); rnd(0.05) P_E97:=P_E97+dP_E97 If P_E97>5.9 then P_E97:=5.9
Если несколько приборов отображают значения одной переменной, объявляются переменные синонимы, например:
LE_046 - переменная самописец описанная в test.dur LE_046#K - переменная прибора в КИП LE_046#0 - переменная прибора по месту.
Если переменной синониму присвоить значение, то синонимия с этой переменной снимается.
Например: PAONL_1#1:=PAONL_1 * AO6M_1
Кроме этого, могут быть описаны переменные самописцев, для которых заводится специальная область памяти для хранения предыстория за последние 6 часов расчетного времени. Формат оператора Sam:
Sam [Имя переменной]=[Значение1],[Значение2] {; Комментарий}
[Значение1] - среднее значение величины
[Значение2] - амплитуда случайных отклонений величины
Пример: Sam L%_k64=L%_k64,2
Оператор Def может переопределить значение самописца описанного оператором Sam например:
Sam Var=0.5,0.05 ;заполняем массив случайными значениями около 0.5 Def Var=1 ;масштабируем массив в два раза
Возможен предварительный расчет самописцев как функции времени. Время обозначается переменной T, расчет производится для T [-12час..0] c шагом 2 мин. Hапpимеp для построения синусоиды с амплитудой 50 и периодом 3 часа можно записать:
SAM F%_in_k64=50+50*Sin(T/1720),0.7 где 1720=3*60*60/(2*pi)
Можно применить ограничение величин с помощью функций max и min:
SAM F%_in_k64=(50+50*sin(T/1720)) max 50,0.7
Формат операторов begin [Группа операторов] end
Эти операторы объединяют несколько операторов в группу выполняющихся совместно.
Формат оператора: If [Выражение] then [Оператор] else [Оператор]
Если значение выражения имеет значение истина (отличное от нуля значение) выполняется следующий за then оператор, если выражение ложно то выполняется оператор следующий за else.
Пример: if c then begin a:=d+1 if d=0 then e:=a else e:=9 end else begin if e=0 then a:=c+1 else d:=c-1 e:=3 end
Еще есть такая особенность
if усл then A1:=1 A2:=2 else A3:=3
при этом A2:=2 выполняется всегда вне зависимости от значения условия, а оператор else относится к предыдущему then.
Для вывода значения шкал укрупненного прибора предназначен оператор дифура out, если используется без оператора if.
Если оператор Out используется после if то вывод в ответ переменной осуществляется при выполнения условия, а активность шкал не проверяется.
Пример: ;-------Уравнение аварийной ситуации------- Out(PE_001_9) ;Вывод значения PE_001_9 если шкала активна. if A>B then Out(A) ;Вывод значения A если выполняется условие A>B.
Например: dt:=SR.Variab.Vr[2].Val; T [c] – время математической модели; DT [час]– период дискретизации модели; TdisConfig [мс] – период расчета модели по таймеру РС; TimeSpeed – коэффициент ускорения расчетов режима Wait.
Режим Wait предназначен для быстрого расчета модели с полной загрузкой процессора. Режим Wait устанавливается при старте АТЛАС если объявлено начальное значение переменной T<0 (Например: def T=-1000) или если сработал оператор Wait языка сюжет. В режиме Wait переменная TimeSpeed имеет значение заданное в файле конфигурации (или заданное оператором Def). При выходе из режима Wait переменной TimeSpeed присваивается значение 1.
Для корректной работы самописцев переменная Т за один период расчета не должна увеличится больше 120 (1 точка в 2 минуты). Если это произойдет то после каждого цикла точка будет заносится в самописец, а самописец будет отставать от времени.
Пример: def TdisConfig=500 ;Заменяет Tdis конфигурации def TimeMash=10 ;Масштаб времени тренажа - ускорение в 10 раз def TimeSpeed=20 ;Рекомендуется меньше 120/(TimeMash*TdisConfig/1000) def T=-1000 ;Предрасчет DT:=1/3600*(TdisConfig/1000)*TimeSpeed*TimeMash T:=T+DT*3600
Отладчик уравнений имеет следующие возможности:
После загрузки программа АТЛАС производит поиск внешних библиотек Dll
с названиями
Внешняя библиотека Atl_Mod2.Dll содержит следующие математические модели:
Для разработки Dll необходимы следующие файлы:
Пример DLL на Delphi для добавления функций языка математического моделирования:
{Библиотека дополнительных функций уравнений Атлас} {$IfDef Ok} {$R-,I-,Q-,S-,D-,L-,Y-,H-,O+} {$Else} {$R+,I+,Q+,S+,D+,L+,Y+,H-,O-} {$EndIf} Library Atl_Mod; {Общие системные модули (sys_atl.dll)} Uses Graph,SysData; {Общие системные переменные} Var SR:PSysRec; {Подпрограмма расчета Электрозадвижки} Procedure FElZad(Var S:Fstek); var Dvig,Vent:Real; DT:Real; FModif:Boolean; begin {Проверяем: всего должно быть 2 параметра, начиная с 1 - выходные} TestParam(S,2,1); {Считываем 2 параметра} LoadValue(@Dvig,2); DT:=SR.Variab^.Vr[2].Val; FModif:=False; if Dvig<>0 then begin Vent:=Vent+Dvig*DT; if Vent>1 then begin Vent:=1; Dvig:=0; FModif:=True; end else if Vent<0 then begin Vent:=0; Dvig:=0; FModif:=True; end; {Записываем 2 параметра начиная с 1} SaveValue(@Dvig,2,1); if FModif then OtvetVal(Sr.SFunc^.SC[2].W); end; {Очищаем массив параметров} SizBak(Sr.SFunc,0); end; Const NFuncNew=1; {Число реализованных функций} NewFunc:Array[1..NfuncNew] of OperDu =( (Name:'ELZAD' ;Func:@FElZad ;Tip:7;Prior:1)); {7букв} Procedure Init(PSR:PSysRec); Begin {Загрузка указателя на блок системных переменных} SR:=PSR; {Подготавливаем место для описаний новых функций} AddMas(SR.FuncDu,NFuncNew); {Копируем описание функций} Move(NewFunc,SR.FuncDu^.OD[SR.NFuncDu+1],SizeOf(NewFunc)); {Увеличиваем число функций} Inc(SR.NFuncDu,NFuncNew); End; exports Init Name 'Init'; end.
© ООО "АТЛАС" г.Воронеж, 2007-2013. Все права защищены. |