snvittak129 发表于 2007-6-9 14:45

simulink中怎样给出一个连续变化的输入信号

兄弟要做一个飞机机动飞行的仿真,中间的结构图已建立完毕,是双输入多输出系统。现在需要让输入信号1在一段时间内为一常值,此后输入信号2在一段时间为一常值,再类此交替,是要考虑时序问题,恳请各位大侠指点:'(

lirui0662 发表于 2007-6-9 15:13

用switch试试

cdwxg 发表于 2007-6-9 21:05

恐怕不能这个简单
顶多switch只是其中的一个模块
一段时间为常数,可以说是个常数,2个常数,关键是切换时间
但switch一般是通过输入信号进行判断,而不判断时间

lirui0662 发表于 2007-6-9 22:00

可以把一个时钟接到switch的条件判断出
然后把条件设为比如说:t〉10或t<10等

cdwxg 发表于 2007-6-10 11:33

但关键的问题是他要不断交替
而不是一个切换如果一个切换,step都可以了
这个主要还应该看信号发生器那个地方的模块。

snvittak129 发表于 2007-6-10 12:25

回复 #2 lirui0662 的帖子

先谢过这位仁兄,试了一下,确实仅凭switchi不能实现。。。:handshake

snvittak129 发表于 2007-6-10 12:26

回复 #5 cdwxg 的帖子

这位大哥说的是,兄弟我用最笨方法,五个step相加,合成了一个输入。。。。

cdwxg 发表于 2007-6-10 13:02

1:你先看下信号发生器那里的模块
2:你需要几个,5个step够了么?如果你一直交替,除非枚举所有时间。但这个方法是不实用的。只能为了该仿真而仿真,仿真时间变了等都不行。

但关于信号这个地方我不精通,所以只能靠你自己去查阅下这些模块。其实应该有类似的模块。
其实就是一个信号,t1时间内为1,t2时间段内为0,再过t1为1,再t2为0。。。。。

snvittak129 发表于 2007-6-10 14:41

回复 #8 cdwxg 的帖子

的确这样穷举是不实际的,也远非5个step能够,看来得好好研究一下发生器了!

cjclj 发表于 2007-6-14 14:50

建议你看看重复控制的方法,相信会给你启示的!

可以用一个正反馈,在信号消失之后不断重复出现以前的信号!

[ 本帖最后由 cjclj 于 2007-6-14 14:52 编辑 ]

yf2002043227 发表于 2007-6-21 22:46

S函数就ok,今天刚看了一下午S函数,深有体会啊

cdwxg 发表于 2007-6-22 11:17

原帖由 yf2002043227 于 2007-6-21 22:46 发表 http://www.chinavib.com/forum/images/common/back.gif
S函数就ok,今天刚看了一下午S函数,深有体会啊
S函数是比较强大的,人性化的东西,有兴趣你编写下在下面来实现看看:)

yf2002043227 发表于 2007-6-22 12:33

就是实现了一个简单的1s交替一次,如果时间不一样可能会麻烦一点,可楼主又没说t1=?t2=?
function = sfuntmpl(t,x,u,flag)
switch flag,
case 0,
    =mdlInitializeSizes;
case 1,
    sys=mdlDerivatives(t,x,u);
case 2,
    sys=mdlUpdate(t,x,u);
case 3,
    sys=mdlOutputs(t,x,u);
case 4,
    sys=mdlGetTimeOfNextVarHit(t,x,u);
case 9,
    sys=mdlTerminate(t,x,u);
otherwise
    error(['Unhandled flag = ',num2str(flag)]);
end
function =mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates= 0;
sizes.NumDiscStates= 0;
sizes.NumOutputs   = 1;
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0= [];
str = [];
ts= ;
function sys=mdlDerivatives(t,x,u)
sys = [];
function sys=mdlUpdate(t,x,u)
sys = [];
function sys=mdlOutputs(t,x,u)
ifmod(floor(t),2)==0
   sys = 1;
   else sys=2;
end
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 0.001;    %Example, set the next hit to be one second later.
sys = t + sampleTime;
function sys=mdlTerminate(t,x,u)
sys = [];

yf2002043227 发表于 2007-6-22 12:37

:@L 理解错了 楼主的意思了,现在明白了,就在两个输入分别加上上面的s-functiong 模块,里面程序该成交替出现的旧可以了,反而更加简单了,比在一个S里实现要简单,t1和t2不相等也没关系了

[ 本帖最后由 yf2002043227 于 2007-6-22 12:38 编辑 ]

zhllz 发表于 2007-7-2 19:24

可以使用触发模块实现,也可以使用m文件调用simulink文件实现,输入信号在m文件里用程序控制!
页: [1] 2
查看完整版本: simulink中怎样给出一个连续变化的输入信号