2015-11-16 13 views
3

Кто-нибудь знает, как получить доступ к определенным выходам встроенной функции Dymola getExperiment() ;? К сожалению, он возвращает только верный скаляр StartTime. функция, как представляется, определяется следующим образом:Dymola getExperiment() access

function getExperiment "Get current experiment setting" 
    output Real StartTime := 0.0 "Start of simulation"; 
    output Real StopTime := 1.0 "End of simulation"; 
    output Integer NumberOfIntervals := 0 "Number of output points"; 
    output Real OutputInterval := 0.0 "Distance between output points"; 
    output String Algorithm := "" "Integration method"; 
    output Real Tolerance := 0.0001 "Tolerance of integration"; 
    output Real FixedStepSize := 0.0 "Fixed step size for Euler"; 
end getExperiment; 

Моя тестовая модель:

model GetExpTest 
    Real staTime; 
    Real outInterval; 
equation 
    (staTime,outInterval)=receiveInfo(); 
end GetExpTest;code here 

С помощью функции:

function receiveInfo 
    output Real startT; 
    output Real outputInterv; 
algorithm 
    (startT,,,outputInterv,,,):=getExperiment(); 
end receiveInfo; 

и сообщение об ошибке я получаю это:

Компиляция и связывание модели (Visual C++).

dsmodel.c dsmodel.c (32): ошибка C2079: 'dummy_mult_' использует неопределенную-структуру '' getExperiment_struct dsmodel.c (32): предупреждение C4013: 'getExperiment' не определено; предполагается, что extern возвращает int dsmodel.c (33): ошибка C2224: слева от '.StartTime0_0_0member' должен иметь тип struct/union dsmodel.c (34): ошибка C2224: слева от .OutputInterval0_0_0member 'должен иметь тип struct/union

Ошибка при создании Dymosim.

Благодарим вас за помощь!

+0

Добро пожаловать в StackOverflow! Можете ли вы включить код, который вы используете с помощью 'getExperiment()'? – kdbanman

+1

Извините за это, я отредактировал свое сообщение и добавил тестовую модель. – PhilippMehrfeld

ответ

4

Если я: getExperiment() следующее возвращается:

= 0.0, 1.0, 500, 0.0, "dassl", 0.0001, 0.0 

Таким образом, вы можете получить доступ к данным с помощью обычного назначения, принимая несколько выходов. Например:

(StartTime,,NumberOfIntervals) := getExperiment() 

Который возвращает:

Declaring variable: Real StartTime ; 
Declaring variable: Integer NumberOfIntervals ; 
StartTime 
= 0.0 
NumberOfIntervals 
= 500 
+0

Это работает в строке «Команды» на вкладке «Моделирование», справа. Но я хочу использовать функцию для чтения, например. длина интервала во время моделирования (или, по крайней мере, во время фазы инициализации). Например: 'функция receiveInfo выход Real startT; выход Real outputInterv; алгоритм (startT ,,, outputInterv ,,,): = getExperiment(); end receiveInfo; ' Я получаю только сообщения об ошибках dsmodel.c. – PhilippMehrfeld

+0

Я подозреваю, что это потому, что это скриптовая функция в Dymola. OpenModelica (который я использую) - то же самое - многие функции сценариев недоступны для симуляций для доступа. И действительно, getExperiment не определен в спецификации Modelica, поэтому нельзя предположить, что он будет работать с моделью. –