产品线频道   >
机器人| PLC| 低压变频器| DCS| 人机界面| 现场总线| 运动控制| 高压变频器| 电机| PAC| 现场仪表| PC-BASED| 机械传动| 传感器

HoneywellTDC3000CL/AM程序设计在罐区计量中的应用

  • 作者:中国石化广州分公司信息仪控中心 王雨辰
  • 阅读人次:
  • 发布时间:2006-05-23
 摘要:
  Honeywell TDC3000系统的CL/AM程序设计在复杂运算方面能力突出,在罐区储量计量中能力卓越,本文在这方面有详细阐述并且提供另一种近似计算方法和程序源码,并且利用到了面向对象程序设计方法的设计思想。

关键词:
  CL/AM,程序设计,罐区、储量、计算、程序源码、面向对象

引言:
  CL/AM程序设计是Honeywell TDC3000 DCS系统中一个运算功能强大的工具。在DCS系统中有一部分复杂算法是标准测量算法无法实现的,这是就要借助CL/AM程序设计语言来实现。化工区乙烯罐区乙烯丙烯的储量计算就是应用此法。

1、 CL语言的分类
CL语言可分为CL/MC、CL/PM、CL/AM三种设计方法:
(1)、CL/MC既是应用于多功能控制器(Multifunction control)的控制语言;
(2 )、CL/PM既是应用于过程管理器(Process Managers)的控制语言;
(3 )、CL/AM既是应用于应用模块(Application Module)的控制语言,其主要参与连续控制的应用。
而本文主要涉及CL/AM的应用。

2、 CL/AM的功能及方法
  基于AM的CL程序适用于较大规模程序及大量数据支持的应用。由于这一点,就需要得到数据库的支持,而这个数据库就包含了DCS系统中所有的数据点。
在DCS系统中,如果标准数据点处理功能或者标准PV或控制算法不能提供所需求的有效算法,即:
(1)、标准PV算法不能提供所需求的足够的算法和逻辑,那么在建立数据点时设定PVALGID= CL并将CL/AM程序连接来代替标准PV算法;
(2)、标准控制算法不能满足所需求的控制动作,那么在建立该数据点时,设参数CTLALGID=CL并将相应CL/AM程序连接来代替标准控制算法;
(3)、CL/AM程序也能被连接到,例如Regulatory Control、Custom或Switch类型的数据点上来扩大数据点的处理功能。
3、 CL/AM程序的结构
一个完整的CL/AM结构如下:
PACKAGE
CUSTOM — —参数声明区
----------------------------------------
----------------------------------------
END CUSTOM
BLOCK 块名 (作用范围;AT 代替算法)
---------------------------------------- — —程序代码区
---------------------------------------
END 块名
END PACKAGE

