Имейте в виду, что sample(x,y)
означает, что выборка верна в x+i*y
, где i
начинается с нуля. Это означает, что sample(0, ...)
становится истинным в time=0
.
Поскольку j
начинается с 1, а k
предположительно больше 1, мне не кажется неожиданным, что sample(0, delta_t) and j<k
должно стать истинным в начале симуляции.
Я подозреваю, что вы хотите:
class abc
import Modelica.SIunits;
parameter SIunits.Time delta_t=0.5;
constant Real a[:]={4,2,6,-1,3,5,7,4,-3,-6};
Real x;
Integer j(start=1);
Integer k=size(a, 1);
algorithm
when {(sample(delta_t, delta_t) and j < k),j == 1} then
x := a[pre(j)];
j := pre(j) + 1;
end when;
end abc;
Я действительно не вижу смысла в условии j==1
. Это истинно вначале, а значит, оно не «становится» истинным потом. И поскольку j
никогда не уменьшается, я не понимаю, почему оно должно возвращаться к значению 1
после первого увеличения.
Обратите внимание, что я добавил pre
вокруг правых значений для j
. Если бы это было в разделе equation
, я почти уверен, что потребуется pre
. Поскольку это раздел algorithm
, он в основном предназначен для документирования целей кода. Это также делает код устойчивым к переключению с раздела equation
на раздел algorithm
.
person
Michael Tiller
schedule
19.02.2013
{(sample(0, delta_t) and j<k), j==1}
как условие для уравнения когда. Две строки кода внутри вашего уравнения «когда» становятся активными в тот момент, когда одно из двух условий в вашем векторе становится истинным. Вtime=0
условиеj==1
становится истинным, и код выполняется в тот же момент. - person matth   schedule 19.02.2013