您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页锅炉监控系统的设计研究

锅炉监控系统的设计研究

来源:好走旅游网
江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

锅炉监控系统的开发研究

The Research & Develop of The Boiler Control

system

林德树 杨师宣

(江汉石油学院计算机科学系 湖北荆州 434023)

1引言

锅炉微计算机控制,是近年来开发的一项新技术,它是微型计算机软、硬件、自动控制、锅炉节能等几项技术紧密结合的产物,我国现有中、小型锅炉30多万台,每年耗煤量占我国原煤产量的1/3,目前大多数工业锅炉仍处于能耗高、浪费大、环境污染等严重的生产状态。提高热效率,降低耗煤量,用微机进行控制是一件具有深远意义的工作。锅炉微机控制系统,一般由以下几部分组成,即由锅炉本体、一次仪表、微机、手/自动切换操作、执行机构及阀、滑差电机等部分组成,一次仪表将锅炉的温度、压力、流量、氧量、转速等量转换成电压、电流等送入微机,手自动切换操作部分,手动时由操作人员手动控制,用操作器控制滑差电机及阀等,自动时对微机发出控制信号经执行部分进行自动操作。微机对整个锅炉的运行进行监测、报警、控制以保证锅炉正常、可靠地运行,除此以外为保证锅炉运行的安全,在进行微机系统设计时,对锅炉水位、锅炉汽包压力等重要参数应设置常规仪表及报警装置,以保证水位和汽包压力有双重甚至三重报警装置,这是必不可少的,以免锅炉发生重大事故。

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

2锅炉监控系统概述

2.1锅炉监控系统的设计原则和步骤

锅炉监控系统就是利用计算机来实现锅炉生产过程自动控制的系统。它的组成从大的方面来讲包括两个部分,即控制计算机和锅炉产设备。其组成框图如图1所示。

图1锅炉监控系统组成框图

锅炉监控系统要锅炉生产过程中的控制,根据厂家对生产式艺的要求,可实现不同的功能,这些功能都是通过设计不同的计算机控制软件系统进行的。其特点是,控制功能通过内部的控制程序来实现,人们只要改变这些程序,就可以更改对锅炉的控制功能,以适应新的控制要求而不需要改动硬件系统。这种灵活性在硬件逻辑系统中是没有的。因此,掌握计算机应用系统的设计和研制技术,是开发微型计算机应用的一个重要课题。

锅炉监控系统的设计原则是,根据用户提出 的任务要求,考虑到系统 的性能,可靠性、效率、可维护性以及应用微型计算机前后要经济上带来的效果进行综合考虑的基础上,能最少的投资,使设计的系统能完成锅炉生产过程工艺参数控制要规定的范围内,实现控制任务的要求。

锅炉监控系统的设计,满足调节任务的要求是首要的。例如,维持锅炉汽

外 部 主机 外围 锅炉生产江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

缸内的压力稳定。这是燃烧过程自动调节的首要任务。汽压变化,就表示锅炉 的燃烧发热量与实际负荷不相适应。因此,必须改变燃料量的供给,以供应 所需的发热量。另外,保证汽压要一定范围内变化,也是保证锅炉与各个负荷设备正常工作的民必要条件。炉堂内负压变化,反映了引风量与送风量的不适应,锅炉的这些调节任务是互相关联的。总的要求是,在负荷稳定时,应使燃料量送风量各引风量的各自变化保持不变,才能及时也补偿系统内部的扰动(如燃料质量的变化等)。而在负荷变动时(即有个扰作用时),则应使这三个量成比例改变,既要适应负荷的要求,以要使被调量保持要允许的范围内。

锅炉监控系统的设计大致可分为以下几个步骤:

1、 任务:在进行控制系统设计之前,必须对锅炉生产过程的工作情况进行深入的调查和分析,根据实际应用中提出来的具体要求,确定整个系统所要完成的任务。为要完成这些任务,计算机必须具备哪些功能,需要多少输入输出通道,使用什么样的外围设备等等,并画出系统框图。这一步主要集中在微型计算机需要完成的各功能和需要满足的定时关系。可用时间和控制流程图来描述这些工作过程。设计任务确定这后,写成设计任务说明书,作为整个监控系统设计的依据。

2、 预算和选择:设计任务确定之后,首先应对系统所需要的硬件作出初步估计和选择,这是计算机监控系统设计的一个特点。因为构成计算机控制系统的主要功能部件都是已经设计好的大规模集成电路,所以,设计人员只须要根据应用要求来估计和选择系统所需要的功能部件,而且可以选择不同的硬件方案进行比较。

在估计和选择微处理器时,需要从以下几个方面来考虑是否符合控制系统的要求:

(1) 字长(或称数据总线的线数):字长的长短会直接影响数据的精度、指

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

令的数目、寻址的能力和执行操作的时间。一般而言,字长越长,对数据处理有利,所以希望字长长一点好。但从减少辅助电路的复杂性和降低成本的角度来考虑,则字长短一点为宜。因此,应针对不同应用对象选择适当的字长。目前,不同字长微处理器的成本、特点和应用范围可见表1。

表1微处理器性能表 字长 成本 特点 4 位 低 适宜于10进制运算,指令功能差,速度慢 8位 中 适于字符、数据处理、双倍字长精度运算时速度要降低 具有多种指令,功能强,速度快 应用范围 适于计算精度低,对处理时间要求不高的地方,如计算器、简单控制器等 计算机外围设备,终端设备控制、测量、监视仪器,数据处理、要求不高的过程控制 与一般小型计算机用途相同,可用于过程控制,数值计算 16位 高

(2)寻址范围和寻址方式:微处理器的地址长度,反映了该处理器可寻址的范围,它表示系统中可存放的程序和数据量。例如,8位标准微处理器,其地址长度为16位,可寻址的范围为64K.设计人员应根据控制对象确定合理的容量。一般微处理器都有几种寻址的方式,如直接、间接、相对、变址寻址等。选择恰当 的寻址方式,便会使程序量大为减少。 (3) 指令的种类和数量:一般来说,指令的条数愈多,针对特定操作的指令也必然增多,因此,会使程序量少,处理速度加快。它对整个控制系统有第大的影响,要慎重选择。字长 比较短的微处理器,如4 位微处理器,指令条数也就少,但也有采用专用指令提高速度的,不过那样会限制应用范围,因此要视情况而定。

(4) 执行速度(周期时间):执行速度的选择也要区别不同的对象而定,例

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

如,要锅炉生产过程的控制 中,对实时的计算生产过程控制,应选择速度高的微处理器,而对生产过程监控设备来说,即采用速度较慢的微处理器,其周期也够用,因为它对计算速度的要求不高。 (5)数据采集和传输需要多少输入输出道。 (6)是所有的输入输出通道都处理相等的数据流量。 (7)是否所有的输入输出通道是串行操作还是并行操作。 (8)输入输出通道是随机选择,还是按某种预定的顺序工作。 (9) 输入输出的字长为多少位。

