matlab设计电梯门动画设计,仿真动画软件设计作品--施工电梯

此篇博客详细展示了如何使用Matlab编程实现电梯的控制模型,包括电机旋转、单刀双掷开关操作、电梯门的开闭以及实时动态图形。通过代码演示了上升、下降控制、电机运动轨迹和开关状态的交互,适合学习控制系统设计和Matlab绘图技巧。
摘要由CSDN通过智能技术生成

%作者:050408610皮定业

figure('name','自控电梯');

axis([-2.0,15.0,-2.0,15.0])

hold on

fill([-2,15,15,-2],[-2,-2,15,15],[0.5,0.2,0.3]);

x1=[8 8 10 10];

y1=[6 0 0 6];

x2=[10 10 12 12];

text(-1,8,'上升','fontsize',10,'color','c');

text(4,8,'下降','fontsize',10,'color','c');

text(6,12.5,'控制电机','fontsize',10,'color','c');

text(12.5,3,'电梯','fontsize',10,'color','c');

text(5,4.5,'关闭','fontsize',10,'color','c');

text(5,1.5,'打开','fontsize',10,'color','c');

l1=line([2;5.5],[11;11],'color','c','linestyle','-','linewidth',2);

l2=line([2;2],[9;11],'color','c','linestyle','-','linewidth',2);

l3=line([1;1],[7;9],'color','c','linestyle','-','linewidth',2);

l4=line([3;3],[7;9],'color','c','linestyle','-','linewidth',2);

l5=line([1;3],[9;9],'color','c','linestyle','-','linewidth',2);%绘制导线

k1=line([2;1],[6;7],'color','r','linestyle','-','linewidth',2);%单刀双掷开关

k2=line([4;5],[3;4],'color','b','linestyle','-','linewidth',2);%单刀双掷开关

g1=line([7.7;8],[3;3],'color','b','linestyle','-','linewidth',2);

g2=line([7.7;7.7],[3;4],'color','b','linestyle','-','linewidth',2);

g3=line([7.4;7.7],[2;4],'color','b','linestyle','-','linewidth',2);

g4=line([7.4;7.4],[2;4],'color','b','linestyle','-','linewidth',2);

g5=line([7.1;7.4],[2;4],'color','b','linestyle','-','linewidth',2);

g6=line([7.1;7.1],[2;4],'color','b','linestyle','-','linewidth',2);

g7=line([6.8;7.1],[2;4],'color','b','linestyle','-','linewidth',2);

g8=line([6.8;6.8],[2;4],'color','b','linestyle','-','linewidth',2);

g9=line([6.5;6.8],[2;4],'color','b','linestyle','-','linewidth',2);

g10=line([6.5;6.5],[2;3],'color','b','linestyle','-','linewidth',2);

g11=line([6.0;6.5],[3;3],'color','b','linestyle','-','linewidth',2);

g12=line([6;6],[2;4],'color','c','linestyle','-','linewidth',2);

g13=line([5;6],[2;2],'color','c','linestyle','-','linewidth',2);

g14=line([5;6],[4;4],'color','c','linestyle','-','linewidth',2);%绘制电梯门伸缩控制开关

door1=patch(x1,y1,[0 1 1]);

door2=patch(x2,y1,[0 1 1]);%画电梯的两面门

t=0:pi/100:2*pi;

fill(6+0.5*sin(t),11+cos(t),[0.7,0.85,0.9]);%电机左端

fill(8.5+0.5*sin(t),11+cos(t),[0.7,0.85,0.9]);%电机右端

e0=line([9;10],[11;11],'color','r','linewidth',2);%

e1=line([10;10],[6;11],'color','b','linewidth',2);%连接电机中轴和电梯的线

%画电机的表面(用八根不同颜色的线代替,每根之间相差pi/4)

%为简便起见,初始条件下可将八根线分成两组放在电机的顶端和底端

s1=line([6;8.5],[12;12],'color','c','linestyle','-','linewidth',2);

s2=line([6;8.5],[10;10],'color','m','linestyle','-','linewidth',2);

s3=line([6;8.5],[12;12],'color','b','linestyle','-','linewidth',2);

