Intouch在烟草行业自动化领域中的应用

供稿:工控网

  • 关键词:intouch,工控,组态软件,数据采集
  • 作者:杭州傲能自动化科技有限公司 傅庆宜

[摘要] 本文介绍在南通醋酸纤维有限公司《动力工段自控系统改造》项目中,分布式Intouch的应用,以及Intouch与SQLSERVER2000和其它应用程序共同组建整个管控系统。另外还介绍了一些Intouch组态的技巧。

1.系统简介
《动力工段自控系统改造》项目是对南纤公司原有动力工段的自控系统进行改造和优化。目标是充分利用原有软硬件资源,用最少的投入获得高效、安全的系统性能。
原动力工段包括:化水车间、冷冻空压车间(简称动力车间)、软水站及一二泵房车间,各自拥有自己的控制室。改造前,化水车间已采用了一套SIEMENS TI545 PLC和两台全点的INTOUCH操作站实现监控,泵房车间也已采用了一套SIEMENS TI545 PLC和两台256点的INTOUCH操作站实现监控,动力车间除5台压缩空气干燥器采用GE 90-30PLC控制外其余设备的监控均用盘装仪表实现。原动力工段系统结构如下图所示。



系统改造后,泵房车间和动力车间由原泵房车间的SIEMENS TI545 PLC控制(需增加一些卡件),化水车间在原系统基础上增加一些功能。将原有的两台全点INTOUCH和一台256点INTOUCH移入新设的集中控制室,实现三个车间的集中监控,在化水车间设一台256点INTOUCH操作站,供现场巡回检查时使用。同时系统通过一台新设的数据及Web服务器与公司管理网连接,公司和工段管理者可通过公司区域网获取生产过程的数据和报表。



2.系统功能及特点
2.1冗余的总线及操作站
系统包含2台全点的INTOUCH(SERVER1、SERVER2)和2台256点的INTOUCH(CLIENT1、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组态中需用“分布式报警”控件,在控件的报警查询栏中输入“\\SERVER1\INTOUCH!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”,路径为“\\SERVER1\D\NCFC2000S1”(工程路径)即可。在CLIENT中访问SERVER1的历史数据需写成“SERVER1.TAGNAME”。SERVER2的设置与SERVER1相同。
3.远程变量的引用
在CLIENT上使用远程变量只需在变量名前加计算机名即可,无需在标记名字典中新建变量,所以不占点数。(SERVER:TAGNAME)
4.自动切换功能
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”为间接变量。在操作窗口中只需对间接变量赋值即可。例如在“启动”按钮的动作属性中写到:
IF DL_START.Name<>"NULL" AND DL_STOP.Name<>"NULL" THEN
DL_START=1;
DL_STOP=0;
Record=DL_START.Comment;
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" ); //写操作纪录
ELSE
IF DL_START.Name = = "NULL" THEN
DL_STOP=0;
Record=StringLeft( DL_STOP.Comment, StringLen( DL_STOP.Comment )/2 );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ELSE
DL_START=1;
Record=StringLeft( DL_START.Comment, StringLen( DL_START.Comment )/2 );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ENDIF;
ENDIF;
因为设备的启停一般有两种:1.启动与停止是一个输出;2.启动与停止是两个输出。为一个输出时我们将输出变量的COMMENT属性写为“XXX启动XXX停止”这样,在写操作记录时需取COMMENT的左一半或右一半;若为两个输出时,变量的COMMENT将为“XXX启动”或“XXX停止”,写记录时取对应变量的COMMENT即可。
CLIENT的情况比较特殊,因为CLIENT需用间接变量指向远程变量,而远程变量的COMMENT无法赋给间接变量的COMMENT,所以为了在公用窗口中获得远程变量的COMMENT我们只能利用间接变量的NAME(即远程变量的NAME)在数据库中查找到COMMENT,再写操作记录。语句如下:(写记录的操作参见“数据库的应用”。注意:以下中文单引号请替换为英文单引号)
IF DL_START.Name<>"NULL" AND DL_STOP.Name<>"NULL" THEN
DL_START=1;
DL_STOP=0;
Record=StringRight( DL_START.Name ,StringLen( DL_START.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" ); //查找COMMENT
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" ); //写操作纪录
ELSE
IF DL_START.Name=="NULL" THEN
DL_STOP=0;
Record=StringRight( DL_STOP.Name ,StringLen( DL_STOP.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" );
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
Record=StringLeft( Record, StringLen( Record )/2 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ELSE
DL_START=1;
Record=StringRight( DL_START.Name ,StringLen( DL_START.Name )-7 );
SQLSelect( ConnectionId, "COMM", "COMMENT", "device_id="+"’"+Record + "’" , "" );
SQLFirst( ConnectionId );
Record=StringTrim( COM, 3 );
Record=StringLeft( Record, StringLen( Record )/2 );
SQLEnd( ConnectionId );
SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );
ENDIF;
ENDIF;

2.4数据库的应用
系统中的IBM服务器作为数据存储和发布的服务器,安装了SQL SERVER 2000,系统的报警历史记录和操作记录以及设备档案都存放在名为“DL” 的数据库中。
2.4.1 ODBC的连接
INTOUCH 通过ODBC访问SQL SERVER,在ODBC中建立名为“DL”的用户DSN,在INTOUCH中用语句:
SQLConnect( ConnectionId, "DSN=DL");
建立连接,若连接成功则ConnectionId > 0 。在执行每一条SQL语句时都会有一个返回值,若返回值为0则表示执行成功,否则表示与数据库连接不正常,需重新建立连接。为了时刻检测与数据库服务器的连接情况,在应用程序脚本中每5秒钟执行一条查询语句:
IF ResultCode

发布时间:2003年10月20日 13:49  人气:  
更多内容请访问(工控网
相关链接

我有需求