SimEvent怎么用?

来源:互联网 发布:android源码在线 编辑:程序博客网 时间:2024/06/11 01:16
(我是学物联网工程的,有个《系统建模与仿真》的专业选修,老师布置了两个大作业——使用MATLAB的Simulink建立一个连续系统模型和一个离散系统模型。)

(连续系统还好,学过《自动控制原理》,懂得使用Simulink中的积分环节,再加上一点《数字逻辑》的基础,基本上就都会了。这边有个PPT是我当时被老师赶鸭子上架、教全班人用Simulink时做的。传送门——http://download.csdn.net/detail/qq_21882325/9725895。因为是用来讲的PPT,所以内容不详细,有问题可以留言问我。)

(但是离散系统模型真是逼疯我了!!为啥百度“SimEvent”,啥都搜不到,只有孤零零一个SimEvent的英文文档……这让我这种险过4级的人怎么活!)

(于是,我就自己探索,自己琢磨。总算,有了点眉头……希望能帮到学弟学妹们2333333(如果能被百度到的话))

———————————————————————————————————————————————————————————————————————

开车。

************************************************************************************************************************************************************************

△SimEvent目录


打开Simulink Library,离散系统所需要的主要模块都在里面。

*************************************************************************************************************************************************************************

△几个最常用的模块组合

1.产生实体


Event-Based Random Number:随机数产生器,双击可以选择产生随机数的方式。在产生实体时通常选择泊松分布(Poisson),随机数种子可以任意选择。在上图组合中,Mean=k时,表示服从平均每k个时间单位生成一个实体的泊松分布,也就是平均每个时间单位产生1/k个实体。当然,由于是泊松分布,所以每个时间单位产生的实体数量会在1/k附近浮动。

Time-Based Entity Generator:实体生成器,双击可以改变实体产生所依赖的途径。通常选择“from port t”,以引入随机数生成器产生的基于泊松分布的随机数。选择“from dialog”的话,Period的值表示“每Period个时间单位产生一个实体”,数值不会浮动。

Display:这个在Simulink/Sinks/里面可以找到。双击实体生成器,里面的“stastiscs”里面可以选择想要查看的数据,引出一条线来接到Display上,运行模型之后就可以看到了。#d在这里是指产生并离开生成器的实体数量。

(注意,实体出入口和数值出入口的长相不一样,双箭头的是实体,不能连到单箭头的数值出入口上)

2.按比例分支


这里的随机数生成器的作用不再是生成一个随机数了,而是产生随机分支。很好理解,如下图。


Value Vector对应Output Switch的出口OUT1到OUT3,经过这个组合的实体,会以60%:25%:15%的概率从三个出口流出。(在Probability Vector中设置概率,要求加起来一定要为100%)

双击Output Switch可以改变出口数量。(随机数生成器的参数也要跟着改变)。

3.排队


双击FIFO Queue可以设置队列的最大长度,当队列到达最大长度时,前面的模块的运行会被阻塞,不能再将实体放到队列中。

“平均等待时长”通常是用来分析一个离散排队模型质量的最重要的参数。在FIFO队列的Stastics里面勾选w,再通过SimEvent Sinks中的Signal Scope可以查看平均的等待时长随时间的变化曲线,用以分析离散模型的性能。

4.服务


好端端的队列为什么会阻塞?原因就是服务会阻塞实体的流动。

同上,随机数生成器通常选择泊松分布,这里意思为“每k个时间单位服务一个实体”。

双击N-Server可以设置服务台的数量。当服务台被占满时,前面队列不能再往服务台传输实体。当服务完一个实体后,会继续接纳新的实体。

*************************************************************************************************************************************************************************

△几个“不常用”的组合

1.设定初始实体资源


当某种实体是固定数量的,而且需要循环利用的,怎么办?就比如操作系统中经典的理发师模型——理发师的数量是固定的,通常用完还要再用。(我们总不能不断地产生新的理发师来给顾客理发的,显然不合逻辑)

那么,怎样才能产生固定数量的理发师后,就停止继续产生该种实体呢?答案就是上图了。

将资源池(Resource Pool)的资源数量设成想要的数量,将Time-Based实体生成器的生成速度尽可能调高,实体经过Resource Acquire之后就会消耗k个(自己设置)资源池的资源数量。这样就能在最快的时间内产生固定数量的实体。

2.实体合成


当队列0与队列1中都有实体的时候,就可以经过Entity Combiner,合成为一个实体输出。

当队列0有实体,队列1为空的时候,则阻塞等待队列1的实体。反之亦然。

*************************************************************************************************************************************************************************

(拖了一个寒假才敲的这篇博客,所以简陋了点。估计也就下学期修了《系统建模与仿真》的学弟学妹才会浏览这篇博客了233333。有问题留言咯。)

哦,附上我的报告…

http://download.csdn.net/detail/qq_21882325/9759024

0 0
原创粉丝点击