一、前言
INTOUCH是由美国WonderWare公司开发的组态软件,它具有非常强大的监控功能。比如,数据采集和数据管理功能、动态数据交换功能、在线和历史趋势图、报警和事件自动记录功能、各种安全措施、实时SQL/ODBC与各数据库接口等等。用它来设计工业监控系统时,组态简单,可选的组件和图形丰富,可以设计出各种功能完善且很优美的操作界面。正因为如此,目前它已广泛应用于多种工程领域,INTOUCH组态软件本身也正在迅速发展壮大。其大部分功能可由各种函数和软件包来实现,设计得只需进行简单的调用即可。比如,它有多种画笔用来绘制变量的历史趋势曲线、有专门控件自动记录并显示实时或历史报警等。在某市邮电局电源、空调及环境监控系统的设计工作中,我们采用了INTOUCH组态软件设计监控界面。在工作的过程中,除充分体会到其优点外,也发现,至少目前而言,它在某些方面还有不够完善的地方,比如在用它来设计查询工作站时,就发现它还缺少功能比较完善的控件来实现数据库的查询。虽然它提供了不少SQL函数及某些控件可以实现对数据库访问的各种功能,但由于采用这些函数及SQL语句来书写查询表达式时比较复杂,弄不好常常出错,尤其是在查询条件很多的情况下更是如此。因此,专用查询模块的存在显得非常重要。现利用编程语言(C语言)、SQL函数些控件,开发一类较为实用的查询模块。
二、查询模块设计
事例:设想用户要查询某某局某操作者在一段时间内进行的操作。假定在数据库中有一操作记录表(OperateTable)如表1所示。
表1
ID WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) |
Station ——可——编——程——控-制-器-技——术——门——户 |
Operator WWW_PLC※JS_COM-PmLC-技.术_网 |
Content P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 |
Time WWW_P※LCJS_CO※M-PLC-技-.术_网 |
1 WWW_PLCJS@_COM%-PLC-技.术_网 |
一厂 WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
Admistrator WWW_P※LCJS_CO※M-PLC-技-.术_网 |
启动一号油机 WW.W_PLCJS_COM-PLC-技.术_网 |
1999/1/10 W1WW_P4LCJS_COM-PLC-技.术_网 |
2 WWW_PLCJS_COM-PLC-技.术_网 |
二厂 WWW_PL※CJS_COM-PLC-技.术_网 |
Jack WWW_PLCJS_COM-PLC-技.术_网 |
打开一号空调 WWcW_PLCJS_COM-PLC-技.术_网 |
1999/3/9 WWW_PLCJS@_COM%-PLC-技.术_网 |
… P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户 |
… WWW_P※LCJS_CO※M-PLC-技-.术_网 |
… WWW_PLCJS_COM-PLC-技.术_网 |
… WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户) |
… P.L.C.技.术.网——可编程控制器技术门户 |
表中列名含义如下:ID—序号;Station—局站名(操作针对某局设备进行);Operator—操作者;Content—操作内容;Time—操作时间。
设计分三部进行,各查询条件的输入,多条件组合表达式的形成、查询表达式及查询结果显示。
1、各查询条件的输入
考虑到系统今后扩展的需要,以及用户操作的方便性,对查询条件的输入采用“鼠标自动选择”与“键盘直接输入”相结合的方式。
在数据库中先制定了一个局名列表(Station Table),形式如表2所示,此表记录了所有的局站,用于“鼠标自动选择”功能。
表2
ID WWW_PL※CJS_COM-PLC-技.术_网 |
Station WWW_P※LCJS_CO※M-PLC-技-.术_网 |
1 WW.W_PLCJS_COM-PLC-技.术_网 |
一厂 WWW_PL※CJS_COM-PLC-技.术_网 |
2 WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
二厂 WWW_PLCJS@_COM%-PLC-技.术_网 |
3 WWW_P※LCJS_COM-PLC-)技.术_网 |
三厂 WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户) |
… WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
… WW.W_PLC※JS_C,OM-PL,C-技.术_网 |
设计的条件输入操纵块如图1所示。
图1
图中空白框既可以显示,也可以用于输入。
用户既可以用鼠标点“选择局名”键,而后点“上一项”点“下一项”键实现自动选择,也可以直接在框中输入要选择的局名。选择或输入的结果赋给串标记Quest1.操作者、起始时间和截止时间由于不确定性因素很大,故采用“键盘直接输入”方式。其结果分别赋给串标记Quest2、Quest3、Quest4。如果用户对某一项没有要求,则置相应框为空白。
采用这种“鼠标自动选择”的方式,不太熟悉的用户可以很方便的查到局站名。而当工程发生变化,要修改或增加监控的单位时,只需将新的单位名输入“局站名列表”即可。这种编程的思想在工程扩容时,显得非常有用。
2、多条件组合表达式的形成
在依次判断各种查询条件是否存在的基础上,附上“>”,“<”“=”,“and”,“or”等逻辑符号,形成多条件组合表达式,步骤如下:
(1)令QuestExpr=“”(置查询表达式为空串)。
(2)判Quest1为空值否?若不为空,则QuestExpr赋值为Station=Quest1;若为空,QuestExpr不变(不作处理,以下类同)。
(3)判QuestExpr为空值否?若为空,判Quest2,若Quest2不为空值,则QuestExpr赋值为Operator=Quest2;若不为空,判Quest2,若Quest2不为空值,则QuestExpr赋值为Station=Quest1 and Operator=Quest2.
(4),(5),此两步类似于(3)步。
3、查询表达式及查询结果显示
本设计采用名为#CrystalReport的ActiveX控件显示查询结果,执行函数为#CrystalReport.sol=“select*from Operate Table where”+QuextExpr;最后对于本事例可形成类似如下的查询表达式:
图2
三、结语
在程序的设计过程中,有些细节问题应引起注意。比如,在INTOUCH中各串代码的长度不得超过131个字符,为了使查询表达式的长度不超过此限制,程序中必须作相应处理,比如,缩短时间表达式等。另外还必须保留用户完全自主输入查询表达式的权利,从而实现要求更全面或更独特的查询,本模块即具有此功能。
本查询模块具有查询方式多样、可扩充性强、功能完备而又操作简便等特点。