300流量累计程序,源码 点击:7144 | 回复:135



tyfeixian

    
  • 精华:4帖
  • 求助:2帖
  • 帖子:14帖 | 50回
  • 年度积分:27
  • 历史总积分:1276
  • 注册:2006年8月02日
发表于:2015-10-10 17:01:31
楼主

西门子官网的程序是用德文书写的。必须将语言给位德文才可以使用。现将内部的程序转发。

建立一个FB块

IN中建立

名称 VALUE  数据类型 real

名称 Interval  数据类型  time     计量单位的时间例如:30M3/H  则输入 T#1H

名称 Cycle     数据类型  time     扫描循环的时间 放在OB35中则是T#100ms OB36则是T#50ms

名称 Com_RST   数据类型  bool     复位开关,ON时清零,需要在扫描时间内,需要将此位置位时间大于

//////////////////////////////////OB35的中断扫描时间。

OUT中建立

名称 TOTAL     数据类型  real     累计值

Stat中建立

名称 Accum     数据类型  real

Temp中建立

名称 tInterval 数据类型  real

名称 tCycle    数据类型  real

程序段1中输入

A      #COM_RST

JCN    NW2

L      0.0

T      #ACCUM

T      #TOTAL

SET

SAVE

BEU

程序段2中输入

NW2:   NOP      0

       L        #INTERVAL

       DTR

       T        #tINTERVAL

       L        #CYCLE

       DTR

       T        #tCYCLE

程序段3中输入

L    #VALUE

L    #tCYCLE

*R

L    #tINTERVAL

/R

L    #ACCUM

+R

T    #ACCUM

T    #TOTAL

程序段4中输入

SET

SAVE

BEU


保存为FB功能块


说明:次功能块只能接受real值。直接读取上来的值需要经过fc105的转换后或自行转换为32位浮点数后再使用。


应用实例:


你觉得有用,帮忙顶一下。


上面的例子在累计数特别大时,容易出现计数不准,偏差比较大。下面的程序更改后比较好点。

代码如下:

文字的上传不上来。用图片粘贴吧。

提供一个工程附件。累计块为FC1001.
附件内包含源程序,以及简易的模拟量转换源码。以及自己编写的一点逻辑程序源码。


1200&1500代码


FUNCTION_BLOCK "TOT"
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : Tyfixn
VERSION : 0.1
   VAR_INPUT
      _Hi : Real;   // 现场流量计,上限量程。
      _InterVal : Time;   // 此时间为量程中标定的时间。例如30m3/h则为1h,30L/m则为60s,
      _Cycle : Time;   // 次时间为循环扫描时间,例如OB35则为100ms,OB32则为1s
      _inPV : Real;   // 实际输入值。
      _inLoQC : Real;   // 小信号切除值。
   END_VAR

   VAR_OUTPUT
      _TOT_value : Real;   // 累计值
   END_VAR

   VAR_IN_OUT
      _Start_Stop : Bool;   // 启动停止累计操作端。
      _Com_RST : Bool;   // 复位操作端。此端口置1后自动复位。
   END_VAR

   VAR
      _TOTAL_L : Real;   // 流量累计输出值,低位。
      _TOTAL_H : Real;   // 流量累计输出值,高位。
      _start_Temp : Bool;
   END_VAR

   VAR_TEMP
      _t_Value : Real;
      _t_Cycle : Real;
      _t_InterVal : Real;
      _var1 : Real;
   END_VAR


BEGIN
 #_t_Cycle := DINT_TO_REAL(TIME_TO_DINT(#_Cycle));           //将时间数据转换为实数。
 #_t_InterVal := DINT_TO_REAL(TIME_TO_DINT(#_InterVal));      //将时间数据转换为实数。
 //#_var1 := SCALE(IN := #_inPV, HI_LIM := #_Hi, LO_LIM := 0, BIPOLAR := 0, OUT => #_t_Value);
 
 //复位清零操作
 IF #_Com_RST THEN
     #_TOTAL_H := 0;
     #_TOTAL_L := 0;
     #_Com_RST := FALSE;
 END_IF;
 
 //切除小信号,当低于切除值时,将累积信号置0;
 IF #_inPV > #_inLoQC THEN
     #_var1 := 0;
 ELSE
     #_var1 := #_inPV;
 END_IF;
 
 //当输入启动信号到达后,立即开启累积计数,当启动信号停止(结束)后,判断信号值是否到0,到0后立即停止累积计数。

//下面这节是根据实际工况改写的一节延时计量,
//

// IF #_Start_Stop THEN
//     #_start_Temp := 1;
// ELSIF #_var1 = 0 THEN
//     #_start_Temp := 0;
// END_IF;
// 


//正常使用下面这一节

IF #_Start_Stop  THEN
     #_start_Temp := 1;

ELSE

     #_start_Temp := 0;
 END_IF;


 //开始累积
 IF #_start_Temp THEN
     #_TOTAL_L := #_var1 * #_t_Cycle / #_t_InterVal + #_TOTAL_L;
 END_IF;
 
 //消除极大数加极小数的累加错误
 IF #_TOTAL_L > 1000.0 THEN
     #_TOTAL_H := #_TOTAL_H + 1;
     #_TOTAL_L := #_TOTAL_L - 1000.0;
 END_IF;
 
 //输出结果
 #_TOT_value :=( #_TOTAL_H * 1000)+ #_TOTAL_L;
END_FUNCTION_BLOCK