选择除了要考虑到上述五个方面外,还有中断能力、DMA能力,以及与微处理器的LSI 外围电路是否配套,也是设计人员选用时应该考虑的问题。

锅炉监控系统的硬件要求是选择微型计算机系统的重要因素。因此可

以根据硬件要求去选择计算机。在估计和选择硬件系统的同时,要综合考虑软件系统的设计。一个系统,减少了硬件,软件的研制费用就要提高,如果使用了 的硬件,便可显著降低软件条件。为了要硬件和软件之间作出权衡取舍,很重要的一点是分析一下典型的I/O操作和画出执行这种操作过程的流程图。然后,就可以为候选的微型计算机编个程序,这种用来对不同的系统进行比较的程序称为基准程序。

基准程序大约由100--200条指令组成。在比较微型计算机指令系统的能力很有用。用它不仅可以了解微型计算机的速度而且可以了解微型计算机的一些其它特性,以便判断自己的选择是否恰当。为了便于比较, 要编制该程序所选择的问题,应该和实际应用中的问题相似。基准程序至少包含一部分执行输入输出的程序,以便判断它要这方面所应有的能力。

3设计:在设计阶段,设计人员必须认真考虑和反复权衡硬件和软件的比例问题。因为硬件和软件有互换性。用硬件完成的功能也可以用软件 来完成。多用硬件可以简化设计工作并使系统的性能得到改善。然而,这样

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

会增加硬件元件数,介系统的速度相应降低。所以,每当设计一个新的控制系统时,必须要硬件和软件之间取一个折衷方案。计算机控件系统的硬件和软件的设计必须同时进行,两者相辅相成,硬件设计主要是解决接口问题和设计为完成输入输出功能所必须的硬件。接口设计对软件设计有一定影响,特别是当接口与常的不同时,设计就会更复杂。当硬件 设计是一个标准的微型计算机系统时,它的设计通常都比较简单。这时对设计人员来说,主要是软件设计,微型计算机应用系统的特性,在很大的程度上取决于微型计算机应用系统的软件,对一个有经验的设计人员来说,交不会再变动硬件,以后有什么改进和变更,将由新的软件功能来完成。

4.系统的调试和测试:微型计算机系统装配好以后,必须对系统进行调试。调试就是将软件程序输入到样机系统,进行识别和排除系统中硬件和软件两方面的故障,使系统能正常运行。通过调试排除故障,必须进一步对设计所要求的全部功能进行测试和评价。这要制定一个测试计划和拟定一些测试方法通过对每一项功能达不到要求时,则应修改程序。在修改时必须注意, 如果一条单字节指令要由一条多字节来代替,或者一条多字节指令要由一条单字节指令来代替时必须同时对地址作出相应的修改。最后,将调试好的应用程序写入EPROM中。

2.2锅炉正常工况下的监控

锅炉生产过程正常工况下需要监视和控制的项目很多,主要有: (1)运行参数的监视:计算机按照锅炉生产过程的运行参数(温度、压力、流量、液位、氧量)的重要程度分成等级,按周期进行检查和监视,如发现异常立即显示、报警。计算机把检查结果通过显示向运行人员报告。 (2)制表:计算机通过打印机每天打印必要的生产参数,代替运行人员的抄表,以供运行分析和指导用。

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

(3)工况计算和最佳控制:计算机要通过一定的数学模型对锅炉生产过程的运行工况进行计算和调节。从而使锅炉生产维持在安全和以济的最佳工况下运行。

(4)运行人员可通过控制台调整锅炉生产的负荷。

2.3锅炉的点火启动和停炉

锅炉监控系统能完成启停过程中的绝大部分操作各调整。运行人员只要发出一个“启动”命令,锅炉就从自动点火开始,以滑参数的方式启动,直到达到额定负荷为止。同样,锅炉正常运行如要它停下来,则也需要发出一个“停止”命令,那么锅炉就可以以滑参数的方式逐步降温降压减负荷,直到全部停止。要锅炉启停的过程中,运行人员亦可能过控制台直接干预锅工作。

2.4事故分析与处理

锅炉要运行过程中,偶然出现了事故情况,例如锅炉水位因某种原因而超过了限值,生产过程将通过中断讯号装置,自动地向计算机发出中断响应后就暂停原来的执行程序,调整有关的参数各设备,对徨产过程进行紧急处理,使其恢复正常。事故处理完毕以后,现返回继续执行原来的程序。如果通过处理无法使事故消除。则应紧急停炉。

2.5锅炉监控系统逻辑框图

锅炉生产过程中监控系统的逻辑框图如图2所示。随时间连续变化的模拟信号(被调参数),如电压,电流以及非电量的温度,湿度,压力、流量等,通过 传感器、变送器,变成统一的直流电压信号,作为微型计算机的输入信号,采样器按顺序以一定的速度把该信号传送给放大器,被放大后的信号 再通过模/数转换器转换成一定规律的二进位数字代码,经输入通道送到计算机中,微型计算机按预先存储器中的程序,对被测量值进行一系列的运算处理,从

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

而得到阀门位置或其它执行机构位置的控制量,再由计算机输出二进制的代码,经数/模转换器后,将数字量转换成模拟量电压或电流信号,通过多路开关送至执行机构,带动阀门或其它调节机构的动作,达到控制被调参数的目的。

打印 显示 报警 操作 D A 主控计算机 /A /D

时间控制器 采样器 多路开关

变 变 变 送 送 送

器 器 器

执行 锅炉

机构 执行 机构 图2锅炉监控系统逻辑框图

手/自动 3系统实现

3.1采用GAL的I/O地址译码电路

GAL 是美国LATTICE公司80年代提出的可编程逻辑器件PLD,它具有如下特点(1)实现多各逻辑功能,它可以实现组合逻辑电路和时序逻辑电路的多种功能。(2)采用电擦除工艺,门阵列的每个单元可以反复改写。(3)具有硬

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

件加密单元,可以防止抄袭电路设计和非法复制。GAL连接如图3。

PC/AT 扩 245 A9 19 G 展 A8 18 DIR 槽 A7 A6

IOW

IOR

GAL16V8 AEN

MEMR

MEMW

A19 A18 A17

A16

图3 GAL电路连接图

3.2模拟量的数据采集及处理

3.2.1传感器和变送器概述

锅炉监控系统的信息传递过程为,先由传感器获得锅炉生产过程的各种参量,经过输入接口送给计算机,微型计算机运算后,再经过输出接口送给执行器,对锅炉生产过程进行控制(调节)。传感器是要特定的条件下,将感受的输入物理量或其它按一定的规律变换为便于指示或控制的另一种物理量

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

