Математическое моделирование в системе АТЛАС

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

С целью повышения производительности разработки математических моделей в среде АТЛАС предусмотрены следующие средства:

  1. Язык описания математической модели

    Язык описания математической модели содержит формулы расчета величин, отражающих технологический процесс, и состоит из констант, переменных, знаков арифметических действий, скобок, функций, операторов и комментариев.

  2. Отладчик математических моделей

    Отладчик уравнений имеет следующие возможности:

  3. Интерфейс подключения внешних DLL

    После загрузки программа АТЛАС производит поиск внешних библиотек Dll с названиями"Alt_????.Dll". Библиотека должна содержать таблицу описания операторов и программу инициализации "Init" подключающую эту таблицу к таблице функций системы.

    Внешняя библиотека Atl_Mod2.Dll содержит следующие математические модели:

    Для разработки Dll необходимы следующие файлы:

    SysData.pas
    Модуль описания внешних типов и общих переменных должен быть одинаковый при трансляции всех Dll и программы АТЛАС.
    graph.pas
    Модуль описания подпрограмм вынесенных во внешнюю библиотеку Sys_Atl.Dll и должен с ей соответствовать.
    atl_func.dpr
    Пример написания внешних подпрограмм языка уравнений.
    atl_prib.dpr
    Пример написания внешних подпрограмм языка сюжета.

    Пример 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. Все права защищены.