电梯改进
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
1、 多梯配合的规则。
优先调用最近的电梯。先判断远近,再判断方向。
如果A闲梯在去接乘客甲的过程中,B梯在A到达之前先路过乘客甲的楼层,且方向与甲一致,则甲乘坐B,A梯自动停止。
2、中途不转弯。
若电梯起始方向是向上,则应走到最高的楼层请求(含内外),起始朝下的同理。
3、梯内无人时,梯内灯自动灭。
可以通过测重判断轿厢内有没有人,若没有人则梯内的楼层按键灯自动熄灭,电梯停留在人都下完的那一层,直到有请求。
比如我进梯按12层,你进梯按6层,但我和你都在6层出去了,电梯应停在6层,12的灯自动灭。(假定没有其他请求)
电梯闲置时,电梯内的照明灯自动熄灭,直到有人将进入电梯内。
扩展性:
1、如果有需求,可以扩展电梯模块消耗估算功能(接口6)
比如,多部电梯情况下,可以加上当前载客重量以及上/下行补偿,实现耗能/耗时预估功能,最终由总控模块给出最佳调度方案。
2、可以在硬件支持下,扩展楼层人数(红外线)侦测功能。
比如,发现某层楼有很多人在等电梯,就向这个楼层多调度几架电梯。
红外传感器对物体存在进行反应,不管人员移动与否,只要处于传感器的扫描范围内,它都会反应即传出触点信号。
定时器可以自动控制门的状态,其原理是将时钟与特定的开关电路相连,可预设定时间将自动门处于自动开启或锁门状态。
集中监视自动门开门关门状态可以通过位置信号输出电路来实现,可以采用接触式开关,当门到达一定位置(如开启位置)时,触动开关而给出触点信号。也可以采用感应式信号发生装置,当感应器探测到门处于某一位置时发出信号。在中控室设置相应的指示灯,就可以显示自动门的状态,而集中操作通常指同时将多个门打开或锁住,这取决于自动门控制器上有无相应的接线端子。
自动感应水龙头,有红外发射管、红外一体化接收管、主控MCU、电磁阀等构成
2、 自动感应水龙头,有红外发射管、红外一体化接收管、主控MCU、电磁阀等构成;
3、 MCU 控制过程:MCU 是整个系统的核心部分,定时发送红外线,并及时接收,来判断
有没有手靠近,如果有则开启电磁阀,放水,并开始放水定时,定时时间到关电磁阀,,,,
如下图
4、在MCU 发射红外线的过程中,为了减少误动作,而又保证必要的灵敏度,除
了发射红外的时候要利用载波外,一般还需对发射的波形做一些特殊处理,
从而提高系统的可靠性、准确性等。
2.系统结构与工作原理
2.1系统结构本系统采用模块化结构,
电路主要由五大部分组成;AT89C51及其外围电路部分;按键部
分;调制电路部分;以及红外发射部分。这五大部份就组成了控制遥控
码产生、和发射部分,主要有控制电源开关、12M时钟、CPU复位、红外
遥控发射、按键指示等。
2.2系统的工作原理 整个系统的工作电源为直流+5V.主要工
作原理是这样的:在单片机的P2口搭成了四个按键.本系统采用查询
方式,当有键按下时。单片机检测到有键按下,点亮按链指示灯。并且
产生的遥控编码信号(由。和1组成),通过p3
— 1端发出,调制在
38KHZ的载波上.经放大后驱动发射管发射出去。
2.3红外通信原理
2.3.1红外线的基本概念红外线是一种看不见的光线。在整个
电磁波波谱中。红外线由于处在可见光中缸光外侧的邻近区。所以称
为红外线(可见光通过兰棱镜可分解为红 橙、黄、绿、青、蓝、紫七色)o
电磁波的整个波谱是由伽玛射鸯II X射线、紫外线、可见光、红外线、微
波、光线电波组成。根据它们的波长由短(微米)到长(米、千米)是顺序
排列。
在电磁波的波{鲁中.波长从O.38_o.76微米的电磁波是大家熟悉
的可见光.在可见光的红光的外侧,波长从O.76微米到1000微米是
红外线 在整个红外线区。根据波长叉可分为三部分:从0.'76-2.5微米
段位避虹外区。从2.S。25微米为中缸外区,从25一1000微米段为为远
虹外区。
2.3.2红外线的特性红外线是介于可见光和微波之间的一种电
磁波.因此它具有喇邻I巨波的某些特性。在近红外区,它具有可见光的
特性.如l直线传播、发射、折射、散射、衙射和被某些物体吸收。以及可
以通过透镜将其聚焦等。
2.3.3红外通信原理红外通信是利用950rim近红外波段的红外
绒作为传遣信息的媒体。即通信信遵。发送端采用脉时调制(PPM)方
式。将二进制数字信号悯制成蕞一频率的脉冲序列,并驱动红外发射
管以光脉冲的形式发送出去l接收端将接收到的光脉转换成电信号,
再经过放大、滤波等处理后进给解调电路进行解调。还原为二进制数
字信号后输出。
简而盲之。红外通信的宴质就是对二进制数字信号进行调制与解
凋.以便利用虹外信道进行传输l红外通信接口就是针对红外信道的
{碍制僻调器。
3.麓件电蘑
3.1硬件电路的
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
3.1.1电源开关如果直接将电路的正负极接到直流电源,‘没有
一个总开关来控制电路的通电.这样不管是在调试或者应用的时候租
麻斌.而且也很不规范。所以应该在所做的系统上加一个总开关来控
制这个电路的工作。图2就是个电源开关电路,其中发光二极管的作
用.是判断电路是否出于工作状态。当开关按键SW-DPDT按下的时
候,二极管会发光,表明电路处于工作状态。
田2 电豫开关电路
3.1.2单片b'Lr作电路AT89C51单片机有4KB的Flash ROM
(闪存)作为内部程序存储器(ROM),因此.用这种芯片构成的最小应
用系统简单、可靠。
用AT89C51单片机构成最小应用系统时,只蒲将单片机接上时
钟电路和复位电路即可,
接口: 1、紧急告警
2、锁定(电梯置为不可用态)
3、解锁(清除电梯不可用态)
4、设置停泊楼层
5、取消停泊楼层(这两个模块由用户按钮调用)
6、取由当前位置到第N层的消耗
注意:1、如果电梯未收到任何请求且停泊楼层列表为空,设置内部状态为stop。此时运行方向为无。到达顶层或底层运行方向无条件为无。
2、停泊楼层是一个列表。这个列表只接受从当前层开始、沿当前运行方向可达的楼层。
到达停泊列表指定楼层后,删除列表中关于该层的所有
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
,熄灭对应楼层内部按钮灯光并向主控模块
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
“已达”状态。
3、接口6里面,如果电梯当前客满或被锁定,则返回最大消耗(常量,可设置为max
)。
接口
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
:
1、向所有受控电梯的接口6发送请求,取得它们到用户请求楼层的消耗
2、排序,向消耗最小的电梯发服务调度请求(设置停泊楼层)
说明:
1、所有消耗计算都需考虑电梯当前运行方向和用户请求电梯运行方向。除非电梯运行方向为无,否则只要两个方向不同,都按电梯沿当前方向运行到最高/最低层后、再返回当前层计算消耗。
2、调度请求通过目标电梯的设置停泊楼层接口实现。
3、按钮 接口:清除状态。(关灯,并允许接受用户操作。) 被按下时调用总控类的请求服务或电梯类的设置停泊楼层接口之一(由安装位置决定);请求被接受,则自动点亮。 点亮状态下,不再接受用户操作;直到clearsatus被调用。
只要把这三个模块放到一起,(再加个图形界面或整合到电梯控制芯片里)就可以实现所有功能。
电梯程序
#include
#include
#include
#include
#include
#include "egg.h"
#include "elevator.h" #define START 0//定义初始状态
#define UP 1//上行初始
#define DOWN 2//下行初始
#define PAUSE 3
#define N 100//记录数组的容量 void getInput(void);//
void getInput0(void);// void Status_trans(void);//显示当前的状态
void control(void);//控制主要的电梯过程
void control0(void);//在暂停后的控制
void time_count(void);
void Uper(void); //上行
void Downer(void); //下行 int Call[N]={0};
int Callup[10]={0}; //存放向上呼叫的整型数组
int Callin[10]={0}; //存放内部呼叫的整型数组
int Calldown[10]={0};//存放向下呼叫的整型数组
int time=0,state=0,prestate=0,flag=1,x=0;
int aimLayer=0,currentLayer=1;
float cl1=0.0,cl2=0.0;
main()
{
int service;
elevator(); system("color 3f");
printf("EVA 电梯竭诚为您服务,祝乘坐愉快\n");
printf("请选择服务策略(1为先来先服务,2为顺便服务):\n");
scanf("%d",&service);
if(service==1) {
DWORD ThreadID1 = 1;
HANDLE hRead1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput0,NULL,0,&ThreadID1);
}
else {
DWORD ThreadID2 = 1;
HANDLE hRead2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput,NULL,0,&ThreadID2);
}
while (1){
if(service==1)
control0();
else
control();
Status_trans(); /*确定电梯此刻的状态,包括运行方向、所在楼层等*/
}
system("pause");
return 0;
} void Status_trans(void)//yang
{
int i;
switch (state) {
case START:
if(aimLayer>currentLayer)
state=UP;
if(aimLayer==currentLayer)
state=PAUSE,prestate=START;
if(aimLayer==0)
state=START;
break;
case UP:
flag=1;
Uper();
currentLayer++;
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
printf("当前电梯楼层 %d\n", currentLayer);
if(currentLayer==aimLayer) {
state=PAUSE,x=1,prestate=UP;
printf("当前电梯楼层 %d\n", currentLayer);
}
if(currentLayeraimLayer)
state=DOWN,flag=-1;
break;
case DOWN:
flag=-1;
Downer();
currentLayer--;//?
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
printf("当前电梯楼层 %d\n", currentLayer);
if(currentLayer==aimLayer) {
state=PAUSE,x=1,prestate=DOWN;
printf("当前电梯楼层 %d\n", currentLayer);
}
if(currentLayeraimLayer)
state=DOWN,flag=-1;//flag?
break;
case PAUSE:
drawCurrentLayer1(currentLayer);
drawCurrentLayer2(currentLayer);
for(i=1;i<=4;i++)
WaitFor(100);
if(aimLayercurrentLayer)
state=UP;
if(aimLayer==0)
state=PAUSE,prestate=PAUSE;
break;
}
}
void control(void)
{
int i,mark=0,m=0;
if(flag==1) {
if(state==PAUSE && prestate!=PAUSE) {//上行中确定目标楼层
Callin[currentLayer]=Callup[currentLayer]=0;
for(i=currentLayer+1;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1 || Calldown[i]==1)
m=1;
if(m!=1)//无上行需求直接将下行此楼层处理
Calldown[currentLayer]=0;
}
for(i=currentLayer;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1) {
mark=i;
aimLayer=i;
break;
}//有上行需求 ,目标楼层被确定
if(mark==0)//无上行需求
for(i=9;i>=1;i--)
if(Calldown[i]==1 || Callin[i]==1) {
aimLayer=i;
mark=i;
break;
}//确定下行目标楼层
if(mark==0)
for(i=1;i<=8;i++)
if(Callup[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
aimLayer=0;
}//无目标楼层
else if(flag==-1) {
if(state==PAUSE && prestate!=PAUSE) {//电梯运行中
Calldown[currentLayer]=Callin[currentLayer]=0;//此层已处理过
for(i=currentLayer-1;i>=1;i--)
if(Callup[i]==1 || Callin[i]==1 || Calldown[i]==1)
m=1;
if(m!=1)
Callup[currentLayer]=0;//无目标楼层暂时停靠 m??
}
for(i=currentLayer-1;i>=1;i--)
if(Calldown[i]==1 || Callin[i]==1) {
mark=i;
aimLayer=i;
break;
}//确定下行目标楼层
//???为何要向上运行开始呢?
if(mark==0) //顺便无要求,开始新的一楼起的上升需求扫描
for(i=1;i<=9;i++)
if(Callup[i]==1 || Callin[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
for(i=9;i>=2;i--)
if(Calldown[i]==1) {
aimLayer=i;
mark=i;
break;
}
if(mark==0)
aimLayer=0;
}
} void control0(void)//yang
{
int i;
for(i=0;i<=N-1;i++) {
if(Call[i]!=0) {
aimLayer=Call[i];
if(state==PAUSE && prestate!=PAUSE)
Call[i]=0;
break;
}
}
}
void getInput(void)
{
char ch;
while(1){
ch=getchar();
switch(ch) {
case'I':
Callup[1]=1;
break;
case'U':
Callup[2]=1;
break;
case'Y':
Callup[3]=1;
break;
case'T':
Callup[4]=1;
break;
case'R':
Callup[5]=1;
break;
case'E':
Callup[6]=1;
break;
case'W':
Callup[7]=1;
break;
case'Q':
Callup[8]=1;
break;
case'K':
Calldown[2]=1;
break;
case'J':
Calldown[3]=1;
break;
case'H':
Calldown[4]=1;
break;
case'G':
Calldown[5]=1;
break;
case'F':
Calldown[6]=1;
break;
case'D':
Calldown[7]=1;
break;
case'S':
Calldown[8]=1;
break;
case'A':
Calldown[9]=1;
break; case '1':
Callin[1]=1;
break;
case '2':
Callin[2]=1;
break;
case '3':
Callin[3]=1;
break;
case '4':
Callin[4]=1;
break;
case '5':
Callin[5]=1;
break;
case '6':
Callin[6]=1;
break;
case '7':
Callin[7]=1;
break;
case '8':
Callin[8]=1;
break;
case '9':
Callin[9]=1;
break;
}
fflush(stdin);//使回车不被读取
}
} void getInput0(void)//yangnan
{
int i=0;
char ch;
while(1){
ch=getchar();
switch(ch) {
case'I':
Call[i]=1;
break;
case'U':
Call[i]=2;
break;
case'Y':
Call[i]=3;
break;
case'T':
Call[i]=4;
break;
case'R':
Call[i]=5;
break;
case'E':
Call[i]=6;
break;
case'W':
Call[i]=7;
break;
case'Q':
Call[i]=8;
break;
case'K':
Call[i]=2;
break;
case'J':
Call[i]=3;
break;
case'H':
Call[i]=4;
break;
case'G':
Call[i]=5;
break;
case'F':
Call[i]=6;
break;
case'D':
Call[i]=7;
break;
case'S':
Call[i]=8;
break;
case'A':
Call[i]=9;
break; case '1':
Call[i]=1;
break;
case '2':
Call[i]=2;
break;
case '3':
Call[i]=3;
break;
case '4':
Call[i]=4;
break;
case '5':
Call[i]=5;
break;
case '6':
Call[i]=6;
break;
case '7':
Call[i]=7;
break;
case '8':
Call[i]=8;
break;
case '9':
Call[i]=9;
break;
}
i++;
fflush(stdin);//使回车不被读取
}
}
void Uper(void)
{
int step;
for(step=1;step<=20;step++){
WaitFor(50);/*等待50毫秒*/
move(0.075);
}
}
void Downer(void)
{
int step;
for(step=1;step<=20;step++){
WaitFor(50);/*等待50毫秒*/
move(-0.075);
}
}
基于51单片机红外发射与接收程序
红外发射程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^3;
sbit key2=P3^4;
sbit key3=P3^5;
sbit LED=P1^0; //发射指示灯
sbit out=P3^7;
uchar i,a,num1;
void init()//初始化作用
{
key1=1;
key2=1;
key3=1;
}
void delay(uchar aa)
{
uchar bb,cc;
for(bb=aa;bb>0;bb--)
for(cc=200;cc>0;cc--);
}
void delayms(uchar aa)//延时程序
{
for(a=aa;a>0;a--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void khz(uchar aa)//是发射38KHZ的程序
{
for(a=aa;a>0;a--) //这个for语句可以得到准确的26.3波特率
{
out=0;
i=7;
//低了17us
while(i>0)i--;
// 38kHZ
out=1;
//高了9us 17+9=26us 比26.3快一点点
}
}
//khz(116);//3.028ms 精确的时间
//khz(64);//2.006ms
//khz(40); //1.052ms
//delayms(125);//2.012ms 这里是一些时间的介绍
//delayms(65);//1.054ms
//delayms(93);//1.5ms
void fashu(uchar num)
{
khz(116);//发射3ms 38khz
delayms(125);
for(num1=8;num1>0;num1--) //原来用的是a 后来出错,肯定在这里!
{
khz(40);
if(num&0x01)
delayms(93);//delay 1.5ms
else
delayms(65);//delay 1ms
num=num>>1;
}
khz(20);
}
void tishi()
{
LED=0;
delay(50);
LED=1;
delay(50);
LED=0;
delay(50);
LED=1;
}
void keyscan()//按键扫描
{
if(key1==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key1==0)
{
while(!key1);
fashu(0xf3);
tishi();
}
}
if(key2==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key2==0)
{
while(!key2);
fashu(0x3f);
tishi();
}
}
if(key3==0)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
if(key3==0)
{
while(!key3);
fashu(0xf5);
tishi();
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
}
红外接收程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit in=P3^2;
uchar i,a,num;
bit fleg;
void init()
{
fleg=1;
in=1;
EA=1;
EX0=1;
IT0=1;
}
void delayms(uchar aa)
{
for(i=aa;i>0;i--)
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void main()
{
init();
//delayms(45);//0.642ms
//delayms(35);//0.502ms
//delayms(115);//1.623ms
//delayms(72);//1.02ms
//delayms(84);//1.188ms
//delayms(31);//0.446ms
while(1);
}
void sieasdf() interrupt 0
{
EX0=0;
for(a=5;a>0;a--)
{
delayms(35);//延时0.5ms 判断5次 5*0.5=2.5ms
if(in)fleg=0;
}
if(fleg)
{
delayms(72);//延时1ms 判断是不是高电平了
if(in)
{
delayms(115);//延时让它超过2ms; 2.5+1+1.623=5.123ms 开始读数据
delayms(118);//若偏移一位,可以去掉。
for(a=8;a>0;a--)
{
while(!in);
delayms(86);//延时1.188ms 判断IO高低,从而得0或1
num=num>>1;
if(in)
{
num=num|0x80;
delayms(31);//延时0.6ms 因为上面延时1.2ms+0.6 刚好跳过1.5ms
}
}
P2=num;
}
}
fleg=1;
EX0=1;
}