开水房半自动供水接口设计.docx

上传人:b****3 文档编号:3551754 上传时间:2022-11-23 格式:DOCX 页数:12 大小:295.59KB
下载 相关 举报
开水房半自动供水接口设计.docx_第1页
第1页 / 共12页
开水房半自动供水接口设计.docx_第2页
第2页 / 共12页
开水房半自动供水接口设计.docx_第3页
第3页 / 共12页
开水房半自动供水接口设计.docx_第4页
第4页 / 共12页
开水房半自动供水接口设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

开水房半自动供水接口设计.docx

《开水房半自动供水接口设计.docx》由会员分享,可在线阅读,更多相关《开水房半自动供水接口设计.docx(12页珍藏版)》请在冰豆网上搜索。

开水房半自动供水接口设计.docx

开水房半自动供水接口设计

1、本次试验设计的需求分析

1、1需求:

本实验设计一个模拟开水房半自动供水系统,实现开水房供水半自动化。

由于开水房是个环境比较危险(容易发生烫伤事故),不太适合人类亲自工作的场所,所以实现开水房自动供水具有很高的现实意义。

1、2分析:

人机交互设计,温度检测设计,水位检测(锅炉的上界、下界)设计,控动烧水设计,交换锅炉设计。

2、系统介绍

1、1设计平台的基本介绍

以MicrosoftVisualC++6.0作为实验开发平台。

1、2开发系统功能和解决问题

本实验完成了对供水锅炉的实时监控:

锅炉水位的监控,锅炉水温的监控等,其中对水位的监控可以用连通器实现,而锅炉水温则可以通过传感器实现,本系统只做模拟,当系统获取这些监控数据时可以对其作出一定的反应,包括对锅炉水的注入、输出,控制锅炉的加热和取消加热等。

3、原理及设计

3、1硬件设计部分

硬件设计如下图所示:

本实验主要以8255A芯片为主,8255A采用基本I/O方式即0方式,输出锁存,输入有三态缓冲能力,为了驱动虚拟抽水机(步进电机)加入了74LS373驱动,其中PA口控制抽水机(步进电机)向锅炉抽水,PB口控制试验仪上的作为警报的灯,为了实现装置的实时监控,特意安排了三个硬件开关SW1、SW2、SW3,分别作为启动锅炉后,加水的同时可以控制停止加水,加热的同时控制停止加热,输出开水的同时可以停止输出,采用软件延时。

3、2软件设计部分

本次设计基于VC++开发平台运行的主界面如图1-1所示:

图1-1

图中有1号锅炉和2号备用锅炉,由于实验设备有限只演示一号锅炉,其中“启动”按钮主要是用来控制供水装置的通电情况及接口芯片的初始化工作,然后依次完成对锅炉“加水”“加热”“输出开水”等功能的设置,一方面通过底层接口控制模拟抽水机、加热开关、输出开水开关、报警显示灯,另一方面通过MFC界面将计算机已经实现的功能直观的反应到视图界面上,实现开水房供水的实时监控。

具体功能及主要代码演示如下。

单击一号锅炉下的“启动”按钮初始化系统后,提示一号锅炉启动!

会自动的完成8255A的初始化功能,运行界面如图1-2:

图1-2

“启动”按钮实现代码如下:

voidCMyDlg:

:

OnButton1()

