发表于:2006-09-13 11:27:00
楼主
内容提要:本文从浮点数运算的角度,阐述了TDC-3000内部算法模块TOTALIZR点的缺点及不足,从设计及应用角度提出了如何避免这些问题及不足的具体办法,同时计算出了部分关键数据表格。
关键词:浮点数运算,TDC-3000,TOTALIZR。
一、引言
近年来,中国石化总公司大部分自动控制系统都采用DCS,而TDC-3000是总公司内部的主流机型。笔者在使用TDC-3000的过程中,发现其TOTALIZER点的运算有误差,如:累积速度快、累积停止等,使人难以接受。本文从浮点数运算的角度分析了问题产生的原因,并从设计应用角度提出了解决这些问题的根本方法,还做出了部分关键性的数据表格,供同行参考。由于笔者水平有限,错误之处难免,敬请同行批评指正。
二、TOTALIZR点存在的问题
TOTALIZR点是TDC—3000DCS系统中的一个REGULATORY PV点,可以提供按秒、分、小时三个时间基准的累积计算功能。通常被累积的是一流量值,其输入既可以接模拟量也可以接脉冲量。对于模拟量输入的情况,TOTALIZR点存在两个问题:
1、对于一个恒定的模拟量输入,当TOTALIZR点的PV达到一特定值时,累积值的误差很大。
2、对于一个恒定的模拟量输入,当TOTALIZR点的PV达到一特定值时,累积停止。
三、原因分析
TOTALIZR之所以存在上述两个问题,是因为计算机内部采用浮点运算。为更好地分析问题,首先熟悉一下浮点数的概念⑴。
1、数的表示方法
计算机采用四个字节来表示浮点数,其格式如下:
JFJ1J2J3J4J5J6J7SFS1S2S3S4S5S6S7S8S9S10S11S12S13S14S15S16S17S18S19S20S21S22S23
阶符JF表示阶码本身的正负,JX为阶码,决定数的大小;SF是数符,表明数的正负,S1~S23为尾数,表示小数。
整个浮点数的真值为:±2的J次方×W
2、浮点数的加法
浮点数的加法可分为四步:
①、检测操作数是否为零,以简化操作。
②、对阶。
③、尾数相加。
④、规格化。
下面着重论述第二步:对阶。
两个浮点数相加,其阶码不一定相等。阶码不等的两个数是不能将他们的尾数直接相加的,需要将阶码对齐后才能相加,这就是所谓的“对阶”。通过下例可以看到对阶的规则及其必要性。
例: 2的6次方×0.1001000011001
+ 2的2次方×0.1010001111100
2的6次方×0.1001000011001
+ 2的6次方×0.0000001010001
= 2的6次方 ×0.1001001101010
阶码对齐的规则是:阶码小的数向阶码大的数对齐这是因为当阶码大的数将尾数右移并相应增大阶码时,舍去的只是尾数的低位部分。
下面举一例说明问题的症结。
沧州炼油厂常减压装置采用TDC—3000DCS,其中有这样一个回路:
FI1063.PVEUHI=32T/H,FI1063.PVEULW=0T/H;
FIQ1063.PVEUHI=1E08T,FIQ1063.PVEULW=0T
,TIQ1063.TIMEBASE=HOUR,FIQ1063.C=1。
运行过程中发现,当FI1063.PV=3.6T/H时,并且FIQ1063.PV≤16384T时,累积正常;当FI1063.PV=3.6T/H并且16384T<FIQ1063.PV≤32768T时,累积速度约为正常速度的二倍;当FI1063.PV=3.6T/H时,并且FIQ1063.PV>32768T时,累积停止。
TOTALIZR点的内部算法为⑵:
PVCALC(i)=PVCALC(i-1)+C×(TIME-SCALE)×Pn
其中:
PVCACL(i): 本次PV的计算值,PVSOURCE=AUTO时,
就是PV值。
PVCALC(i-1):上次PV计算值。
C: 系数,一般用于工程量的变换。
TIMESCALE:如果TIMEBASE=HOUR则为TS/60。
TS: 数据点以分钟计的处理周期。BOX点组态时已经定
义为一秒,即1/60。
Pn: 输入值,此处等于FI1063.PV。
当FI1063.PV=1.8T/H时,并且16384T<FIQ1063.PV≤32768T时,实际运算过程如下:
16384T=214×0.1111111111111111111111T
1.8T/H=0.0005T/S=2-10×0.1000001100010000000000T/S
2的14次方× 0.11111111111111111111111
+ 2的-10次方×0.10000011000110000000000
2的14次方×0.11111111111111111111111
+ 2的14次方×0.000000000000000000000001
最后一位零舍一入,所以
2的14次方×0.1111111111111111111111
+ 2的14次方×0.0000000000000000000001