s4=line([6;8.5],[10;10],'color','w','linestyle','-','linewidth',2);

s5=line([6;8.5],[12;12],'color','k','linestyle','-','linewidth',2);

s6=line([6;8.5],[10;10],'color','g','linestyle','-','linewidth',2);

s7=line([6;8.5],[12;12],'color','r','linestyle','-','linewidth',2);

s8=line([6;8.5],[10;10],'color','b','linestyle','-','linewidth',2);

a=0;    %设定电机运转的初始角度

da=0.05;%设定电机正转的条件

s=0;    %设定门运动的初始条件

ds=0.05;%设定门运动的周期

while s<5    %条件表达式  (当0

a=a+da;

xa1=6+abs(0.5*sin(a)); %当线运动到电机背面时会覆盖电机左端,用abs可解决这一问题增强逼真感)

xa2=8.5+0.5*sin(a);

ya1=11+cos(a);

ya2=11+cos(a);%设定s1的两端点坐标(s1是对应0的线)

xb1=6+0.5*abs(sin(a+pi));

xb2=8.5+0.5*sin(a+pi);

yb1=11+cos(a+pi);

yb2=11+cos(a+pi); %设定s2的两端点坐标(s2是对应pi的线)

xc1=6+abs(0.5*sin(a+pi/2));

xc2=8.5+0.5*sin(a+pi/2);

yc1=11+cos(a+pi/2);

yc2=11+cos(a+pi/2);%设定s3的两端点坐标(s3是对应pi/2的线)

xd1=6+0.5*abs(sin(a-pi/2));

xd2=8.5+0.5*sin(a-pi/2);

yd1=11+cos(a-pi/2);

yd2=11+cos(a-pi/2);%设定s4的两端点坐标(s4是对应-pi/2的线)

xe1=6+abs(0.5*sin(a+pi/4));

xe2=8.5+0.5*sin(a+pi/4);

ye1=11+cos(a+pi/4);

ye2=11+cos(a+pi/4);%设定s5的两端点坐标(s5是对应pi/4的线)

xf1=6+0.5*abs(sin(a+pi*3/4));

xf2=8.5+0.5*sin(a+pi*3/4);

yf1=11+cos(a+pi*3/4);

yf2=11+cos(a+pi*3/4);%设定s6的两端点坐标(s6是对应pi*3/4的线)

xg1=6+abs(0.5*sin(a-pi*3/4));

xg2=8.5+0.5*sin(a-3*pi/4);

yg1=11+cos(a-3*pi/4);

yg2=11+cos(a-3*pi/4);%设定s7的两端点坐标(s7是对应-3*pi/4的线)

xh1=6+0.5*abs(sin(a-pi/4));

xh2=8.5+0.5*sin(a-pi/4);

yh1=11+cos(a-pi/4);

yh2=11+cos(a-pi/4);  %设定s8的两端点坐标(s8是对应-pi/4的线)

set(s1,'xdata',[xa1;xa2],'ydata',[ya1;ya2]);

set(s2,'xdata',[xb1;xb2],'ydata',[yb1;yb2]);

set(s3,'xdata',[xc1;xc2],'ydata',[yc1;yc2]);

set(s4,'xdata',[xd1;xd2],'ydata',[yd1;yd2]);

set(s5,'xdata',[xe1;xe2],'ydata',[ye1;ye2]);

set(s6,'xdata',[xf1;xf2],'ydata',[yf1;yf2]);

set(s7,'xdata',[xg1;xg2],'ydata',[yg1;yg2]);

set(s8,'xdata',[xh1;xh2],'ydata',[yh1;yh2]); %绘制电机表面各线条的运动

s=s+ds;

set(door1,'xdata',x1,'ydata',[6+0.5*s 0+0.5*s 0+0.5*s 6+0.5*s]);

set(door2,'xdata',x2,'ydata',[6+0.5*s 0+0.5*s 0+0.5*s 6+0.5*s]); %绘制门的向上运动

set(e1,'xdata',[10;10],'ydata',[6+0.5*s;11]);  %绘制门顶的绳索的向上运动

set(gcf,'doublebuffer','on');%消除振动

drawnow;

end

b=0;%设定电机反转的条件

db=0.05;