{

AfxMessageBox("一号锅炉启动!

");

outportd(Port_io_Base+3,0x81);//初始化8255A命令口

outportd(Port_io_Base+2,0x00);//初始化8255A的PC口

}

若此时再按下“加水”按钮,会在硬件实验仪器上发现LED中第一号灯亮起,表示装置正在往锅炉加水,同时启动步进电机(抽水机),在试验仪上可以看到步进电机在转,如果锅炉的水位低于锅炉容积的%15,则发出警报声,而且灯也会一闪一闪提示锅炉水位低于安全水位;当水位超过锅炉的容积的%95时,一号灯灭,提示水满,同时水满警报响起。

如果期间紧急想停止往锅炉加水,按SW1硬件开关,再点停止加水按钮,“水柱”将停止不动,同时关闭74LS373,即完成停止步进电机(抽水机)的操作。

如图1-3所示:

图1-3

“加水”按钮实现代码如下:

voidCMyDlg:

:

OnButton5()

{

outportd(Port_io_Base+3,0x09);//置PC4=1关闭74LS373

outportd(Port_io_Base+3,0x08);//置PC4=0,打开74LS373

do{

outportd(Port_io_Base,xu[i]);//送相序代码到PA口,步进电机的转动代表抽水机向锅炉注水

i++;

if(i==8)i=0;

Sleep(50);//延时

m_pro1.SetPos(m_pro1.GetPos()+5);//可以设置加速加水,减速加水

if(inportd(Port_io_Base+2)&0x01!

=0)//检查sw1是否按下

{

m_pro1.SetPos(m_pro1.GetPos()+50);//可以设置加速加水,减速加水

sw1=true;

break;

}

Sleep(50);//延时

outportd(Port_io_Base+1,xu1[1]);//二极管xu1[1]灯亮,表示正在加水

if(m_pro1.GetPos()<150)

{

for(j=0;j<=5;j++)//缺水报警

{

outportd(Port_io_Base+3,0x0d);//令PC6=1,发高频音

Sleep

(1);//延时

outportd(Port_io_Base+3,0x0c);//令PC6=0,关闭SPK

Sleep

(1);//延时

outportd(Port_io_Base+1,xu1[1]);//二极管xu1[1]灯一亮一灭,表示缺水(少于锅炉水容量%15)

Sleep

(1);

outportd(Port_io_Base+1,xu1[1]&(0x0FD));//二极管xu1[1]灯一亮一灭,表示缺水(少于锅炉水容量%15)

}

}

}while(m_pro1.GetPos()<950);

outportd(Port_io_Base+3,0x09);//置PC4=1,关闭74LS373

if(sw1)

{}

else

{

outportd(Port_io_Base+1,xu1[1]&(0x0FD));//二极管xu1[1]灯灭,表示水满(多于或等于锅炉水容量%95),停止向锅炉注水

outportd(Port_io_Base+3,0x0c);//关闭SPK

for(j=0;j<=5;j++)//水满报警

{

outportd(Port_io_Base+3,0x0d);//令PC6=1,发高频音

Sleep

(1);//延时

outportd(Port_io_Base+3,0x0c);//令PC6=0,关闭SPK

Sleep

(1);//延时

}

outportd(Port_io_Base+3,0x0c);//关闭SPK

AfxMessageBox("水满已经满了,请停止向锅炉注水!

");

}

}

当点击加热按钮时,锅炉加热启动,试验仪上LED显示第二号灯亮,当加热一定时间后,“温度计”上显示水温超过100摄氏度时,提示水已经烧开,可以用了,同时试验仪上二号灯灭。

当然如果加热的同时不想再继续加热了,则可以按下硬件开关SW2,再点击停止加热就可以了。

如图1-4所示:

图1-4

“加热”按钮实现代码如下:

voidCMyDlg:

:

OnButton7()

{

if(m_pro3.GetPos()>100)

{

outportd(Port_io_Base+1,xu1[0]&(0x0FE));//二极管xu1[0]灯灭表示加热完成

AfxMessageBox("锅炉水已经开了!

");

}

else

{

outportd(Port_io_Base+1,xu1[0]);//二极管xu1[0]灯亮表示正在加热

outportd(Port_io_Base+3,0x0c);//关闭SPK

do{

Sleep(100);//加速加热,减速加热

m_pro3.SetPos(m_pro3.GetPos()+1);

//if(GetKeyState(VK_CONTROL)<0)//control建

if(inportd(Port_io_Base+2)&0x02!

=0)//检查sw2是否按下

{

sw2=true;

break;

}

if(m_pro3.GetPos()>100)

{

for(j=0;j<=5;j++)//水开报警

{

outportd(Port_io_Base+3,0x0d);//令PC6=1,发高频音

Sleep

(1);//延时

outportd(Port_io_Base+3,0x0c);//令PC6=0,关闭SPK

Sleep

(1);//延时

}

break;

}

}while

(1);

if(sw2)

{}

else

{

AfxMessageBox("锅炉水已经开了!

");

outportd(Port_io_Base+1,xu1[0]&(0xFE));//二极管xu1[0]灯灭表示加热完成

outportd(Port_io_Base+3,0x0c);//关闭SPK

}

}

}

若此时点击输出开水按钮,第三号灯亮,以看到锅炉水位下降,表示有人在打开水,开水输出完之后,弹出提示,同时使温度计归零,第三号灯灭,期间,如果需要强制关闭输出,可以按下硬件开关SW3,再按关闭输出按钮。

如图1-5示:

图1-5

“输出开水”按钮实现代码如下:

voidCMyDlg:

:

OnButton9()

{

outportd(Port_io_Base+1,xu1[2]);//二极管xu1[2]灯亮输出开水

outportd(Port_io_Base+3,0x09);//置PC4=1关闭74LS373

outportd(Port_io_Base+3,0x08);//置PC4=0,打开74LS373

do{outportd(Port_io_Base,xu[i]);//送相序代码到PA口,步进电机的转动代表抽水机向锅炉注水

i++;

if(i==8)i=0;

Sleep(50);//延时

m_pro1.SetPos(m_pro1.GetPos()-5);//输出开水

if(GetKeyState(VK_MENU)<0)//control建

if(inportd(Port_io_Base+2)&0x04!

=0)//检查sw3是否按下

{sw3=true;

break;

}

}while(m_pro1.GetPos()>0);

outportd(Port_io_Base+3,0x09);//置PC4=1,关闭74LS373

if(sw3){}{}

else

{

outportd(Port_io_Base+1,xu1[2]&(0x0FB));//二极管xu1[2]灯灭,开水已经输完

outportd(Port_io_Base+3,0x0c);//关闭SPK

//CMyDlg:

:

OnButton8();

for(j=0;j<=5;j++)//水满报警

{

outportd(Port_io_Base+3,0x0d);//令PC6=1,发高频音

Sleep

(1);//延时

outportd(Port_io_Base+3,0x0c);//令PC6=0,关闭SPK

Sleep

(1);//延时

}

outportd(Port_io_Base+3,0x0c);//关闭SPK

AfxMessageBox("开水已经输完!

");

m_pro3.SetPos(0);

}

}

若按下退出按钮,则系统退出。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1