4InTouchHMI软件的应用.docx
4InTouchHMI软件的应用(动力工段自控系统改造)工程中的应用。摘要:本文介绍的是InTouch在某醋酸纤维有限公司(动力工段自控系统改造)工程中的应用。关键词:intouch1.系统简介(动力工段自控系统改造)工程是对南纤公司原有动力工段的自控系统进展改造和优化。目的是充分利用原有软硬件资源,用最少的投入获得高效、平安的系统性能。原动力工段包括:化水车间、冷冻空压车间简称动力车间、软水站及一二泵房车间,各自拥有自己的控制室。改造前,化水车间已采用了一套SIEMENSTI545PLC和两台全点的INTOUCH操纵站实现监控,泵房车间也已采用了一套SIEMENSTI545PLC和两台256点的INTOUCH操纵站实现监控,动力车间除5台压缩空气枯燥器采用GE90-30PLC控制外其余设备的监控均用盘装仪表实现。原动力工段系统构造如下列图所示。改造前的系统构造系统改造后,泵房车间和动力车间由原泵房车间的SIEMENSTI545PLC控制需增加一些卡件,化水车间在原系统根底上增加一些功能。将原有的两台全点INTOUCH和一台256点INTOUCH移入新设的集中控制室,实现三个车间的集中监控,在化水车间设一台256点INTOUCH操纵站,供现场巡回检查时使用。同时系统通过一台新设的数据及Web效劳器与公司治理网连接,公司和工段治理者可通过公司区域网获取消费经过的数据和报表。改造后的系统构造2系统功能及特点2.1冗余的总线及操纵站系统包含2台全点的INTOUCHSERVER1、SERVER2和2台256点的INTOUCHCLIENT1、CLIENT2,SERVER1、SERVER2分别通过各自的TIWAY卡与化水、泵房的PLC构成两条冗余的TIWAY总线。CLIENT1、CLIENT2那么通过远程变量访问某台全点INTOUCH上的数据进而实现对现场的监控。通常CLIENT1、CLIENT2只与SERVER1、SERVE2中的一台通讯,当发生通讯故障时会自动尝试与另一台SERVER连接。INTOUCH中的“通讯状态画面显示了各工作站、PLC及总线的当前状态。图中红线表示操纵站在线,黑色表示离线。在CLIENT1、CLIENT2的“通讯状态画面中,工程师可以手动切换CLIENT与SERVER的连接。2.2“瘦操纵站形式256点的CLIENT通过远程变量访问全点的SERVER进而访问PLC,这样CLIENT的变量配置不超过256点。同时系统运用了“分布式报警和“分布式历史趋势等功能,所有的报警记录及历史趋势都存储在全点的SERVER上,CLIENT上显示的报警和历史趋势是从SERVER上获得的。可以讲,SERVER充当了INTOUCH效劳器而CLIENT是一个INTOUCH客户端,只需较低的配置即可。当切换SERVER时,“分布式报警和“分布式历史趋势也随着自动切换。1“分布式报警的设置在INTOUCH组态中需用“分布式报警控件,在控件的报警查询栏中输入“SERVER1INTOUCH!DONGLI,SERVER1为缺省连接的计算机名,DONGLI表示INTOUCH中的DONGLI报警组报警组包括DONGLI、HS。在SERVER的计算机属性需选中“本机将提供报警;而在CLIENT的计算机属性中需选中“本机将显示报警。运行时CLIENT将通过函数切换与SERVER的连接。为了统一报警设置,我们将报警做在PLC的报警模块中通过对PLC变量“AHA报警上限、AHHA报警上上限、ALA报警下限、ALLA报警下下限、APV报警经过值、AVF报警状态字的读写来判定和设置报警。有报警发生时,只有SERVER会将报警信息写入报警记录,SERVER2在写报警信息前先判定SERVER1是否在运行,以免重复写入。2“分布式历史趋势的设置以SERVER1为例在SERVER的INTOUCH组态中需将历史数据的存放途径设为INTOUCH默认途径。CLIENT的INTOUCH组态需在“分布式名称治理器中的“分布式历史里添加一项,供给器名称为“SERVER1,途径为“SERVER1DNCFC2000S1工程途径即可。在CLIENT中访问SERVER1的历史数据需写成“SERVER1.TAGNAME。SERVER2的设置与SERVER1一样。3远程变量的引用在CLIENT上使用远程变量只需在变量名前加计算机名即可,无需在标记名字典中新建变量,所以不占点数。SERVER:TAGNAME4自动切换功能CLIENT通过远程变量观察SERVER上的$Second变量,假设它在在一段时间内无变化那么说明与SERVER的连接出现问题,这时可通过SetAccessName函数将CLIENT上的远程变量切换到另一台SERVER上。2.3公用的操纵窗口系统中对于具有一样操纵接口设备使用了公用的操纵窗口,而不是对应每个设备都创立一个操纵窗口,这样大大减少了窗口的数目。实现它需要用到间接变量,可以将间接变量看作一个指针,当对某个设备操纵时,利用间接变量指向操纵变量,这样,对间接变量的赋值就会作用到操纵变量上,操纵变量的变化也会反响到间接变量上。以过滤水泵为例,在过滤水处理系统中,点击3#过滤泵,弹出操纵窗口,如下列图所示:3#过滤泵的操纵变量为“RUN-3#GLB启动、“STOP-3#GLB停顿、“RL-3#GLB反应、“AUTO-3#GLB自动、“REPAIR-3#GLB检修点击过滤泵时执行语句:DL_START.NAME=RUN-3#GLB.NAME;DL_STOP.NAME=STOP-3#GLB.NAME;DL_RL.NAME=RL-3#GLB.NAME;AUTO.NAME=AUTO-3#GLB.NAME;DL_REPAIR.NAME=REPAIR-3#GLB.NAME;“DL_XXX为间接变量。在操纵窗口中只需对间接变量赋值即可。例如在“启动按钮的动作属性中写到:IFDL_START.Name"NULL"ANDDL_STOP.Name"NULL"THENDL_START=1;DL_STOP=0;Record=DL_START.Comment;SQLInsertConnectionId,"CortrolLog","CortrolLog"/写操纵纪录ELSEIFDL_START.Name="NULL"THENDL_STOP=0;Record=StringLeftDL_STOP.Comment,StringLeDL_STOP.Comment/2;SQLInsertConnectionId,"CortrolLog","CortrolLog"ELSEDL_START=1;Record=StringLeftDL_START.Comment,StringLenDL_START.Comment/2;SQLInsertConnectionId,"CortrolLog","CortrolLog"ENDIF;ENDIF;由于设备的启停一般有两种:1.启动与停顿是一个输出;2.启动与停顿是两个输出。为一个输出时我们将输出变量的COMMENT属性写为“XXX启动XXX停顿这样,在写操纵记录时需取COMMENT的左一半或者右一半;假设为两个输出时,变量的COMMENT将为“XXX启动或者“XXX停顿,写记录时取对应变量的COMMENT即可。CLIENT的情况比拟特殊,由于CLIENT需用间接变量指向远程变量,而远程变量的COMMENT无法赋给间接变量的COMMENT,所以为了在公用窗口中获得远程变量的COMMENT我们只能利用间接变量的NAME即远程变量的NAME在数据库中查找到COMMENT,再写操纵记录。语句如下:写记录的操纵参见“数据库的应用。IFDL_START.Name"NULL"ANDDL_STOP.Name"NULL"THENDL_START=1;DL_STOP=0;Record=StringRightDL_START.Name,StringLenDL_START.Name-7;SQLSelectConnectionId,"COMM","COMMENT","device_id="+""+Record+"",""/查找COMMENTSQLFirstConnectionId;Record=StringTrimCOM,3;SQLEndConnectionId;SQLInsertConnectionId,"CortrolLog","CortrolLog"/写操纵纪录ELSEIFDL_START.Name="NULL"THENDL_STOP=0;Record=StringRightDL_STOP.Name,StringLenDL_STOP.Name-7;SQLSelectConnectionId,"COMM","COMMENT","device_id="+""+Record+"",""SQLFirstConnectionId;Record=StringTrimCOM,3;Record=StringLeftRecord,StringLenRecord/2;SQLEndConnectionId;it168SQLInsertConnectionId,"CortrolLog","CortrolLog"ELSEDL_START=1;Record=StringRightDL_START.Name,StringLenDL_START.Name-7;SQLSelectConnectionId,"COMM","COMMENT","device_id="+""+Record+"",""SQLFirstConnectionId;Record=StringTrimCOM,3;Record=StringLeftRecord,StringLenRecord/2;SQLEndConnectionId;SQLInsertConnectionId,"CortrolLog","CortrolLog"ENDIF;ENDIF;2.4数据库的应用系统中的IBM效劳器作为数据存储和发布的效劳器,安装了SQLSERVER2000,系统的报警历史记录和操纵记录以及设备档案都存放在名为“DL的数据库中。2.4.1ODBC的连接INTOUCH通过ODBC访问SQLSERVER,在ODBC中建扬名为“DL的用户DSN,在INTOUCH中用语句:SQLConnectConnectionId,"DSN=DL";建立连接,假设连接成功那么ConnectionId>0。在执行每一条SQL语句时都会有一个返回值,假设返回值为0那么表示执行成功,否那么表示与数据库连接不正常,需重新建立连接。为了时刻检测与数据库效劳器的连接情况,在应用程序脚本中每5秒钟执行一条查询语句:IFResultCode=0THENResultCode=SQLSelectConnectionId,"SYSUSERS","SYSUSERS","UID=0","";ENDIF;同时在条件脚本中判定ResultCode即返回值假设ResultCode0那么断开连接:SQLDisconnectConnectionId;ConnectionId=0;SHOW“通讯状态;翻开“通讯状态画面,显示信息“与效劳器连接失败!及“重试、“取消两个按钮。按“重试,置位系统将每20秒进展一次尝试连接:IFRETRY=1THENResultCode=SQLConnectConnectionId,"DSN=DL";ENDIF;直到ResultCode=0为止。尝试连接时系统将变得很忙。假设想取消连接,那么按“取消按钮,系统将不再与效劳器连接,对现场的监控可以正常进展,但操纵与报警记录都将不写入效劳器数据发布不受影响。希望重新连接效劳器时,只需在“通讯状态画面下按“重试按钮即可。2.4.2绑定列表在全点INTOUCH中需建立四个绑定列表:“alarmhis,“cortrolog,“device,“sysusers分别对应数据库中的表格。“sysusers只是为了检查ODBC连接用的,并无其他用途。在每个列表中用变量与各字段相对应,如“cortrolog中变量“DATETIME对应字段“DATETIME;变量“$OPERATER对应字段“USERNAME;变量“RECORD对应字段“RECORD等。在写记录前,只需先对变量复值,再执行语句:SQLInsertConnectionId,"CortrolLog","CortrolLog";查询记录时,首先预备一个查询条件,例如在“稀矾池液位的动作脚本中有以下语句DEVICE_ID=LT51027.Name;ShowAt"设备档案",$ObjHor+200,$ObjVer+50;SQLSelectConnectionId,"DevICE","DevICE","Device_ID="+""+device_id+"",""SQLFirstConnectionId;首先将要查询的设备名LT51027赋给DEVICE_ID。“SQLSelect语句实际上执行了一条SQL语句:SELECTFROMDEVICEWHEREDEVICE_ID=LT51027后将查询到的记录的字段值赋给绑定列表中的变量。这样在设备档案中里,只要放上绑定列表中的变量就能显示查询的结果了。下列图为从数据库中查到的设备LT51027的信息。3治理层应用程序有了数据库中的“操纵记录、“报警记录和“设备档案,可以方便的开发治理层应用程序。下列图是用Delphi开发的一个客户端软件,用来查询记录及维护设备档案,它可以运行在工程师的PC上。另外,利用Intouch的NETDDE功能,可将消费数据实时地通过第三方软件进展发布,这里涉及更多的软件编程技术,就不在深化了。下列图为将数据以WEB的方式进展发布。以上的数据库及WEB功能也可以通过IndustrialSQLSever和SuiteVoyager实现,以上的应用可以讲明InTouch无论在脚本和第三方软件的接口方面都是非常灵敏的。在过去,组态软件往往只针对下位机,一个控制系统通常与外界隔离,成为信息孤岛,使用Intouch可以做到车间层与治理层的严密结合,治理者可以在办公室里阅读到消费一线的数据,使企业以更高的效率进展消费和治理。