基于WinCC的水塔水位仿真系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
吉林化工学院信控学院专业综合设计说明书基于WinCC的水塔水位仿真系统设计
学生学号:08540130
学生姓名:赵晓凯
专业班级:测控0801
指导教师:孙明革刘麒
职称:副教授讲师
起止日期:2011.10.10~2011.10.28
吉林化工学院
Jilin Institute of Chemical Technology
吉林化工学院信息与控制工程学院专业综合设计说明书
- I -
专业综合设计任务书
一.设计题目:基于WinCC 的水塔水位控制系统 二.设计目的
1.掌握用可编程控制器(PLC )实现工业系统自动化的设计方法; 2.熟练掌握并利用PLC 的梯形图语言进行编程; 3.掌握WinCC 软件的应用环境及组态方法; 4.掌握上下位机之间的通讯方法。
三.设计任务及要求
利用PLC 实现水塔水位控制系统的自动化控制,需要完成以下内容:
1.使用S7 300的梯形图语言进行编程,实现水塔水位控制系统的自动化控制; 2.完成WinCC 各个画面的组态;
3. 完成上下位机之间的通讯对工业现场实况进行模拟仿真。
四.设计时间及进度安排
设计时间共三周(2011.10.10~2011.10.28),具体安排如下表: 周安排
设 计 内 容
设计时间
第一周 查阅资料,对西门子S7-300软件进行了解,并完成下位机的编程。
2011.10.10~
2011.10.16 第二周
查阅资料,了解WinCC 软件完成上位机的画面组态,并实现上下位机之间的通讯 2011.10.17~
2011.10.23 第三周
提交设计作品和专业综合设计说明书,评定专业综合设计成绩。
2011.10.24~2011.10.28
五.指导教师评语及学生成绩
指导教师评语:
年 月 日
成绩
指导教师(签字):
基于WinCC的水塔水位仿真系统设计
摘要
在工农业的生产过程中,经常需要对水位进行测量和控制。
水位控制在日常生活的应用也相当广泛、比如水塔、地下水、水电站等情况下地水位控制。
而水位检测可以有多种实现方法,如机械控制,逻辑电路控制、机电控制等。
本文采用PLC进行主控制,在水箱上安装一个自动检测水位的装置,利用水的导电性连续地全天候的监测水位的变化,把测量到的水位转换成相应的电信号,主控台应用MCGS组态软件对接收到的信息进行数据处理,完成相应的水位显示,故障报警信息显示等。
使水塔水位保持在适当的位置。
由于本文中的是基于WinCC的仿真实验,所以为了简便,检测部分用手动开关进行了替代。
在实际的工业过程中只需用检测器件替换回来即可。
本文仿真系统采用组态软件WinCC 控制系统方案,设计了水塔水位控制系统画面、实况模拟、报警记录及历史报警查询等界面,实现了基于WinCC的水塔水位控制系统的模拟仿真。
该控制系统配置灵活、控制可靠、维修方便,提高了生产效率,保证了系统稳定运行。
利用仿真系统对所需要操作的系统进行仿真操作,这样可以提前发现系统的弊病,可以进行及时的调整与改进,可以避免一些故障的发生,减少不必要的损失。
关键词:PLC ;组态软件WinCC;水塔水位控制系统
- II -
吉林化工学院信息与控制工程学院专业综合设计说明书
目录
专业综合设计任务书 (I)
摘要 (II)
第一章绪论 (1)
1.1 专业综合设计的课题背景及意义 (1)
1.2 可编程控制器PLC的简介 (1)
1.3 WinCC在工业中的应用 (2)
第二章水塔水位控制系统的工艺和设计要求 (4)
2.1 工艺流程 (4)
2.2 控制要求 (4)
第三章下位机软件简介及编程 (5)
3.1 S7-300概述 (5)
3.2 S7-300的组成部件 (5)
3.3 程序流程图 (6)
3.4 控制程序 (7)
第四章上位机WinCC软件组态 (10)
4.1 WinCC组态软件简介 (10)
4.2 WinCC系统构成 (10)
4.3 WinCC的组态过程 (11)
4.3.1 新建项目的设计 (11)
4.3.2 欢迎界面的设计 (13)
4.3.3 登录界面的设计 (14)
4.3.4 工艺流程图的设计 (15)
4.3.5 修改密码界面的设计 (17)
4.3.6 报警界面的设计 (20)
4.3.7 用户的创建 (23)
4.3.8 系统运行 (23)
结论 (25)
参考文献 (26)
- III -
吉林化工学院信息与控制工程学院专业综合设计说明书
第一章绪论
1.1 专业综合设计的课题背景及意义
水箱中的水位高低通常由水电管理人员进行控制管理,非常麻烦,并且时常出现高层楼房断水和水箱溢水等不安全事故,给居民的生活带来了极大的不便。
同时也造成了不必要的水资源流失。
为了解决经常停水的情况和有效地避免水资源的浪费,节约能源,本文设计了一个适用于城镇居民楼房,特别是农村住宅楼房生活用水的水箱水位控制器。
PLC是在传统的顺序控制器的基础上引入微电技术、计算机技术、自动控制技术和通讯技术而形成的一代新型工业控制装置,目的是用来取代继电器、执行逻辑、计时、计数等顺序控制功能,建立柔性的程序控制系统。
我国的经济建设及小城镇建设的迅猛发展,企业生产自动化程度大大提高,人们的生活水平已经迈入小康,对家庭用水的质量进一步提高,是对家庭生活的质量有着更高的要求。
这些都必然需要依赖高品质、安全可靠性好的产品的出现。
为满足人们对生产和生活中水位控制的高品位要求,是实现无人值守和家庭优雅舒适生活的理想。
本设计从人们现实生活的用水的现状着手,采用当今社会较为流行的控制界面西门子WinCC V6为窗口,在S7-300PLC上实现水塔水位控制的模拟控制功能。
而从世界范围来看,PLC是用的最多、应用范围最广的自动化产品,也可以说是最实用的自动化产品。
因为用PLC来实现自动有很多优点,可使系统的硬件设备大为简化,体积减小,而且PLC的抗干扰能力强,可靠性高,操作维护简单。
因而在当今的日常生活和工业生产中PLC得到了广泛的应用。
1.2 可编程控制器PLC的简介
可编程控制器是在继电器控制和计算机控制的基础上发展而来的新型工业自动控制装置。
早期的可编程控制器在功能上只能实现逻辑控制,因而被称为可编程逻辑控制器(Programmable Logic Controller),简称PLC。
随着微电子技术和微型计算机的发展,微处理器用于PLC,使其不仅可以实现逻辑控制,还可以进行数字运算和处理、模拟量调节和联网通信等,因此美国电气制造协会于1980年将它正式命名为可编程控制器(Programmable Controller),简称PC。
但近年来PC又成为个人计算机(Personal Computer)的简称,为避免发生混淆,我们仍把可编程控制器简称为PLC。
1、PLC的产生
传统的继电器控制具有结构简单、易于掌握、价格便宜等优点,在工业生产中应用甚广。
但是,这些控制装置体积大、动作速度较慢、耗电较多、功能少,特别是接线复杂、排除故障非常困难而且要花费大量的时间。
如果工艺要求发生变化,控制柜内的元件和接线也需要作相应的变动,改造的工期长、费用高,通用性和灵活性较差。
1968年,美国最大的汽车制造商通用汽车公司(GM),为了适应汽车型号的不断翻新,想寻找一种方法,以尽可能减少重新设计继电器控制系统和接线、降低成本、缩短时间,而考虑把计算机的功能完善、通用灵活等优点与继电器控制的简单易懂、操作方便、价格便宜等优点结合起来,制成一种通用控制装置,提出了研制PLC的基本设想:1.编程简单方便,可在现场修改程序;2.硬件维护方便,最好是插件式结构;3.可靠性要高于继电器控制装置;4.体积小于继电器控制装置;
- 1 -
基于WinCC的水塔水位仿真系统设计
5.可将数据直接送入管理计算机;
6.成本上可与继电器竞争;
7.输入可以是交流115V;
8.输入为交流115V,2A以上,能直接驱动电磁阀;
9.扩展时,原有系统只需做很小的改动;10.用户程序存储容量至少可以扩展到4K。
根据以上设想和要求,1969年美国数字设备公司(DEC)研制出世界上第一台可编程控制器,并在通用汽车公司的汽车生产线上试用成功,从而开创了工业控制的新局面。
从此,这一更新技术就以很快的速度发展起来,现代的PLC已成为现代工业控制的三大支柱(PLC,机器人和CAD/CAM)之一。
2、PLC的特点
1.编程方法简单易学
考虑到企业中一般电气技术人员和技术工人的传统读图习惯和应用微机的实际水平,PLC配备有他们最容易接受和掌握的梯形图语言。
梯形图语言的电路符号和表达方式与继电器电路原理图非常接近。
而且某些仅有开关量逻辑控制功能的PLC只有十几条指令。
通过阅读PLC的使用手册或短期培训,电气技术人员或技术工人只要几天的时间就可以熟悉梯形图语言,并用来编制用户程序。
2.硬件配套齐全,用户使用方便
PLC配备有品种齐全的各种硬件装置供用户选用,用户不必自己设计和制作硬件装置。
用户在硬件方面的设计工作只是确定PLC的硬件配置和外部接线。
PLC的安装接线也很方便。
3.通用性强,适应性强
PLC的生产具有系列化和模块化特点,硬件配置相当灵活,可以很方便地组成能满足各种控制要求的控制系统。
组成系统后,如果工艺变化,可以通过修改用户程序,方便快速地适应变化。
4.可靠性高,抗干扰能力强
绝大多数用户都将可靠性作为选择控制装置的首要条件。
PLC采取了一系列硬件和软件抗干扰措施,可以直接用于有强烈干扰的工业生产现场。
PLC的平均无故障间隔时间高,如日本三菱公司的F1、F2系列PLC的平均无故障间隔时间长达30万小时,这是一般微机所不能比拟的。
5.系统的设计、安装、调试工作量少
PLC用软件功能取代了继电器控制系统中大量的中间继电器、时间继电器、计数器等器件,控制柜的设计、安装、接线工作量大大减少。
PLC的梯形图程序很容易掌握,设计和调试梯形图所花的时间比设计继电器系统电路图花的时间要少得多。
6.维修工作量小,维修方便
PLC的故障率很低,并且有完善的诊断和显示功能。
PLC或外部的输入装置和执行机构发生故障时,可以根据PLC上的指示灯或编程器提供的信息迅速地查明故障的原因。
用更换模块的方法可以迅速地排除PLC的故障。
7.体积小,能耗低
以F1意40M型PLC为例,其外形尺寸为305×110×110mm,功耗小于25VA。
由于体积小,PLC很容易装入机械设备内部,是实现机电一体化的理想的控制设。
1.3 WinCC在工业中的应用
WinCC(Windows Control Center)是西门子开发的在WINDOWS 环境下解决生产和过程自动化、可视化信息、显示和实现控制策略,即实现SCADA 系统人机接口(HMI-Human Machine
- 2 -
吉林化工学院信息与控制工程学院专业综合设计说明书
Interface)的组态软件。
它提供了适用于工业的图形显示、消息、归档以及报表的各种功能模板,能实现高性能的过程耦合、快速的画面更新和可靠的资料处理,具有较高的实用性。
它在Windows NT 或Windows 2000 标准坏境中提供确保可靠地控制生产过程的所有功能。
WinCC的显著特性是全面开放,很容易结合标准的或用户的程序建立人机接口,精确地满足生产实际要求。
系统集成商可应用WinCC作为其系统扩展的基础,通过开放接口开发自己的应用软件。
WinCC是基于32 位的应用软件Windows 32 位操作系统的抢先多任务的特性确保了对过程事件的快速反应,并提供了多种防止资料丢失的保护,WinCC使用了面向对象的软件编程技术,将所有工程工具的组态功能集成在一起,提供用于过程可视化和操作的全部基本功能。
此外,提供宽范围的编辑功能接口,使用户为其独特的应用单独组态。
WinCC组态软件提供了适用于工业的图形显示、消息、归档以及报表的各种功能模板,能实现高性能的过程偶合、快速的画面更新和可靠的资料处理,具有较高的实用性。
- 3 -
基于WinCC的水塔水位仿真系统设计
第二章水塔水位控制系统的工艺和设计要求
2.1 工艺流程
4个开关分别为:S1代表水塔高水位到限;S2代表水塔低水位超限;S3代表水池高水位到限;S4代表水池低水位超限。
通过对水池进水阀和水塔供水电机的控制。
保证水塔的正常水位。
2.2 控制要求
当水池水位低于水池低水位界(S4为ON表示),阀Y打开进水(Y为ON)定时器开始定时,4秒后,如果S4还不为OFF,那么阀Y指示灯闪烁,表示阀Y没有进水,出现故障,S3为ON后,阀Y关闭(Y为OFF)。
当S4为OFF时,且水塔水位低于水塔低水位界时S2为ON,电机M运转抽水。
当水塔水位高于水塔高水位界时电机M停止。
如图2-1所示:
图2-1 控制流程图
- 4 -
第三章下位机软件简介及编程
3.1 S7-300概述
S7-300是模块化的中小型PLC,适用于中等性能的控制要求。
品种繁多的CPU模块,信号模块和功能模块满足各种领域的自动控制任务,用户可以根据系统的具体情况选择合适的模块,维修时更换模块很方便。
S7-300的每个CPU都有一个使用MPI(多点接口)通信协议的RS-485接口。
有的CPU还带有集成的现场总线PROFIBUS-DP接口,PROFINET接口或PtP(点对点)串行通信接口。
S7-300不需要附加任何硬件,软件和编程,就可以建立一个MPI网络。
使用CPU集成的PROFIBUS-DP 接口或通信处理器,S7-300可以作DP网络上的主站或从站。
S7-300有350多条指令,其编程软件STEP7功能强大,使用方便。
STEP7的功能块图和梯形图编程语言符合IEC61131标准,语句表编程语言与IEC标准稍有不同,以保证与STEP5的兼容,3种编程语言可以互相转换。
S7-300已将HMI(人机接口)服务集成到操作系统内,大大减少了人机对话的编程要求。
S7-300按指定的刷新速度自动地将数据传送给SIMATIC人机界面。
3.2 S7-300的组成部件
S7-300PLC是模块式的PLC,它由以下几部分组成:
1.中央处理单元(CPU)
CPU用于存储和处理用户程序,控制集中式I/O和分布式I/O。
各种CPU有不同的性能,有的CPU集成有数字量和模拟量输入/输出点,有的CPU集成有PROFIBUS-DP等通信接口。
CPU前面板上有状态故障指示灯,模式选择开关,24V电源端子和微存储卡插槽。
2.电源模块(PS)
电源模块用于将AC 220V的电源转换为DC24V电源,供CPU模块和I/O模块使用。
电源模块和额定输出电流由2A,5A和10A3种,过载时模块上的LED闪烁。
3.信号模块(SM)
信号模块是数字量输入/输出模块(简称为DI/DO)和模拟量输入/输出模块(简称为AI/AO)的总称,它们使不同的过程信号电压或电流与PLC内部的信号电平匹配。
4.功能模块(FM)
功能模块式智能的信号处理模块,它们不占用CPU的资源,对来自现场设备的信号进行控制和处理,并将信息传送给CPU。
5.通信处理器(CP)
通信处理器用于PLC之间,PLC与计算机和其他智能设备之间的通信,可以将PLC接入PROFIBUS-DP,AS-i和工业以太网,或用于实现点对点通信。
通信处理器可以减轻CPU处理通信的负担,并减少用户对通信的编程工作。
6.接口模块(IM)
接口模块用于多机架配置时连接主机架和扩展机架。
7.导轨
铝质导轨用来固定和安装S7-300上述的各种模块。
3.3 程序流程图
具体程序流程图3-1所示:
开始
水池水位低于下
限吗?
电磁阀打开
4S 后水池水位高于下限吗?
报警
水池继续进水水塔水位低于下限吗?
水池水位高于上限
电磁阀关闭
水泵起动,给水塔供水水塔水位高于下限
水塔水位高于上限
水泵停止
水池水位低于下限
结束
否
是否
是
是
否
图3-1 程序流程图
按本设计的工艺流程要求,首先对水池水位进行检测,若不低于水池低水位,则继续检测;若低于水池低水位,电磁阀阀Y打开进水且定时器开始定时。
4秒后,如果水池水位仍然处于低水位,则指示灯闪烁即报警,表示水池没有进水,出现故障。
若水池水位高于水位上限,则电磁阀关闭。
对于水塔,当水池水位高于下限制,且水塔水位低于水塔低水位界时,电机M运转抽水。
当水塔水位高于水塔高水位界时电机M停止。
3.4 控制程序
程序段1:程序段1和2产生占空比为0.5的方波。
梯形图如图3-2所示:
图3-2 程序段1
程序段2:程序段1和2产生占空比为0.5方波。
梯形图如图3-3所示:
图3-3 程序段2
程序段:3:当水池为低水位I0.3为ON时,计数器开始计时,时间为4秒。
梯形图如图3-4所示:
图3-4 程序段3
程序段:4:4秒计时期间,若I0.3为开,则T32开始计时,时间为0.1秒。
梯形图如图3-5所示:
图3-5 程序段4
程序段5:T39计时期间,若高水位开关没有闭合,S3为ON时闪烁,当I0.3为ON时,T39开始计时,T38产生一秒的方波信号,Q0.0为进水指示灯Y。
梯形图如图3-6所示:
图3-6 程序段5
程序段7:当水塔水位低于低水位界限时,I0.1为ON,而且水池低水位开关关闭I0.3为ON 时,电机运转,当达到高水位时电机停止工作。
梯形图如图3-7所示:
图3-7 程序段6
第四章上位机WinCC软件组态
4.1 WinCC组态软件简介
西门子视窗控制中心SIMATIC WinCC(Windows Control Center)是HMI/SCADA软件中的后起之秀,1996年进入世界工控组态软件市场,当年就被美国Control Engineering 杂志评为最佳HMI 软件,以最短的时间发展成第三个在世界范围内成功的SCADA系统;而在欧洲,它无可争议的成为第一。
WinCC V6.0采用标准Microsoft SQL Server 2000(WinCC V6.0以前版本采用Sybase)数据库进行生产数据的归档,同时具有Web浏览器功能。
作为SIMATIC全集成自动化系统的重要组成部分,WinCC确保与SIMATIC S5,S7和505系列的PLC连接的方便和通讯的高效;WinCC与STEP7编程软件的紧密结合缩短了项目开发的周期。
此外,WinCC还有对SIMATIC PLC 进行系统诊断的选项,给硬件维护提供了方便。
4.2 WinCC系统构成
WinCC基本系统是很多应用程序的核心。
它包含以下九大部件:
1.变量管理器
变量管理器(tag management)管理WinCC中所使用的外部变量,内部变量和通讯驱动程序。
2.图形编辑器
图形编辑器(graphics designer)用于设计各种图形画面。
3.报警记录
报警记录(alarm logging)负责采集和归档报警消息。
4.变量归档
变量归档(tag logging)负责处理测量值,并长期存储所记录的过程值。
5.报表编辑器
报表编辑器(report designer)提供许多标准的报表,也可以设计各种格式的报表,并可按照预定的时间进行打印。
6.全局脚本
全局脚本(global script)是系统设计人员用ANSI-C及Visual Basic 编写的代码,以满足项目的需要。
7.文本库
文本库(text library)编辑不同语言版本下的文本消息。
8.用户管理器
用户管理器(user administrator)用来分配,管理和监控用户对组态和运行系统的访问权限。
9.交叉引用表
交叉引用表(cross-reference)负责搜索在画面,函数,归档和消息中所使用的变量,函数,OLE对象和ActiveX控件。
4.3 WinCC的组态过程
4.3.1 新建项目的设计
打开WinCC,在“文件”,“菜单中新建项目”,选择“单用户项目”,如图4-1所示:
图4-1 创建项目
点击确定后出现如下界面,如图4-2所示:
图4-2 保存项目
项目名称输入为“zzz”,点击创建,在“变量管理”项中点击鼠标右键,新建驱动程序,选择“SIMATIC S7 Protocol suite”,如图4-3所示。
图4-3 添加新的驱动程序
在“变量管理”的下拉菜单中,双击MPI出现如下界面,如图4-4所示:
图4-4 变量管理
单击“属性”按钮,把插槽号改为2,如图4-5所示,确定之后就可以在图形编辑器中可以进行页面的设计了。
图4-5 修改插槽
4.3.2 欢迎界面的设计
如图4-6所示为系统欢迎界面,使用“对象选项板”中的“图形对象”插入一个图片,另外添加一个按钮命名为“进入系统”,赋予进入系统主画面的功能,即鼠标点击按钮后画面立即切换到“登录界面”。
图4-6 欢迎界面
主要实现的部分为对“进入”按钮的C脚本的编写,创建程序如下:
BOOL Flag,Flag_Run;
unsigned char i;
Flag_Run=GetTagBit("First_Run");
i=GetTagByte("EnterSystem"); //Return-Type: BYTE
if(i>=20)
{
if(Flag_Run==0)
{
OpenPicture("登录画面.Pdl");
SetTagBit("First_Run",1);
}
}
else
{
SetTagByte("EnterSystem",++i);
}
Flag=GetTagBit("flash_flag"); //Return-Type: BOOL
if(Flag)
{
SetTagBit("flash_flag",0); //Return-Type: BOOL
}
else
{
SetTagBit("flash_flag",1); //Return-Type: BOOL
}
return 0;
其中First_Run和flash_flag均为二进制变量,EnterSystem为无符号8位数变量。
4.3.3 登录界面的设计
通过用户登录的设置,可以对画面中的按钮等添加授权,在没有登录时,用户无权进行操作。
只有用户登录后权限才能被授予,并可以进行操作。
此系统的登录界面如图4-7 所示:
图4-7 登录界面
用户登录的主要程序如下:
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
PWRTLogin(1);
用户退出的主要程序如:
#pragma code("UseAdmin.DLL")
#include "pwrt_api.h"
#pragma code()
PWRTLogout();
退出系统的主要程序如下:
{
ExitWinCC();
}
修改密码可设置直接动作,使其连接至“修改密码”画面窗口。
同样“工艺流程”和|“报警画面”直接连接动作至相应的界面。
可以对这两个按钮的功能设置权限,使其在用户登录的前提条件下才可以动作。
方法是在其组态对话框中的“授权”一项选择变量输入,确定即可。
同时,设置两个画面窗口,以供切换画面。
分别是画面窗口1和画面窗口2。
4.3.4 工艺流程图的设计
首先创建如下变量:
S1,位内存,二进制变量,I0.0
S2,位内存,二进制变量,I0.1
S3,位内存,二进制变量,I0.2
S4,位内存,二进制变量,I0.3
Y电磁阀,输出,二进制变量,Q0.0
电机M,输出,二进制变量,Q0.1
阀损坏,输出,二进制变量,Q0.4
添加变量图如图4-8所示:
图4-8 添加变量之后画好工艺流程图,如图4-9所示:
图4-9 工艺流程图最后对其进行变量的连接:
水塔高水位指示灯,背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“S1”,触发器设置为根据变化。
水塔低水位指示灯,背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“S2”,触发器设置为根据变化。
水池高水位指示灯,背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“S3”,触发器设置为根据变化。
水池低水位指示灯,背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“S4”,触发器设置为根据变化。
电机:背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“电机M”,触发器设置为根据变化。
进水Y:背景颜色项中选择布尔型,真时为绿,假时为红,连接的变量为“水池进水Y”,触发器设置为根据变化。
4.3.5 修改密码界面的设计
用户修改功能是在WinCC处于激活状态时,可以在线修改已经登录的用户密码。
不再需要调用用户管理器来修改密码,省去了许多繁琐的环节,方便用户使用。
修改密码界面如图4-10所示:
图4-10 修改密码界面
画面的设计:设置界面如下,包括2个按钮,4个静态文本和4个输入输出域。
“用户名”所对应的输入输出域连接变量“@CurrentUserName”触发设置为根据变化。
“密码”所对应的输入输出域,改变其名,变为“IOField_OldPassWord”(方便编程),并在其“属性”栏中的“输入输出”项中把“域类型”设置为输入,“数据格式”为字符串,“输出格式”为空。
同样“新密码”所对应的输入输出域,改变其名,变为“IOField_NewPassWord”(方便编程),并在其“属性”栏中的“输入输出”项中把“域类型”设置为输入,“数据格式”为字符串,“输出格式”为空。
“密码”所对应的输入输出域,改变其名,变为“IOField_Confirmation”(方便编程),并在其“属性”栏中的“输入输出”项中把“域类型”设置为输入,“数据格式”为字符串,“输出格式”为空。
对“确定”按钮的C脚本主要编程如下:
#pragma code ("usegen.dll")
#include "usegenap.h"
#pragma code ()
HWND Handle;
DM_PROJECT_INFO pr_info;
DM_DIRECTORY_INFO dir_info;
CMN_ERROR error;
char *pold_pass=NULL;
char *pnew_pass=NULL;
char *pconfirm=NULL;
char old_pass[51];
char new_pass[51];
char confirm[51];
long int ret;
BOOL ret2;
memset(&pr_info,0,sizeof(DM_PROJECT_INFO));
memset(&dir_info,0,sizeof(DM_DIRECTORY_INFO));
//this line is necessary when you want to have a realy modal message box
Handle = FindWindow("PDLRTisAliveAndWaitsForYou",NULL);
//Get the differents strings old, new password and confirmation
pold_pass=GetPropChar(lpszPictureName,"IOField_OldPassWord","OutputValue");
pnew_pass=GetPropChar(lpszPictureName,"IOField_NewPassWord","OutputValue");
pconfirm=GetPropChar(lpszPictureName,"IOField_Confirmation","OutputValue");
strncpy(old_pass,pold_pass,50);
strncpy(new_pass,pnew_pass,50);
strncpy(confirm,pconfirm,50);
//if the new password and the confirmation are not the same display a message in a modal messagebox ret = strcmp(pnew_pass,pconfirm);
if (ret)
MessageBox (Handle, "输入密码不一致!", "请重新输入", MB_OK |
MB_ICONEXCLAMATION | MB_SYSTEMMODAL);
else
{
// if the new and the old password are the same display a message in a modal messagebox
if (!strcmp(pnew_pass,pold_pass))
{
MessageBox (Handle, "新密码和旧密码不能相同", "请重新输入密码", MB_OK | MB_ICONEXCLAMATION | MB_SYSTEMMODAL);
}
else
{
// this 2 lines are necessary to get the DSN-Name of the project
ret2=DMGetRuntimeProject(pr_info.szProjectFile,sizeof(pr_info.szProjectFile),NULL);
ret2=DMGetProjectInformation(pr_info.szProjectFile,&pr_info,NULL);
//connect to the Database with the DSN-Name contained in the pr_info-Structure
PWGENConnect (pr_info.szDSNName,&error);
// Change the password from Old_pass to New_pass of the user @CurrentUser
ret2=PWGENChangePassword
(GetTagChar("@CurrentUserName"),old_pass,new_pass,&error);
if (!ret2)
{
// when a password of another user is given, display a message in a modal messagebox
MessageBox (Handle, "请检查用户名密码!", "请重新输入密码", MB_OK |
MB_ICONEXCLAMATION | MB_SYSTEMMODAL);
}
else
{
// Disconnect from the Database
PWGENDisconnect(&error);
SetVisible("start.pdl","PictureWindow1",0); //hide the window "ChangePassword"
MessageBox (Handle, "密码已修改", "确定", MB_OK |
MB_SYSTEMMODAL);。