更改一个小错误。

正在下载,请等待……
下载附件需0积分!




zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:15:48
41楼

使用人工触发清零,虽然能够实现累积量的清零作用,也能够在现实中应用很多。

但总感觉这种清零模式还是欠缺一点,稍大一点的生产区都有日报表、周报表和月报表。

这样的报表模式一般都是设定在一天、一周、一月的固定时间内自动存储生成,然后在自动触发自动清零,这样的模式就不是单单的人工触发清零能够完成的。

所以在程序块中还应该根据客户的要求做一个自动清零程序比较好。

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:16:46
42楼

使用人工触发清零,虽然能够实现累积量的清零作用,也能够在现实中应用很多。

这样的报表模式一般都是设定在一天、一周、一月的固定时间内自动存储生成,然后在自动触发自动清零,这样的模式就不是单单的人工触发清零能够完成的。

所以在程序块中还应该根据客户的要求做一个自动清零程序比较好。

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:17:35
43楼

使用人工触发清零,虽然能够实现累积量的清零作用,也能够在现实中应用很多。

但总感觉这种清零模式还是欠缺一点,稍大一点的生产区都有日报表、周报表和月报表。

这样的报表模式一般都是设定在一天、一周、一月的固定时间内自动存储生成,然后在自动触发自动清零,这样的模式就不是单单的人工触发清零能够完成的。

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:18:10
44楼

使用人工触发清零,虽然能够实现累积量的清零作用,也能够在现实中应用很多。

但总感觉这种清零模式还是欠缺一点,稍大一点的生产区都有日报表、周报表和月报表。

这样的报表模式一般都是设定在一天、一周、一月的固定时间内自动存储生成,然后在自动触发自动清零,这样的模式就不是单单的人工触发清零能够完成的。

所以在程序块中还应该根据客户的要求做一个自动清零程序比较好。

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:18:56
45楼

使用人工触发清零,虽然能够实现累积量的清零作用,也能够在现实中应用很多。 

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 00:30:24
46楼

SAVE

BEU

程序段2中输入

NW2:   NOP      0

       L        #INTERVAL

       DTR

       T        #tINTERVAL

       L        #CYCLE

       DTR

       T        #tCYCLE

程序段3中输入

L    #VALUE

L    #tCYCLE

*R

L    #tINTERVAL

/R

L    #ACCUM

+R

T    #ACCUM

T    #TOTAL

程序段4中输入

SET

SAVE

BEU

zhouweihan

  • 精华:0帖
  • 求助:0帖
  • 帖子:11帖 | 208回
  • 年度积分:0
  • 历史总积分:67
  • 注册:2007年2月22日
发表于:2017-05-04 21:16:00
47楼

上位机的报表自动保存也是变量触发,这个变量也可以触发清零。

有太多的方法。请您动动脑筋吧。


zhihong3110

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 46回
  • 年度积分:10
  • 历史总积分:134
  • 注册:2009年3月06日
发表于:2017-05-07 16:10:55
48楼

正有一个项目用到,看看,学习,谢谢!

siemonz

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:194
  • 注册:2015年9月20日
发表于:2017-05-21 12:38:40
49楼

看看,学习,谢谢大神分享!

chemiszhou

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 760回
  • 年度积分:0
  • 历史总积分:140
  • 注册:2011年11月30日
发表于:2017-05-31 12:49:37
50楼


引用 江湖再见-余辉 的回复内容: 此帖授精  感谢楼主分享 


永恒落日

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 40回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2013年8月17日
发表于:2017-06-15 17:02:20
51楼

此帖授精  感谢楼主分享

yiny576

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 25回
  • 年度积分:0
  • 历史总积分:96
  • 注册:2012年6月08日
发表于:2017-06-29 22:16:21
52楼

感谢楼主分享      感谢

yiny576

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 25回
  • 年度积分:0
  • 历史总积分:96
  • 注册:2012年6月08日
发表于:2017-06-29 22:17:42
53楼

学习,谢谢大神分享!    学习,谢谢大神分享!

木头丶

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 89回
  • 年度积分:23
  • 历史总积分:874
  • 注册:2017年6月07日
发表于:2017-06-30 09:44:06
54楼

免费的吗?STL看起来不习惯!                     

hedyfish

  • 精华:0帖
  • 求助:3帖
  • 帖子:7帖 | 72回
  • 年度积分:5
  • 历史总积分:4201
  • 注册:2008年7月12日
发表于:2017-08-03 09:38:58
55楼

引用 江湖再见-余辉 的回复内容: 此帖授精  感谢楼主分享

weishaojun125

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 761回
  • 年度积分:0
  • 历史总积分:491
  • 注册:2008年2月15日
发表于:2017-08-12 14:49:22
56楼

好东西,学习了,好多地方都有用到!!!

gg998

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:61
  • 注册:2017年9月29日
发表于:2017-09-29 02:12:42
57楼

好资料,谢谢大神

过客而已

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2017年9月29日
发表于:2017-09-29 02:55:23
58楼

好帖,值得拥有

菜鸟85

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 129回
  • 年度积分:161
  • 历史总积分:334
  • 注册:2015年4月10日
发表于:2017-10-13 15:37:12
59楼

谢谢楼主分享精神共同学习

qing6770

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2009年3月11日
发表于:2017-10-17 20:57:35
60楼

看看,学习,谢谢大神分享!



热门招聘
相关主题

官方公众号

智造工程师