4、 CL/AM程序在乙烯罐区储量计算中的应用
4.1、设计思路:
  因为在罐区的储罐为非完全标准球罐,很难在数据点的标准PV算法中计算出其实时的储量,即根据球罐的实时液位及密度等参数来计算出罐内液体的质量。所以在实际的运用中DCS采用了CL/AM程序来代替AM Regulatory点的PVALGID算法。乙烯罐区9501A、9501B两罐的罐内液体质量计算即用CL/AM程序来实现。在这里,罐内液体的密度是0.442。程序设计思路如下,在积分学中为了计算某一不规则图形的面积或体积时会将其细分为若干个近似规则的有可遵循计算方法的小图形来计算,之后再集合成该图形的面积或体积,当然分的越细则越精确。设下图为不规则图形:


  我们可以将其划分为n个高为h,宽为dn的方形来计算,n决定其精度。而9501A、B罐的CL/AM计算质量程序就采用此思路。将球罐等高度划分为143段,计算出每个高度所对应的体积并将其放入数组中。实时的液位高度将在143段的某两段之间或等于某一段,然后根据该段的体积数Vn加两段之间按比例计算的V` 得出总的体积,继而根据密度计算出罐的储量。

4.2程序结构图:



4.3 程序部分源代码及代码注释:
  本例是DCS中9501A、B两罐的储量计算公式。两罐的规格相同,则在同一个CL/AM程序中一起计算,结果外送到数据点MI9501A.PV和MI9501B.PV。部分程序源代码如下:
PACKAGE CUSTOM(NOT BLD_VISIBLE) ——数据段声明开始;
PARAMETER MIN:ARRAY(1..144) —— 包含143段体积数的数组;
VALUE (0.0,0.224,. . . ,1531.115) —— 每一层对应的体积,略去141个数组值;PARAMETER LI:ARRAY(1.. 10) — —中间数组,保存临时用到的高度;
PARAMETER MI:ARRAY(1..10) — —中间数组,保存用到的储量和密度;
END CUSTOM— —数据段声明结束;

BLOCK MC302(POINT MC302;AT PV_ALG) — —程序块开始,绑定在MC302上;
EXTERNAL LI9501A_30, LI9501B_30 — —输入点液位接口;
EXTERNAL MI9501A, MI9501B — —输出点储量接口;
LOCAL I,J,K — —临时变量;
SET J=2 — — 罐的数量,即A、B罐;
SET MI(6)=0.442 — — 罐内液体的密度;
A2: LOOP FOR I IN 1 . . 5 — —变量初始化;
SET LI (I)=0.0
MI (I)=0.0
REPEAT A2
IF LI9501A_30.PV>0.0 THEN SET LI(1)=LI9501A_30.PV — —如果有液位,赋值;
IF LI9501B_30.PV>0.0 THEN SET LI(2)=LI9501B_30.PV — —同上;
A1: LOOP FOR I IN 1 . . J — —储量的计算过程,A、B两罐;
IF LI(I)=0.0 THEN GOTO A3 — —如果没有液位则跳转,按体积为零计算;
IF LI(I)>=14.30 THEN SET LI(I)=14.30 — —如果超满液位则按体积为满计算;
SET K=INT(LI(I)*10) — — 用取整函数取液位达到或超过的最近的层数;
SET LI(8)=MIN(K+2) -MIN(K+1) — — 取液位所在两层之间的体积差;
SET LI(9)=LI(I)*10 -K — — 取液位K+1和K+2层之间部分高度;
SET MI(I)=MIN(K+1)+LI(8)*LI(9) — — 计算出当前液位所对应的体积数;
A3: REPEAT A1 — —LOOP A1循环结束;
SET MI9501A.PV=MI(1)*MI(6) — —A罐储量=A罐体积*密度;
SET MI9501B.PV=MI(2)*MI(6) — —B罐储量=B罐体积*密度;

SET K=MI(1) — —A罐体积交给K;
CALL ALLOW_BAD(PVCALC,K) — —如果K值有错误,同样可以赋值,不忽略;
— —下一句K为BAD值时,绑定点的PVAUTOST模式为BAD,其他则正常模式;
SET PVAUTOST=(WHEN BADVAL(K):BAD;WHEN OTHERS:NORMAL)
END MC302
END PACKAGE


4.4 以上思路的优缺点:
  从以上思路可以看出来CUSTOM数据段是一个长为144的数组数值,是通过人工测量计算后得到的球罐143个平均高度层每层所对应的体积数,然后在写入程序时编码到源代码中。其优点是对于同一种规格的球罐来说数组值不会有变化,从而一个程序能计算多个球罐体积(但扩展时需要重新编码)。

优缺点是:
(1)、计算量大:
对于每一个分层所对应的体积数都要计算而得,这在设计阶段的计算量太大;
(2)、可维护性差:
因本例中9501A、B罐储量在一个程序中计算,且31系列的乙烯A、B、C、D和丙烯A、B、C罐也在另一个程序中一起计算(原理相同),若要对数据段数据或密度等进行维护修改,则会引起通程序中其他的储量计算出现问题;
(3)、通用性差:
因为数据段的体积数是具体的数据,所以每一种直径的罐都是不同的,那么每一种罐都需要一个单独的邨CL/AM程序来计算,增大了工作量也增加了HM的存储压力,更不利于改造时的扩展。

5、CL/AM程序在乙烯罐区中应用的面向对象程序设计优化思路
5.1.1 CL/AM程序GENERIC应用:
  这种应用适合于一批情况相似的计算应用,不必对每一个都设计出CL/AM程序,而是对相似的计算设计出一个程序来让所有其它的相似计算共同引用。不同的是在CUSTOM数据段中引用的GENERIC INPUT是不同的数据源。其中ENENRIC INPUT是在被绑定点PED端口设置NOGINPTS的值为引用的数据源的个数,这也是面向对象程序设计方法,如对9501A罐储量计算时被绑定点的部分组态如下:



5.1.2 CUSTOM数据段的应用:
  该思路中还用到密度和半径,应该也包括在CUSTOM数据段中。对于不同的半径球罐和罐内液体,可以在绑定点得PED组态时更改为相应的半径和密度。



5.1.3 计算公式: 所用到的公式如下
V = 3.1415926*LEVEL*LEVEL*(3*RADIUS-LEVEL)/3 ……….①M=V*DENSITY ………………………………………………………②
5.2 程序流程图:



5.3 设计代码及注释如下:

PACKAGE
CUSTOM - - 数据段参数声明开始
PARAMETER LEVEL “level of tank” - - 被测球罐实时液位;
PARAMETER DENSITY “density of liquid” - - 罐内液体的密度;
PARAMETER RADIUS “radius of tank” - - 球罐的半径;
END CUSTOM - - 参数声名结束;

BLOCK TANK_CALC(GENERIC; AT PV_ALG) -- 程序块开始;
LOCAL level1,diameter,V,M - - 临时变量声明,液位、直径、体积、储量;
PARAMETER PVCALC - - 返回绑定点的测量值接口;
PARAMETER PVAUTOST:PVVALST - - 返回绑定点的测量值模式接口;
SET level1=0.0 - - 临时液位变量初值;
SET diameter=2*RADIUS - - 临时直径(总高)初值;
IF LEVEL<0.0 THEN SET level1=0.0 - - 产生负值液位时,设没有液位;
IF LEVEL>diameter THEN SET level1=diameter - - 若超大液位时,设满罐;
IF (LEVEL>=0.0) AND (LEVEL<=diameter) THEN SET level1=LEVEL --液位正常;
- - 计算实时液位所达到的液体体积;
SET V=3.1415926*level1*level1*(3*RADIUS – level1)/3
- - 计算储量;
SET M=V*DENSITY
- -
CALL ALLOW_BAD(PVCALC,M) -- 输出计算储量到绑定点测量值,并错误处理;
SET PVAUTOST=NORMAL - - 设定绑定点测量工作模式为正常;
END TANK_C
END PACKAGE

5.4 绑定点的部分组态值:
绑定点为AM REGULATORY 点:


5.5 本文提供方式与原方式的比较
5.5.1 计算量:
  没有了开发时的数组计算量,实时液位所对应的体积在程序公式中得到计算,当然
  前提是球罐是标准的球形。而对于非标准的球形误差也不会比原方法大(原因是原方法在计算两层之间的体积时是按照平均来分,事实上来说两层之间也是球体的切层,用平均法有较大的误差)。

5.5.2 可维护性:
  因为没有程序中具体的量,而是通过绑定点的接口来输入输出,所以基本上不需要维护。

5.5.3 通用性:
  本程序适用于各种球罐(不同半径)中各种液体(不同密度)储量的计算。只需要在绑定点中PED设定参数(LEVEL,DENSITY,RADIUS)即可。并且本程序只需要一个拷贝就可以有多个引用,也减少了HM的存储压力。

5.6 与PV标准算法的比较:
  其实按照这种用球缺体积公式来近似的方法完全可以在PV标准算法中来实现,效果应该和本文提供的算法相同,且不用编制程序。但是公式中的计算量较大,因为APMM需要处理数据太多,而AM在程序处理方面能力较强,这样可以解放APMM,而充分发挥 AM的长处,何乐而不为呢!

5.7 与面向对象程序设计方法的比较:
  严格意义上来说工业控制与计算机程序设计是两个学科,然而随着科技的发展其界限已经越来越模糊,正如各种程序语言越来越多介入工业控制(如VB、Delphi等),现代程序设计的思想也进入到工业控制。这里我们继承的就是“面向对象”的程序设计方法,将罐作为一个“对象”,密度、半径、液位作为“属性”,储量的计算作为“方法”。本例就是将其简单封装作为所有球罐的类(程序),每一个应用就是将这个类(程序)实例化(应用)一次。所以总体来说,本文的思想就是将“面向对象”程序设计方法的思想在工业控制的程序设计中做了深化。

6、总结
  CL/AM程序是个很有用的工具,在复杂计算方式替代标准PV算法等方面能力突出。在乙烯罐区球罐储量计算的程序设计中,相比原有方法的可以减少开发时的计算量、不存在维护问题,并且通用性较强。而与数据点的PV标准算法相比可以减少APMM的负担。本文也提供了源代码以及对代码注释分析。同时对面向对象程序设计思想在工业控制程序设计中的应用做了部分深化。

参考文献:
1、 Honeywell TDC3000 系统手册;
2、 中国石化广州分公司乙烯DCS系统CL/AM程序MC302.CL源代码

●Application of the CL/AM program in ethylene tank area


Abstract:
The ability of the CL/AM programming of Honeywell TDC3000 system in the aspect of complex calculation is stand out. At the ethylene tank area, its ability of calculating the capacity of ethylene tank is standout. This paper issues particular and gives other method.

Keys:
CL/AM,programming,tank area,capacity ,calculation,program code.

作者简介: 王雨辰,中国石化广州分公司信息仪控中心,电话020-82128389
分享到
【文章来自米尔自动化网http://www.mirautomation.com/pages/2006-05/s18330.shtml
本文标签: Honeywell   DCS   TDC3000   CL/AM程序设计  
 三菱电机

热门内容:
工业机器人 S7-200 S7-300 PLC编程入门 自动化产品 DCS控制系统 变频电机 工控机 可编程自动化控制器 温度传感器 HMI