浅谈4InTouchHMI软件的应用方法

时间:2011-07-26

  本文介绍的是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上获得的。

  1."分布式报警"的设置

  数据采集与监控系统在电力系统调度自动化中具有重要的地位,而其中报警子系统又是SCADA系统中至关重要的部分。该子系统在报警发生时,能以丰富、恰当的表现手段让调度人员快速掌握系统状态,加快决策,缩短故障恢复时间。TH2100 SCADA的报警子系统,通过多线程和网络通信技术的运用,实现了分布式报警,在数据库中计算机、调度员和电力设备的属性中引入了所属范围,从而实现了报警信息的过滤,并且扩充性好,配置灵活,查询方便。现场应用也很成功。TH2100 SCADA分布式报警子系统采用了这些技术。

  数据采集,是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程。数据采集结合基于计算机的测量软硬件产品来实现灵活的、用户自定义的测量系统。数据采集的目的是为了测量电压、电流、温度、压力或声音等物理现象。基于PC的数据采集,通过模块化硬件、应用软件和计算机的结合,进行测量。尽管数据采集系统根据不同的应用需求有不同的定义,但各个系统采集、分析和显示信息的目的却都相同。数据采集系统整合了信号、传感器、激励器、信号调理、数据采集设备和应用软件。

    监控系统主要由前端监视设备、传输设备、后端控制显示设备这三大部分组成,其中后端设备可进一步分为中心控制设备和分控制设备。前、后端设备有多种构成方式,它们之间的联系(也可称作传输系统)可通过电缆光纤或微波等多种方式来实现。

  在INTOUCH 组态中需用"分布式报警"控件,在控件的报警查询栏中输入"\\SERVER1\INTOUCH!DONGLI",SERVER1 为缺省连接的计算机名,DONGLI 表示INTOUCH 中的DONGLI 报警组。在SERVER 的计算机属性需选中"本机将提供报警";而在CLIENT 的计算机属性中需选中"本机将显示报警".运行时CLIENT 将通过函数切换与SERVER 的连接。

  为了统一报警设置,我们将报警做在PLC 的报警模块中通过对PLC 变量"AHA、AHHA、ALA、ALLA、APV、AVF"的读写来判断和设置报警。有报警发生时,只有SERVER 会将报警信息写入报警记录,SERVER2 在写报警信息前先判断SERVER1是否在运行,以免重复写入。

  2."分布式历史趋势"的设置

  在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, StringLe(DL_STOP.Comment )/2 );

  SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );

  ELSE

  DL_START=1;

  Record=StringLeft( DL_START.Comment, StringLen(DL_START.Comment )/2 );

  SQLInsert:

  ENDIF;

  ENDIF;

  因为设备的启停一般有两种:1.启动与停止是一个输出;2.启动与停止是两个输出。为一个输出时我们将输出变量的COMMENT 属性写为"XXX 启动XXX 停止"这样,在写操作记录时需取COMMENT 的左一半或右一半;若为两个输出时,变量的COMMENT 将为"XXX 启动"或"XXX 停止",写记录时取对应变量的COMMENT即可。

  CLIENT 的情况比较特殊,因为CLIENT 需用间接变量指向远程变量,而远程变量的COMMENT 无法赋给间接变量的COMMENT,所以为了在公用窗口中获得远程变量的COMMENT 我们只能利用间接变量的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;

  Recor d=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的连接

  开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准。开放数据库互连定义了访问数据库的API一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言(但是MICROSOFT的ODBC文档是用C语言描述的,许多实际的ODBC驱动程序也是用C语言写就的。)ODBC规范后来被X/OPEN和ISO/IEC采纳,作为SQL标准的一部分,具体内容可以参看《ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)》等相关的标准文件。

  INTOUCH 通过ODBC 访问SQL SERVER,在ODBC 中建立名为"DL"的用户DSN,在INTOUCH 中用语句:

  SQLConnect( ConnectionId, "DSN=DL");

  建立连接,若连接成功则ConnectionId > 0 .在执行每一条SQL 语句时都会有一个返回值,若返回值为0 则表示执行成功,否则表示与数据库连接不正常,需重新建立连接。为了时刻检测与数据库服务器的连接情况,在应用程序脚本中每5 秒钟执行一条查询语句:

  IF ResultCode = = 0 THEN

  ResultCode = SQLSelect(ConnectionId , "SYSUSERS" ,"SYSUSERS","UID=0", "" );

  ENDIF;

  同时在条件脚本中判断ResultCode (即返回值)若ResultCode <> 0 则断开连接:

  SQLDisconnect( ConnectionId );

  ConnectionId = 0;

  SHOW "通讯状态";

  打开"通讯状态"画面,显示信息"与服务器连接失败!"及"重试"、"取消"两个按钮。按"重试",置位系统将每20 秒进行尝试连接:

  IF RETRY = = 1 THEN

  ResultCode = SQLConnect( ConnectionId, "DSN=DL");

  ENDIF;

  直到ResultCode = 0 为止。

  尝试连接时系统将变得很忙。若想取消连接,则按"取消"按钮,系统将不再与服务器连接,对现场 的监控可以正常进行,但操作与报警记录都将不写入服务器(数据发布不受影响)。希望重新连接服务器时,只需在"通讯状态"画面下按"重试"按钮即可。

  2.4.2 绑定列表

  在全点INTOUCH 中需建立四个绑定列表:"alarmhis","cortrolog","device","sysusers"分别对应数据库中的表格。在每个列表中用变量与各字段相对应,如"cortrolog" 中变量"DATETIME" 对应字段"DATETIME" ;变量"$OPERATER"对应字段"USERNAME" ;变量"RECORD"对应字段"RECORD"等。在写记录前,只需先对变量复值,再执行语句:

  SQLInsert( ConnectionId, "CortrolLog", "CortrolLog" );

  即可。

  查询记录时,首先准备一个查询条件,例如在"稀矾池液位"的动作脚本中有以下语句

  DEVICE_ID= LT51027.Name;

  ShowAt("设备档案",$ObjHor +200, $ObjVer +50);

  SQLSelect( ConnectionId , "DevICE" , "DevICE" , "Device_ID=" + "'"+ device_id +"'" , "" );

  SQLFirst( ConnectionId );

  首先将要查询的设备名(LT51027)赋给DEVICE_ID.

  "SQLSelect"语句实际上执行了一条SQL 语句:

  SELECT * FROM DEVICE WHERE DEVICE_ID = 'LT51027'

  后将查询到的记录的字段值赋给绑定列表中的变量。这样在设备档案中里,只要放上绑定 列表中的变量就能显示查询的结果了。下图为从数据库中查到的设备' LT51027'的信息。

  3 管理层应用程序

  有了数据库中的"操作记录"、"报警记录"和"设备档案",可以方便的开发管理层应用程序。下图是用Delphi 开发的一个客户端软件,用来查询记录及维护设备档案,它可以运行在工程师的PC 上。

  另外,利用Intouch 的NETDDE 功能,可将生产数据实时地通过第三方软件进行发布,这里涉及更多的软件编程技术,就不在深入了。下图为将数据以WEB 的方式进行发布。

  结束语

  以上的数据库及WEB 功能也可以通过IndustrialSQL Sever 和SuiteVoyager 实现,在过去,组态软件往往只针对下位机,一个控制系统通常与外界隔离,成为信息孤岛,使用Intouch 可以做到车间层与管理层的紧密结合,管理者可以在办公室里浏览到生产一线的数据,使企业以更高的效率进行生产和管理。


  
上一篇:LED背光电视,看得到的精彩
下一篇:教你保证高速拉丝下的光纤强度的方法

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料