最近碰到了一个奇怪的问题。
我们使用西门子的S7-417CPU,能够处理模拟量信号。现在有两个通道的瞬时值显示正常,但是累计值有时候不计数,有时候计数慢(比瞬时值)。利用STEP7进入对存储该数据的位置进行清零操作后,累积值能够正常计数。需要说明的是,这个数没有到达最大计数值,因为以前最大计数远远大于这个数。
现在把内部的有关一段程序提供给大家,希望能够给我们提供帮助和指导。程序如下:
以FQ102为例
现场来的流量信号未开方DB50.FT102
FC59功能块中
DB50.FI102 :=SQRT(7000.0*DB50.FT102*(DB50.PI108+0.1)*313.0/(DB50.TI103+273.0)
/(0.85+0.1));
IF DB50.FI102<350.0 THEN DB50.FI102 :=0.0;END_IF;
OB35组织块中
DB54.FQ102_Y:=(REAL_TO_DINT(DB50.FI102)+ DB54.FQ102_Y) MOD 3600;
DB54.FQ102:= DB54.FQ102+(REAL_TO_DINT(DB50.FI102)+ DB54.FQ102_Y)/3600;
IF DB54.FQ102>90000000 THEN DB54.FQ102:=0;END_IF;
故障现象
DB50.FI102为4000.0左右
DB54.FQ102当时为1.685371e+07
实际瞬时值为1NM3/S
但当时累积值变化为:10NM3/15S
清零后累积值变化为1NM3/S
附FQ101相关程序
现场来的流量信号未开方DB50.FT101
FC59功能块中
DB50.FI101 :=SQRT(12000.0*DB50.FT101*(DB50.PI103+0.1)*313.0/(DB50.TI101+273.0)
/(0.28+0.1));
IF DB50.FI101<600.0 THEN DB50.FI101 :=0.0;END_IF;
OB35组织块中
DB54.FQ101_Y:=(REAL_TO_DINT(DB50.FI101)+ DB54.FQ101_Y) MOD 3600;
DB54.FQ102:= DB54.FQ101+(REAL_TO_DINT(DB50.FI101)+ DB54.FQ101_Y)/3600;
IF DB54.FQ101>90000000 THEN DB54.FQ101:=0;END_IF;
故障现象
DB50.FI101为7000.0左右
DB54.FQ101当时为3.205371e+07
实际瞬时值为2NM3/S
但当时累积值不变化
清零后累积值变化为2NM3/S