基于VC++的现场总线控制系统在水处理系统中的应用
扫描二维码
随时随地手机看文章
1 引言
随着火力发电厂单机容量的不断增大,系统越来越复杂性,出于机组安全性和使用寿命的考虑,对水汽品质的要求越来越严。实现化学水处理设备的自动化,是当今电厂化学水处理技术发展的必然趋势,其安全性及可靠性更是至关重要。
受汉新发电有限公司的委托,本课题组对该公司原有水处理系统进行改造,开发出基于can总线的化水监控系统,将现场总线技术应用于水处理监控系统,全面提高了该系统的自动化程度,使其更有效更可靠更安全的运行。此计算机监控系统将控制功能彻底下放到现场,降低了安装成本和维修费用。上位机、下位机与现场之间达到同步控制,实现有效可靠的远距离监控及操作,节约人力资源,提高劳动效率,实现效益最大化。
2 化学水处理程控系统的硬件组成
系统的硬件构成整个系统由一台上位机和两台下位机构成两级集散控制系统。在系统机内安装一块pc can总线板构成上位机,该卡通过can总线与下位机进行通信。下位机采用std总线驱动方式,由cpu主板、32路光电隔离输入板、32路光电隔离输出板、16路12位a/d数据采集卡、4路12位d/a转换卡构成。
现场的数据采集、预处理、过程控制及向上位机传送数据等任务由下位机完成,上位机负责全系统的控制、管理和信息综合。
3 化学水处理程控系统的软件实现
系统上位机软件开发平台选用vc++6.0。整个系统软件设计采用模块化结构,该方案配置体现了分散控制系统的优点—即控制功能分散、操作管理集中。控制功能分散意味着系统实时响应快和系统危险分散,操作管理集中便于集中管理,方案配置还具有冗余特性。
3.1 上位机监控程序设计
本监控系统是以微软公司的windows98/nt/2000为工作平台基于vc++6.0开发出来的。操作人员可向下位机发出各种控制命令,同时将生产过程中各种信息数据采集过来,反映在屏幕上的各种画面中,使操作人员一目了然。整个系统软件的设计分为人机界面的设计、数据库的建立、实时监控部分、上下位机通信、历史数据查询打印以及报警项目等六部分。
(1) 人机界面的设计
本系统提供了精美的显示屏幕、汉字菜单、加速键、按钮等标准的窗口界面对象,对一些重要参数的输入提供了汉字提示的填表式输入对话框,这样就减少了输入错误。
(2) 数据库的建立
本系统采用access数据库,所以在建立数据库应用程序之前,首先要使用odbc登录一个确定的数据库文件。登录以后就可以在程序中对数据库进行读写操作。
(3) 实时监视工艺流程
将整个工艺流程在监控画面上反映出来,该画面以虚拟仪表的方式实时显示现场的信息,具有直观、动态、实时的效果。在画面中,我们通过不同的颜色表明设备的各个状态,画面流程随工况的不同而动态变化,使人一目了然。画面上标有系统所有控件,在有模拟量输入的控件(如阴床电导值、定时器所余时间)旁显示即时值,供用户监控。还可对现场仪表进行参数设置。在运行过程中发生异常情况时,操作员可直接在上位机按下急停按钮,设备立即停止运行;操作员也可以在现场直接手动操作。
(4) 通信软件的设计
可靠的通信是集散控制系统的命脉。为符合软件开发的模块化、结构化以及系统通信的实时性要求,利用windows的动态链接库技术开发了上、下位机间的通信软件。为提高通信的可靠性,防止数据丢失,在上、下位机之间开始数据传送前,均采用握手信号设置。上位机发送特征字符,下位机检测、接受并回送同一字符,并由上位机进行检测,只有在应答信号正确时才开始数据传送,其流程图如图1所示。
图1 上、下位机数据通讯流程图
软件编制如下:
do{//查询can总线状态(1为空闲,0为忙)
ret=can_inquiry_trans( );}
while(ret==0);
ret=can_ptrans((byte)address,sznumber,(lp -byte)szdata);//发送特征字符
if(ret==0)
{messagebox(“数据下装错误!”,“数据下装”,mb_ok|mb_iconstop);
return;}
do{//查询有无下位机返回的数据(1为有数据,0为无
//数据)
ret=can _inquiry_rece( );}
while(ret==0);//如果有下位机返回的数据,接收数据
ret=can_rece((lpbyte)&m_dtype,( lpbyte)&m_address,( lpbyte)&m_data);
if((ret==0fxx00)||(ret==0fxxff))
{ messagebox (“无数据包收到或数据包错误”,“接收错误”mb_ok|mb_iconstop);
return; }
for(i=0;i<4;i++) //数据包接收正确,处理接收的数据
db[250+i]=m_data[i]; //判断回送的特征字符是否
//与无发送的特征字符相同
if(!(m_data[0]==0x61h&&m_data[1]==0x61h&&m_data[2]==m_ptime&& m_data[3]==m_ptemp))
{ messagebox(“下位机回送特征字符错误!”,“特征字符下装”, mb_ok);
return; }
messagebox (“下位机回送特征字符正确!”,“在线参数下装”, mb_ok);