(一般为电量)的测量装置。当传感器输出标准信号(如10~50mA或4~20mA)称变送器。

在锅炉生产过程中,为了提高经济效益,对运行参数进行监视和控制,首选要利用微型计算机对锅炉生产过程中连续变化的参数进行采集,采集之后要进行处理计算,以此进行工况分析。

模拟量输入:模拟量是锅炉生产过程中连续变化的参量,如温度、压力、流量、电流、电压、功率等。所谓连续包含两方面的意义:一是从时间上讲它是连续变化的;二是指它 数值上是连续的,即可以在一定范围内连续取值。用传感器测得这些模拟量经变送器转换成模拟电信号,再通过计算机外围设备中的模拟量输入部件,逐个地把它们变为二进制的电信号,然后送进计算机。

模拟量输入部件主要由模数转换器(A/D)、变送器、采样器、译码电路组成。模拟电信号一般为0-50mV的直流电压,经数据放大器放大到0-5V的直流电压,再送入模数转换器反它变成二进制电信号。控制器操纵采集器和模数转换器,使它们有节奏地正常工作。采样的过程如图所示,我们可以将它抽象为一个采样开关,采样开关每隔T秒暂闭一次,只有在采样瞬间T,2T,3T...... 才允许输入信号X(t)通过采样开关,其他时间输出等于零。故通过采样开关后的输出X(nT)是一系列窄脉冲。由于开关闭合时间很短,可以认为输出函数X(nT)是输入函数X(t)在1T,2T,3T„nT处所对应的瞬时值。其中T为采样间隔,或称采样周期。采样过各可以是恒速采样,即等时间间隔,也可以是高速采样。在两个相邻的采样间隔内要丢失一些信息,采样间隔越大(即采样周期越大)丢失的信息越多。或者说采样频率越低,丢失的信息越我们必须通过数学推导,选取合适的采样频率。

采样开关的输入输出关系式可表示为: X(nT)=P(t).X(t)

10

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

式中 X(t)模拟输入信号

P(t)控制开关的单位脉冲函数 X(nT)采样后输出的离散信号 3.2.2模数转换器(A/D)概述

利用计算机对锅炉生产过程中测得的模拟信号进行处理,必须将模拟信号转换成数字信号,这一过程称为模数转换。模拟信号量具有非常广泛的范围,它不仅有各种电量,而且包括各种非电量。如前所述,通过变送器后,这些模拟量一般都可以转换为电流或电压信号,而且电流也可以转换成电压来测量。因此,研究模拟电压向数字量的转转换具有重要意义。

根据A/D转换器的工作原理可以分为双积分式、计数式、逐次此较式和并行式四种。A/D转换器的速度由转换时间决定,即A/D开始转换到有效数据给出所需的时间。

一般来说,A/D转换器的连接如图4

图4 A/D转换器的连接

综合考虑字长、指令数、转换时间以及实验室现有条件等因素,这里选用ADC0809。ADC0809为一个带8路模拟输入的8位逐次比较的A/D转换器。在电路内,有三态输出锁器。其转换时间为100us它是一个28线的双列直插式器件其逻辑符号如下: 它的引线如下: DB0--DB7 8位数据线

11

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

START 开始转换信号,采用正脉冲信号,上升沿清内部寄存器,下降沿启动A/D转换器

EOC 转换结束信号,当A/D开始转换时为低,当转换结束,数据进入锁存器后变为高电平

ENABLE 输出 允许,高电平有效

ADD-A,ADD-B,ADD-C 模拟通道地址线,用以选择模拟通道。工ADD-A为低位

ALE 模拟通道地址锁存信号 CLOCK 时钟输入,典型值为640KHz IN0-IN7 八条模拟信号输入线 Ref(+),Ref(-) 基准电压输入 Vcc GND 电源端,接地端

上述为ADC0809接口电路,也是FD-SJ86/88实验系统上的ADC0809的连线图。图中基准电压采用5.0V,模拟通道的地址总线中的低3位。ALE及START信号由地址选中及写信号提供,要产生地址信号时,地址总线的低3位A0,A1,A2不参加译码,要编程时,这低3位的地址将代表所选中的模拟通道号。

这里地址选中信号的基地址为310H,为选 中0号模拟通道,可向310H口输出一个任意数。此时,由于地址的低3位为000,因此选 的通道号为0。如果选择1号模拟通道,可向311H口输出任一个数。此时,由于地址的低3位为001,因此选 中的通道号为1,同样的,分别向312~317H输出一个任意数可选择2-7号模拟通道。

在具体编程中,只先编好inportb(unsigned int port)函数即可, 首先启动ADC0809 outportb(port,0),利用inportb(0x310)即可读取ADC0809的通道号为1传来的数据。其它通道只改变读取地址的就可实现。

12

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

3.3控制硬件部分(8255)

采用8255控件电磁阀,实现对锅炉生产过程的控制。8255是一个通用可编程并行接口电路。它具有A,B,三个8位并行口。其中C口也可用作A,B口的联络信号及中断申请信号。通过编程,它可以被设置为基本输入输出、选通输入输出以及双向传送方式。对于C口还具有按位置0,置1的功能。 8255为40线的双列直插式器件,如图所示。 8255与CPU之间的连线有: D0~D7 8位数据线 __ ___

RD,WR 读写信号

RESET 复位信号,高电平有效

___

CS 片选信号 A0,A1 地址信号

根据片选端及A0,A1两条地址信号线,可产生四个端口地址,这四个端口的含义如表2。8255的编程通过向控制口寄存器写入方式控制字来进行。根据此控制 字,8255可高定为基本输入输出方式、选通输入输出方式和双向传送方式。

表2 8255的地址选取

A1 A0 端口寄存器 0 0 A口寄存器 0 1 B口寄存器 1 0 C口寄存器 1 1 控制寄存器 8255的方式控制字其格式如表3 表3 8255的方式控制字

数据位 功能 说明 13

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

D7 D6 D5 设定工作方式 方式选择 D4 D3 D2 D1 D0 A口 C口高四位 方式选择 B口 C口低四位

1有效 0 0方式0 0 1方式1 1 0方式2 1 1方式3 1输入 0输出 0 方式0 1 方式1 1输入 0输出 1输入 0输出 在这里采用方式0,B口输出。因此取控制字90H。利用8255控制小灯的亮与灭,来仿真对电磁阀的控制。8255的地址是308H,B口的地址为309H,控制口地址为30BH。

利用8255可以控件8个指示灯,对指示灯的控制也就是对8255的B口写想应的数据。这个数据必须是一个全局变量,而且每次只能用改变其中的一位或几位。这就需要利用C++ Builder中的位运算。以下是几个具体操作的实例:

//向8255的控制口写控制字90H outportb(port8255+3,0x90);

//置第5位为0,即点亮第5位所控制的指示灯 lamp=lamp & (~32); //向8255的B口写入lamp outportb(port8255+1,lamp);

如果是控制某几位,则只需将与、或特定的数据即可。

3.4读取硬件

14

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

C++ Builder不再支持如inportb()、outportb()一类I/O端口读写函数了。准确地说,在Windows环境下,Borland C++仅支持16位应用程序的端口操作,对32位应用程序的端口操作不再支持,而C++ Builder开发出来的程序是32位的。因为PC机中,I/O地址空间与内存地址空间从来都是各自独立的。看看Delphi,就通过Port数组实现了对I/O端口的访问了! 而C++ Builder就没有提供类似的机制。下面这几个函数是笔者从网上下载来的,它借助__emit__( )命令,直接在程序中插入了机器指令码,其等价的汇编指令请参见注释。经过验证,这几个函数在Windows95/98环境下,的确可实现对I/O端口的读写。

void outportb(unsigned short int port, unsigned char value) {

__emit__(0x8b, 0x95, &port); // mov edx, *(&port); __emit__(0x8a, 0x85, &value); // mov al, *(&value); __emit__(0x66, 0xee); // out dx, al; }

void outportw(unsigned short int port, unsigned short int value) {

__emit__(0x8b, 0x95, &port); // mov edx, *(&port); __emit__(0x66, 0x8b, 0x85, &value); // mov ax, *(&value); __emit__(0xef); // out dx, ax; }

unsigned char inportb(unsigned short int port) {

unsigned char value;

__emit__(0x8b, 0x95, &port); // mov edx, *(&port);

15

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

__emit__(0x66, 0xec); // in al, dx;

__emit__(0x88, 0x85, &value); // mov *(&value), al; return value; }

unsigned short int inportw(unsigned short int port) {

unsigned short int value;

__emit__(0x8b, 0x95, &port); // mov edx, *(&port); __emit__(0xed); // in ax, dx

__emit__(0x66, 0x89, 0x85, &value); // mov *(&value), ax return value; }

3.5软件模块划分及流程控制

锅炉监控系统主要有三大模块,即数据输入、数据输出、数据处理。数据

输入主要是锅炉运行的模拟信号转换成数据信号输入到主控计算机中。数据输出包括报表打印、数据表实时显示,控制信号的输出。数据处理是将读入的数据写入数据表、将模数转换的数据处理成可以显示的数据。程序流程图如图5。

点程序灯 待检参数与上、下限比较 越上限处理 是否越上限 否 是 16

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

越下限处理 是否越下限 否 越限 上次是否越限 上次是否该数 否 是 清除报警 声音、屏显报警 否 是否全部检查完 是 灭程序灯 操作 执行报警形成解除 报警信息 程序退出 图5 程序流程图

3.6显示及控制界面

在要进行软件编程时采用INTERPRISE公司的C++ BUILDER 5.0做为开发平台,以C++ BUILDER 是一个优秀的独立的开发系统,与它的工具相比,具有如下特点:

(1)C++ BUILDER 是一个可视化的快速应用程序开发工具,具有高效、最优化的源代码编译器,可视化的快速应用程序开发环境和可扩展的数据库技术,适合各种类的可视化程序开发。

(2)因为它使用的程序语言C++,所以是一个面向对象的语言,具有灵活、自由、简洁、高效的特点,由于WINDOWS自身是用C语言编写,所以C++可直接调用WINDOSWS API ,另外,还增强了异常状况的处理能力以及类的封装能力和特性。

(3)C++ BUILDER 具有完整的基于组件设计与可视化的开发环境,提供了所有可视组件对象的完整代码,可以让程序设计人员很快产生程序原型及用户

17

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

界面,实现代码的重用。

(4)拥有独立,高效的编译技术,执行文件EXE或DLL都与WINDOWS 95 的操作环境无关,支持多语言开发代码,对于POWERBUILDER、Visual Basic、Borland C++、Visual C++ 和Delphi代码都可重新编译利用。 (5)有强大 的数据库支持能力,提供了存取dBASE或FoxPro数据库的能力。提供了Client/Server 支持,可以轻松自如地开发客户/服务器程序。 实时显模拟表的设计,在这个监控系统中采用了以仿真表的形式将各种参数的信息动态地显视给用户。实时表如图所示: 这表方要分成以下几部分:盘心、刻度线、刻度值、指针。 整个表放置在一个Image组件上 (1)其中的盘心是半个椭圆

Image1->Canvas->Pen->Mode = pmCopy; Image1->Canvas->Pen->Style = psSolid; Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->Pen->Width = 1; Image1->Canvas->Pen->Mode = pmCopy; Image1->Canvas->Pen->Style = psSolid; Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->Pen->Width = 1;

Image1->Canvas->Rectangle(2,2,Image1->Width-2,Image1->Height-2)

//矩形

Image1->Canvas->Arc(20,25,130,135,130,80,20,80); //圆弧 Image1->Canvas->Pie(50,64,100,96,100,80,50,80); //中心 (2)画刻度线

刻度线的画法是利用同一角度不同半径的两个圆上的两点连线构成一个

18

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

刻线,利用角度 的循环来实现画半个圆的刻线。这其中有一个角度到坐标的转换

x=(int) 60*cos(3.14/12*i); y=(int) 60*sin(3.14/12*i);

// 画表盘及其刻度 for(i=0;i<=12;i++) {

x=(int) 60*cos(3.14/12*i); y=(int) 60*sin(3.14/12*i);

Image1->Canvas->MoveTo(75-x, 80-y ); x=(int) 50*cos(3.14/12*i); y=(int) 50*sin(3.14/12*i);

Image1->Canvas->LineTo(75-x, 80-y); } (3) 表盘显示 //表盘显示

Image1->Canvas->TextOut(65,45,Text); //文字 j=(min+max)/4.0;

Image1->Canvas->TextOut(10,75,IntToStr((int)min)); Image1->Canvas->TextOut(24,26,IntToStr((int)j)) ; Image1->Canvas->TextOut(65,8,IntToStr((int)(2*j))) ; Image1->Canvas->TextOut(112,24,IntToStr((int)(3*j))) ; Image1->Canvas->TextOut(133,75,IntToStr((int)max)); Image1->Canvas->Brush->Color = clBlue; (4)动态指针的画法

19

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

以下是程序启动时的指针的画法 Image1->Canvas->Pen->Mode = pmNot; Image1->Canvas->Pen->Width =2; x0=75-(int) 47*cos(0);// y0=80-(int) 47*sin(0); //指针 Image1->Canvas->MoveTo(x0,y0 ); Image1->Canvas->LineTo(75, 80);

要实现指针的动态显示,必须对表所要显示的实时值到坐标的转换。当所要表示的什由0到Max时,角度由0~π,再由角度确定坐标位置。以下是具体实现。

设val为当前的表示值则坐标为: x= 75 -(int) 60*cos(3.14*val/Max);

y= 80- (int) 60*sin(3.14*val/Max);表盘显示如图

图6 功率表图

3.7数据存储

C++ BUILDE 强大的数据库功能,且本身有有一个Database Desktop 的数据库管理工具。利用它可以建立数据表、查询、输入、修改、删除等操作。这里采用Paradox7数据库,将所要监控的数据存储起来。表的结构和说明如表4。

20

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

表4数据表的字段说明

字段名 类型 字段说明 Date Char 日期 Timenow Char 时间 Pressure N 压力 Temperature N 温度 Water N 水位 Liuliang N 流量 Zhuanshu N 转速 Fengshu N 风速 Gonglv N 功率 Yangliang N 氧量 在程序的主控界面上插入一个Table组件,名为:Table1 则Table1的几个操作为:

Table1->FieldValues[\"temprature\"]=inportb(port)给temprature字段赋值

Table1->First() 指针移到数据的第一个记录 Table1->Prior() 指针往上移一个记录 Table1->Next() 指针往下移一个记录 Table1->Last() 指针移到数据的最后一个记录 Table1->Insert() 插入一个记录 Table1->Append() 在最后插入一空计录 Table1->Delete() 删除一个记录

Table1->Edit() 指针指向的记录进入修改模式 Table1->Post() 将修改过的记录写入数据库 Table1->Cancel() 取消数据的修改 Table1->Refresh() 重新显示记录

利用一个定时器定时查询锅炉的工况。以据读取的各参数值,来调用画

21

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

指针的函数:

pic_point(TImage *Image1,float k,float val,float max,TLabel *label) Image1 为显示表的画板 K 为由值向角度转换的系数 Val 当前所取的值

Max 所测的参数的最大值 Label 显示灯

3.8菜单的制作

C++ Builder 有良好的下拉式菜单组件和弹出菜单组件。在这个程序中使用一个主菜单来操作所有控制和检测。

3.9 报警部分的实现

为了提醒锅炉操作人员,锅炉监控系统必须提供完备的报警功能。在这里是利用声音和仿真指示灯进行报警。指示灯是有Label组件做的,其有两种状态,正常工况下呈绿色,当所示参数越出警界线,则显示红色。 报警声音是通过调用MessageBeep(0)函数来实现的。方法如下: Application->MessageBeep(0);

3.10打印输出

利用C++ BUIDER的Qreport组件页的上的控件,制作日志的打印报表。将数据信息以表格的形式输出。要制做打印模块,首先新建一个Form3,用来做打印控件的容器,其中包含Tabel1,QickRep1,Qrlabel,QrDBText。Tabel1的TabelName属性设为dayinfo.db(由于已经改变当前路径为默认路径),Active属性设为True,这样一个数据表就能连接至工作状态。QickRep1报表

22

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

的模板。Qrlabel与Label相似,在报表上输出文字。DrDBText的DataSet设为Tabel1,DataField设为所要打印的字段(日志样表参看附件A)。

3.11程序发布

一个程序的使用总是从安装程序开始的,而且在每个程序的启动开始都有一具封面,运行中有良好的帮助。

在C++ BUILDER 光盘中中有一个InstallShield Express For C++ BUILDER用于制做安装文件。利用它可以做出一个功能不错的安装文件,可以实现安装程序的大部分功能。

自定义了一个封面的类,在项目主程序中调用,便实现了封面的显视。显示完成就释放所占的内存。

在C++ BUIDER的help/tools文件夹下面有一个hcw.exe用来做专业的帮助文件。

通过以上三步,完成了这个程序的封面、帮助和安装程序的制作。

4结束语

目前国际上锅炉监控系统的发展趋势是:微机控制,自动调温,自动调压,自动补水,数字显示。自动化程度高,具有温过压系统,短路、断水、缺相六重自动保护,可无人值守,全自动运行。做这个监控系统虽然实现了认上的大部分功能.锅炉微机控制是一种大的趋势。以后还有以下几点需要进行改进:

1、具有仿真效果的图形显示界面,可以利用OpenGL来实现。 2、显示模块做成组件,方便以后做程序的调用。 3、硬件电路固化成板卡。 4、锅炉运行参数的趋势预测。

23

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

这个监控系统的用户界面还是很简单。于时间的关系还有很多附加功能需要做,比如说可以增加网络功能。做这个毕业设计用到了我大学所学的硬件和软件的综合知识,虽然目前做的功能还不是很完善,但是通过这个毕业设计使我进一步学会了做一个真正的软件的步骤、方法和实现过程。通过做软件的封面,打印输出,安装程序的制作。软件设计在我的头脑中有了一个更清楚的认识。

参考文献

[1] 袁向兵,邬春学.压裂酸化监控数据管及仿真系统.江汉石油学院.1999.6.18 [2] 张明亮,夏桂娟.工业锅炉微机控制.北京:中国建材工业出版社,1990.2. [3] 刘振安,刘大路.C++ Builder 4 编程技术. 北京:人民邮电出版社,1999.10. [4] Borland/Inprise 公司.C++ Builder 5 开发人员指南. 北京:机械工业出版社

2000.11.2

[5] 程世旭,杨师宣.微机原理与接口技术实验教程.湖北:江汉石油学院,1998.5. [6] 钱晓捷,陈涛.微型计算机原理及接口技术. 北京:机械工业出版社.1999.1

24

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

致 谢

首选我要非常感谢杨师宣老师对我的精心指导,尤其是要硬件连接和编程调试时杨师宣老师给的的指导对我的毕业设计的完成具有决定的意义。

其次我要感谢要大学四年中教过的所有老师,是们将引入数字王国的大门。

最后感谢全部持我、关心我的朋友。

25

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

1、监控系统主界面

附 录 A

部分界面

26

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

2.参数设定

27

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

28

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

3.打印预览界面

29

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

附 录 B 源程序

project1.cpp

//--------------------------------------------------------------------------#include #pragma hdrstop #include \"About.h\"

USERES(\"Project1.res\");

USEFORM(\"Unit2.cpp\

USEFORM(\"Unitprint.cpp\USEFORM(\"Unit1sd.cpp\

USEFORM(\"stucode\\About.cpp\

//------------------------------------------------------------ WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {

try {

DWORD lTime;

Application->Initialize();

AboutBox = new TAboutBox(Application); AboutBox->MakeSplash();

Application->Title = \"锅炉监控系统 1.0版\"; Application->CreateForm(__classid(TForm2), &Form2);

Application->CreateForm(__classid(TForm3), &Form3);

Application->CreateForm(__classid(TForm_cssz), &Form_cssz);

Application->CreateForm(__classid(TAboutBox), &AboutBox);

Application->Run(); }

catch (Exception &exception) {

Application->ShowException(&exception); }

return 0;

30

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

}

//------------------------------------------------------------ about.cpp

//------------------------------------------------------------ #include #pragma hdrstop #include \"About.h\"

//------------------------------------------------------------ #pragma package(smart_init) #pragma resource \"*.dfm\" TAboutBox *AboutBox;

//------------------------------------------------------------ __fastcall TAboutBox::TAboutBox(TComponent* Owner) : TForm(Owner) { }

//------------------------------------------------------------ void __fastcall TAboutBox::SpeedButton1Click(TObject *Sender) {

Close(); }

//------------------------------------------------------------ __fastcall TAboutBox::MakeSplash() {

Label6->Visible=false;

SpeedButton1->Visible=false; Bevel1->Visible=false; Show(); Update(); return -1; }

//------------------------------------------------------------

unit2.cpp

31

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

//------------------------------------------------------------ #include #include #include #include #pragma hdrstop #include \"Unit2.h\" #include \"Unit1sd.h\" #include \"Unitprint.h\" //#include \"Unit_login.h\"

//------------------------------------------------------------ #pragma package(smart_init) #pragma resource \"*.dfm\"

#define PRESS 125 #define TEMP 193 #define LIULIANG 370 #define ZHUANSHU 2700 #define FENGSHU 85 #define GONGLV 210 #define TEST 4.5 TForm2 *Form2;

//------------------------------------------------------------ __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { }

void outportw(unsigned short int port, unsigned short int value); unsigned short int inportw(unsigned short int port); unsigned char inportb(unsigned short int port);

void outportb(unsigned short int port, unsigned char value); void picture();

void __fastcall pic_point(TImage *Image1,float k,float val,float max,TLabel *label);

32

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

float

water,pressure,temperature,liuliang,zhuanshu,fengshu,gonglv,test;

unsigned char lamp=0xf0;

unsigned short int port8255=0x308; AnsiString runmode;

//------------------------------------------------------------void __fastcall TForm2::FormCreate(TObject *Sender) {

char buffer[100]; Table1->Edit();

StatusBar1->Panels->Items[0]->Text=DateToStr(Date()); getcwd(buffer,100); chdir(buffer);

Label2->Color= clLime; Label3->Color= clGray ; Form2->Hide();

water=0; pressure=0; temperature=0; liuliang=0; zhuanshu=0; fengshu=0; gonglv=0; test=0;

runmode=\"auto\"; N2->Enabled=false;

//打开指示灯

outportb(0x30b,0x90);

outportb(port8255+1,lamp); }

//------------------------------------------------------------void __fastcall TForm2::Timer1Timer(TObject *Sender) {

33

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

static unsigned short int i=0,k=0,max=0,min=100; unsigned short int port; int flag;

AnsiString warnings; port=0x310;

warnings=\"报警消息\" ; flag=0;

//删除旧线

pic_point(Image8,3.14/255,test,200,Label47);

pic_point(Image3,3.14/150,pressure,125,Label35); pic_point(Image2,3.14/250,temperature,193,Label34); pic_point(Image5,3.14/250,gonglv,210,Label43);

pic_point(Image6,3.14/400,liuliang,370,Label44); //流量 pic_point(Image7,3.14/3000,zhuanshu,2700,Label45); // 转速 pic_point(Image9,3.14/100,fengshu,85,Label46); //风速

Image4->Canvas->Pen->Mode = pmCopy; Image4->Canvas->Pen->Style = psSolid; Image4->Canvas->Pen->Color = clWhite; Image4->Canvas->Brush->Color = clWhite; Image4->Canvas->Pen->Width = 1;

Image4->Canvas->Rectangle(60,110,90,110-(water+40)*11.0/8.0); //矩形

//变换参数

temperature=temperature+50;

if(temperature>250) temperature=50; pressure=pressure+20;

if(pressure>150) pressure=20; gonglv=gonglv+20;

if(gonglv>250) gonglv=20; liuliang=liuliang+40;

if(liuliang>400) liuliang=60;

34

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

zhuanshu=zhuanshu+500;

if(zhuanshu>3000) zhuanshu=1000; fengshu=fengshu+30;

if(fengshu>100) fengshu=30; water=water+5;

if (water>40||water<-40) water=-35;

if (runmode==\"auto\") { test=test+20;

if(test>=255) test=30; } else

{ outportb(port,0);// 启动ADC0809 test =inportb(port); }

//状态条报警

if(temperature>TEMP)

{ warnings=warnings+\" 温度\"; flag=1; }

if(pressure>PRESS)

{ warnings=warnings+\" 压力\"; flag=1; }

if(gonglv>GONGLV)

{ warnings=warnings+\" 功率\"; flag=1; }

if(liuliang>LIULIANG)

{ warnings=warnings+\" 流量\"; flag=1; }

if(zhuanshu>ZHUANSHU)

{ warnings=warnings+\" 转速\"; flag=1;

35

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

}

if(fengshu>FENGSHU)

{ warnings=warnings+\" 风速\"; flag=1; }

//画新线

pic_point(Image3,3.14/150,pressure,125,Label35); pic_point(Image2,3.14/250,temperature,193,Label34); pic_point(Image5,3.14/250,gonglv,210,Label43);

pic_point(Image6,3.14/400,liuliang,370,Label44); //流量 pic_point(Image7,3.14/3000,zhuanshu,2700,Label45); // 转速 pic_point(Image9,3.14/100,fengshu,85,Label46); //风速 pic_point(Image8,3.14/255,test,200,Label47); Image4->Canvas->Pen->Mode = pmCopy; Image4->Canvas->Pen->Style = psSolid; Image4->Canvas->Pen->Width = 1;

//水位报警

if(water>30||water<-30)

{ Image4->Canvas->Pen->Color = clRed; Image4->Canvas->Brush->Color = clRed; MessageBeep(1);

Label36->Color=clRed;

warnings=warnings+\" 水位\"; flag=1; }

else {

Image4->Canvas->Pen->Color = clGreen; Image4->Canvas->Brush->Color = clGreen; Label36->Color=clTeal; }

Image4->Canvas->Rectangle(60,110,90,110-(water+40)*11.0/8.0);/

36

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

/矩形

//写状态条

StatusBar1->Panels->Items[2]->Text=TimeToStr(Time()); if(flag==1)

StatusBar1->Panels->Items[4]->Text=warnings;

else StatusBar1->Panels->Items[4]->Text=\"良 好\" ; //数字显示

Button3->Caption=FloatToStr(temperature).SubString(1,4); Button4->Caption=FloatToStr(pressure).SubString(1,4); Button6->Caption=FloatToStr(gonglv).SubString(1,4); Button7->Caption=FloatToStr(liuliang).SubString(1,4); Button8->Caption=FloatToStr(zhuanshu).SubString(1,4);

Button9->Caption=FloatToStr(test*5.0/255).SubString(1,4); Button10->Caption=FloatToStr(fengshu).SubString(1,4);

//写数据库

Table1->Append();

Table1->FieldValues[\"date\"]=DateToStr(Date()); Table1->FieldValues[\"timenow\"]=Time(); Table1->FieldValues[\"liuliang\"]=liuliang; Table1->FieldValues[\"zhuanshu\"]=zhuanshu; Table1->FieldValues[\"fengshu\"]=fengshu; Table1->FieldValues[\"Gonglv\"]=gonglv;

Table1->FieldValues[\"temprature\"]=temperature; Table1->FieldValues[\"pressure\"]=pressure; Table1->FieldValues[\"water\"]=water; Table1->Post(); }

//------------------------------------------------------------ void outportw(unsigned short int port, unsigned short int value) {

// mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

37

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

// mov ax, *(&value);

__emit__(0x66, 0x8b, 0x85, &value); // out dx, ax; __emit__(0xef); }

//------------------------------------------------ unsigned short int inportw(unsigned short int port) {

unsigned short int value; // mov edx, *(&port);

__emit__(0x8b, 0x95, &port); // in ax, dx __emit__(0xed);

// mov *(&value), ax

__emit__(0x66, 0x89, 0x85, &value); return value; }

//------------------------------------------------

void outportb(unsigned short int port, unsigned char value)

{

//asm mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// asm mov al, *(&value);

__emit__(0x8a, 0x85, &value);

//asm out dx, al;

__emit__(0x66, 0xee);

}

//------------------------------------------------------------

38

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

unsigned char inportb(unsigned short int port)

{

unsigned char value;

//asm mov edx, *(&port);

__emit__(0x8b, 0x95, &port);

// asm in al, dx;

__emit__(0x66, 0xec);

//asm mov *(&value), al;

__emit__(0x88, 0x85, &value);

return value;

}

//------------------------------------------------------------

void __fastcall TForm2::N25Click(TObject *Sender) {

outportb(0x30b,0x90); lamp=0xff;

outportb(port8255+1,lamp); Close(); }

//------------------------------------------------------------ void __fastcall TForm2::TrackBar1Change(TObject *Sender) {

// TrackBar1->SelStart=TrackBar1->Position; }

39

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

//------------------------------------------------------------void __fastcall picture(TImage *Image1,float min,float max,const AnsiString Text) {

int x,y,i,x0,y0; float j;

Image1->Canvas->Pen->Mode = pmCopy; Image1->Canvas->Pen->Style = psSolid; Image1->Canvas->Brush->Color = clWhite; Image1->Canvas->Pen->Width = 1;

Image1->Canvas->Rectangle(2,2,Image1->Width-2,Image1->Height-2); //矩形

Image1->Canvas->Arc(20,25,130,135,130,80,20,80); //圆弧 //Image1->Canvas->Pen->Color = clGreen;

// 画表盘及其刻度

for(i=0;i<=12;i++) {

x=(int) 60*cos(3.14/12*i); y=(int) 60*sin(3.14/12*i);

Image1->Canvas->MoveTo(75-x, 80-y ); x=(int) 50*cos(3.14/12*i); y=(int) 50*sin(3.14/12*i);

Image1->Canvas->LineTo(75-x, 80-y); }

//表盘显示

Image1->Canvas->TextOut(65,45,Text); //文字

j=(min+max)/4.0;

Image1->Canvas->TextOut(10,75,IntToStr((int)min)); Image1->Canvas->TextOut(24,26,IntToStr((int)j)) ; Image1->Canvas->TextOut(65,8,IntToStr((int)(2*j))) ; Image1->Canvas->TextOut(112,24,IntToStr((int)(3*j))) ;

40

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

Image1->Canvas->TextOut(133,75,IntToStr((int)max)); Image1->Canvas->Brush->Color = clBlue;

Image1->Canvas->Pie(50,64,100,96,100,80,50,80); //中心

//Image1->Canvas->Brush->Color = clWhite;

//指针

Image1->Canvas->Pen->Mode = pmNot; Image1->Canvas->Pen->Width =2; x0=75-(int) 47*cos(0); y0=80-(int) 47*sin(0);

Image1->Canvas->MoveTo(x0,y0 ); Image1->Canvas->LineTo(75, 80); }

//----------------------------------------------------------- void __fastcall pic_point(TImage *Image1,float k,float val,float max,TLabel *label) {

int x0,y0;

Image1->Canvas->Pen->Mode = pmNot; Image1->Canvas->Pen->Width = 2; x0=75-(int) 47*cos(val*k); y0=80-(int) 47*sin(val*k);

Image1->Canvas->MoveTo(x0,y0); Image1->Canvas->LineTo(75,80);

if(val>max) {

int i;

Image1->Canvas->Pen->Mode = pmCopy; Image1->Canvas->Brush->Color = clRed;

Image1->Canvas->Pie(50,64,100,96,100,80,50,80); //中心 for(i=0;i<30;i++) MessageBeep(1); label->Color=clRed; }

41

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

else {

Image1->Canvas->Pen->Mode = pmCopy; Image1->Canvas->Brush->Color = clBlue;

Image1->Canvas->Pie(50,64,100,96,100,80,50,80); //中心 label->Color=clTeal; } }

//------------------------------------------------------------ void __fastcall TForm2::Button1Click(TObject *Sender) {

//picture(Image2);

Form2->Image2->Canvas->Arc(4,4,100,100,100,52,4,52);

//Close(); }

//------------------------------------------------------------void __fastcall TForm2::FormPaint(TObject *Sender) {

int i,k;

picture(Image2,0,250,\"温度\"); picture(Image3,0,150,\"压力\"); //picture(Image4,-40,40,\"水位\"); picture(Image5,0,250,\"功率\"); picture(Image6,0,400,\"流量\"); picture(Image7,0,3000,\"转速\"); picture(Image8,0,5,\"测试\"); picture(Image9,0,100,\"风速\"); //水位标尺

Image4->Canvas->Pen->Mode = pmCopy; Image4->Canvas->Pen->Style = psSolid; Image4->Canvas->Brush->Color = clWhite; //Image4->Canvas->Brush->Color = clWhite; Image4->Canvas->Pen->Width = 1; Image4->Canvas->MoveTo(55,1);

42

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

Image4->Canvas->LineTo(55,111); Image4->Canvas->MoveTo(95,1); Image4->Canvas->LineTo(95,111); for(i=1,k=40;i<=111; )

{ Image4->Canvas->MoveTo(55,i); Image4->Canvas->LineTo(59,i); Image4->Canvas->MoveTo(95,i); Image4->Canvas->LineTo(91,i);

Image4->Canvas->TextOut(40,i-5,IntToStr(k)); Image4->Canvas->TextOut(97,i-5,IntToStr(k)); i=i+110/8; k=k-10; } }

//------------------------------------------------------------void __fastcall TForm2::Button11Click(TObject *Sender) {

if(Label2->Color==clLime) { Label3->Color= clLime; Label2->Color=clGray; Button12->Enabled=true; N2->Enabled=true; }

else { Label2->Color= clLime; Label3->Color= clGray ; Button12->Enabled=false; N2->Enabled=false; } }

//------------------------------------------------------------void __fastcall TForm2::N21Click(TObject *Sender) {

Form3->QuickRep1->Preview(); water=0; pressure=0;

43

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

temperature=0; liuliang=0; zhuanshu=0; fengshu=0; gonglv=0; test=0;

Form2->OnPaint; }

//------------------------------------------------------------void __fastcall TForm2::N24Click(TObject *Sender) {

Form_cssz->Show(); }

//------------------------------------------------------------ void __fastcall TForm2::Button12Click(TObject *Sender) {

Form_cssz->Show(); }

//------------------------------------------------------------void __fastcall TForm2::N38Click(TObject *Sender) {

//Button11Click(); //MainMenu1->N }

//------------------------------------------------------------void __fastcall TForm2::N30Click(TObject *Sender) {

outportb(0x30b,0x90); lamp=0xff;

outportb(port8255+1,lamp); }

//------------------------------------------------------------void __fastcall TForm2::N12Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=0xf0;

44

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

outportb(port8255+1,lamp); }

//------------------------------------------------------------ void __fastcall TForm2::N14Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp & 0xfd;

outportb(port8255+1,lamp); }

//------------------------------------------------------------void __fastcall TForm2::N15Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp&0xfb;

outportb(port8255+1,lamp); }

//------------------------------------------------------------ void __fastcall TForm2::N16Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp&0xf7;

outportb(port8255+1,lamp); }

//------------------------------------------------------------ void __fastcall TForm2::N29Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp|1;

outportb(port8255+1,lamp); }

//------------------------------------------------------------ void __fastcall TForm2::N31Click(TObject *Sender) {

outportb(port8255+3,0x90);

45

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

lamp=lamp|2;

outportb(port8255+1,lamp); }

//------------------------------------------------------------void __fastcall TForm2::N32Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp|4;

outportb(port8255+1,lamp); }

//------------------------------------------------------------

void __fastcall TForm2::N33Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp|8;

outportb(port8255+1,lamp); }