while s<10    %条件表达式  (当5

b=b-db;

xa1=6+abs(0.5*sin(a+b));

xa2=8.5+0.5*sin(a+b);

ya1=11+cos(a+b);

ya2=11+cos(a+b);%设定s1的两端点坐标(s1是对应0的线)

xb1=6+0.5*abs(sin(a+pi+b));

xb2=8.5+0.5*sin(a+pi+b);

yb1=11+cos(a+pi+b);

yb2=11+cos(a+pi+b);%设定s2的两端点坐标(s2是对应pi的线)

xc1=6+abs(0.5*sin(a+pi/2+b));

xc2=8.5+0.5*sin(a+pi/2+b);

yc1=11+cos(a+pi/2+b);

yc2=11+cos(a+pi/2+b);%设定s3的两端点坐标(s3是对应pi/2的线)

xd1=6+2*abs(sin(a-pi/2+b));

xd2=8.5+0.5*sin(a-pi/2+b);

yd1=11+cos(a-pi/2+b);

yd2=11+cos(a-pi/2+b);%设定s4的两端点坐标(s4是对应-pi/2的线)

xe1=6+abs(0.5*sin(a+pi/4+b));

xe2=8.5+0.5*sin(a+pi/4+b);

ye1=11+cos(a+pi/4+b);

ye2=11+cos(a+pi/4+b);%设定s5的两端点坐标(s5是对应pi/4的线)

xf1=6+0.5*abs(sin(a+pi*3/4+b));

xf2=8.5+0.5*sin(a+pi*3/4+b);

yf1=11+cos(a+pi*3/4+b);

yf2=11+cos(a+pi*3/4+b);%设定s6的两端点坐标(s6是对应pi*3/4的线)

xg1=6+abs(0.5*sin(a-pi*3/4+b));

xg2=8.5+0.5*sin(a-3*pi/4+b);

yg1=11+cos(a-3*pi/4+b);

yg2=11+cos(a-3*pi/4+b);%设定s7的两端点坐标(s7是对应-3*pi/4的线)

xh1=6+0.5*abs(sin(a-pi/4+b));

xh2=8.5+0.5*sin(a-pi/4+b);

yh1=11+cos(a-pi/4+b);

yh2=11+cos(a-pi/4+b);%设定s8的两端点坐标(s8是对应-pi/4的线)

%绘制电机表面各线条的运动

set(s1,'xdata',[xa1;xa2],'ydata',[ya1;ya2]);

set(s2,'xdata',[xb1;xb2],'ydata',[yb1;yb2]);

set(s3,'xdata',[xc1;xc2],'ydata',[yc1;yc2]);

set(s4,'xdata',[xd1;xd2],'ydata',[yd1;yd2]);

set(s5,'xdata',[xe1;xe2],'ydata',[ye1;ye2]);

set(s6,'xdata',[xf1;xf2],'ydata',[yf1;yf2]);

set(s7,'xdata',[xg1;xg2],'ydata',[yg1;yg2]);

set(s8,'xdata',[xh1;xh2],'ydata',[yh1;yh2]);

s=s+ds;

set(k1,'xdata',[2;3],'ydata',[6;7]);   %绘制闸刀的换向运动

set(door1,'xdata',x1,'ydata',[11-0.5*s 5-0.5*s 5-0.5*s 11-0.5*s]);

set(door2,'xdata',x2,'ydata',[11-0.5*s 5-0.5*s 5-0.5*s 11-0.5*s]);%绘制门的向下运动

set(e1,'xdata',[10;10],'ydata',[11-0.5*s;11]);  %绘制门顶绳索的向下运动

set(gcf,'doublebuffer','on');%消除振动

drawnow;

end

for i=1:400

a1=10-0.005*i;

a2=10+0.005*i;

x1=[8 8 a1 a1];

x2=[a2 a2 12 12];

set(door1,'xdata',x1);

set(door2,'xdata',x2);

set(k2,'xdata',[4;5],'ydata',[3;2]); %绘制闸刀的换向运动

set(gcf,'doublebuffer','on');%消除振动

drawnow;

end %绘制电梯门的打开运动

for i=1:400

a3=8+0.005*i;

a4=12-0.005*i;

x1=[8 8 a3 a3];

x2=[a4 a4 12 12];

set(door1,'xdata',x1);

set(door2,'xdata',x2);

set(k2,'xdata',[4;5],'ydata',[3;4]); %绘制闸刀的换向运动

set(gcf,'doublebuffer','on');%消除振动

drawnow;

end %绘制电梯门的关闭运动

最后修改于 2009-03-11 14:40

阅读(?)评论(0)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
八、 实验内容和要求: 要求根据下面的功能说明描述实现模拟电梯控制软件 (一)电梯配置 1. 共有1个电梯 2. 共有maxfloor层楼层。maxfloor=9。 3. 中间层每层有上下两个按钮,最下层只有上行按钮,最上层只有上行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响应,则指示灯灭 4. 电梯内共有maxfloor个目标按钮,表示有乘客在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭 5. 另有一启动按钮(GO)。当电梯停在某一楼层后,接受到GO信息就继续运行。如果得不到GO信息,等待一段时间也自动继续运行。 6. 电梯内设有方向指示灯表示当前电梯运行方向。 说明:由于本次实验不使用可视化框架,所以无法作到从图形界面上获取按钮请求。因此电梯按钮的设计,不在图形界面上体现,仅用来设计键盘的模拟输入。 (二)电梯的运行控制 1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。 2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。 3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。 4. 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。 5. 乘客数量等外界因素(可能导致停靠时间的长短变化)不予考虑。假设电梯正常运行一层的时间是5S,停靠目标楼层、上下乘客和电梯继续运行的时间是5S。 6. 当电梯停靠某层时,该层的乘客如果错误的按目标或呼叫按钮都不予响应。 7. 电梯停要某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。等接到“GO”信号后电梯立即继续运行。若无GO信号,则电梯在等了上下乘客和电梯继续运行时间后也将继续运行。 8. 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。 (三)电梯运行的控制策略 以下是几个候选策略: 1.先来先服务策略: 将所有呼叫和目标按到达时间排队,然后一一完成。这是相当简单的策略,只需要设计一个将呼叫和目标排队的数据结构。因为该策略效率也很低,所以没有实际的电梯采用这种策略。 2. 顺便服务策略: 顺便服务是一种最常见的简单策略。这种策略在运行控制中所规定的安全前提下,一次将一个方向上的所有呼叫和目标全部完成。然后掉转运行方向完成另外一个方向上的所有呼叫和目标。 可以采用设定目标楼层的办法来实现这个策略,即电梯向一个目标楼层运行,但这个楼层可以修改。具体策略如下: 1) 修改目标楼层的策略: a.如果电梯运行方向向上,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向上呼叫或者目标,将目标楼层修改为这个新的楼层。 b.如果电梯运行方向向下,那么如果新到一个介于当前电梯所处楼层和目标楼层之间,又可以安全到达的向下呼叫或者目标,将目标楼层修改为这个新的楼层。 2)确定新的目标楼层: 如果电梯向上运行,当它到达某个目标楼层后,则依照以下顺序确定下一个目标楼层: a.如果比当前层高的楼层有向上呼叫或者目标,那么以最低的高于当前楼层的有向上呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最高的向下呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最低的向上呼叫所在楼层为电梯当前的目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 如果电梯向下运行,依照以下顺序确定下一目标楼层: a.如果比当前层低的楼层有向下呼叫或者目标,那么以最高的低于当前楼层的有向下呼叫或者目标的楼层为目标。 b.如果无法确定目标楼层,那么以最低的向上呼叫或者目标所在楼层为电梯当前目标楼层。 c.如果无法确定目标楼层,那么以最高的向下呼叫楼层为目标楼层。 d.如果仍然不能确定目标楼层(此时实际上没有任何呼叫和目标),那么电梯无目标,运行暂停。 3)最快响应策略: 响应所有的现在存在的所有呼叫和目标所需时间(采用不同方案电梯停靠时间相同,所以不必考虑)最短的策略。 可选方案一是电梯先向上运行响应经过各层的目标和向上呼叫,再向下运行响应所有向下呼叫以及途经各层的目标,最后再向上响应剩余的向上呼叫。二是恰好相反,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值