//------------------------------------------------------------

void __fastcall TForm2::N8Click(TObject *Sender) {

int i=0;

outportb(port8255+3,0x90); lamp=lamp & (~16);

outportb(port8255+1,lamp); for(i=0;i<30000;i++);

Application->MessageBox(\"补水完成\返回消息\ }

//------------------------------------------------------------ void __fastcall TForm2::N9Click(TObject *Sender) {

int i;

outportb(port8255+3,0x90); lamp=lamp & (~32);

outportb(port8255+1,lamp);

46

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

for(i=0;i<30000;i++);

Application->MessageBox(\"加煤完成\返回消息\ }

//------------------------------------------------------------ void __fastcall TForm2::N19Click(TObject *Sender) {

int i;

outportb(port8255+3,0x90); lamp=lamp & (~64);

outportb(port8255+1,lamp); for(i=0;i<30000;i++);

Application->MessageBox(\"调节风速完成\返回消息\ }

//------------------------------------------------------------ void __fastcall TForm2::N1Click(TObject *Sender) {

outportb(port8255+3,0x90); lamp=lamp|0x70;

outportb(port8255+1,lamp); }

//------------------------------------------------------------void __fastcall TForm2::N4Click(TObject *Sender) {

Application->HelpFile=\"SHUDESOFT.hlp\";

Application->HelpCommand(HELP_CONTENTS, 0); water=0; pressure=0; temperature=0; liuliang=0; zhuanshu=0; fengshu=0; gonglv=0; test=0;

Form2->OnPaint;

47

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

}

//------------------------------------------------------------ void __fastcall TForm2::N6Click(TObject *Sender) {

if(runmode==\"auto\") runmode=\"manual\";

else runmode=\"auto\" ; }

//------------------------------------------------------------

unitprint

//------------------------------------------------------------#include #pragma hdrstop #include \"Unit2.h\"

#include \"Unitprint.h\"

//------------------------------------------------------------ #pragma package(smart_init) #pragma resource \"*.dfm\" TForm3 *Form3; extern float

water,pressure,temperature,liuliang,zhuanshu,fengshu,gonglv,test;

//------------------------------------------------------------__fastcall TForm3::TForm3(TComponent* Owner) : TForm(Owner) { }

//------------------------------------------------------------ void __fastcall TForm3::FormDestroy(TObject *Sender) {

water=0; pressure=0; temperature=0;

48

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

liuliang=0; zhuanshu=0; fengshu=0; gonglv=0; test=0;

Form2->OnPaint; }

//------------------------------------------------------------

unit1sd.cpp

#include #pragma hdrstop #include \"Unit2.h\" #include \"Unit1sd.h\"

//------------------------------------------------------------#pragma package(smart_init) #pragma resource \"*.dfm\" extern float water,pressure,temperature,liuliang,zhuanshu,fengshu,gonglv,test;

TForm_cssz *Form_cssz;

//------------------------------------------------------------ __fastcall TForm_cssz::TForm_cssz(TComponent* Owner) : TForm(Owner) { }

//------------------------------------------------------------ void __fastcall TForm_cssz::BitBtn2Click(TObject *Sender) {

water=0; pressure=0; temperature=0; liuliang=0; zhuanshu=0;

49

江汉石油学院2002年毕业论文 锅炉监控系统的开发研究

fengshu=0; gonglv=0; test=0;

Form_cssz->Close(); }

//------------------------------------------------------------ void __fastcall TForm_cssz::BitBtn1Click(TObject *Sender) {

Form2->Label25->Caption = Edit1->Text; Form2->Label26->Caption = Edit7->Text; Form2->Label27->Caption = Edit5->Text; Form2->Label32->Caption = Edit4->Text; Form2->Label31->Caption = Edit6->Text; Form2->Label30->Caption = Edit2->Text; Form2->Label29->Caption = Edit3->Text; Form2->Label28->Caption = Edit8->Text; //Form2->FormCreate(); //Form2->

water=0; pressure=0; temperature=0; liuliang=0; zhuanshu=0; fengshu=0; gonglv=0; test=0;

//Form2->OnPaint;

Form_cssz->Close(); }

//------------------------------------------------------------------

50

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务