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积分!




wt423

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 125回
  • 年度积分:43
  • 历史总积分:1180
  • 注册:2014年10月16日
发表于:2016-04-02 21:24:39
21楼

难男男女女男男女女男男女女男男女女男男女女男男女女

LJLLYLLYX

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4090回
  • 年度积分:0
  • 历史总积分:337
  • 注册:2014年3月25日
发表于:2016-06-08 21:02:37
22楼

下载来看看,看看清晰思路

Auto-小鸟

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 11回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2016年6月08日
发表于:2016-06-08 21:51:56
23楼

666666666666666666666666666666666

reny1121

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:1
  • 注册:2016年3月13日
发表于:2016-06-13 23:56:28
24楼

xiexie  很不错

YOUCHUCHU

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 75回
  • 年度积分:0
  • 历史总积分:92
  • 注册:2012年2月03日
发表于:2016-10-11 15:46:56
25楼

谢谢,很期待,顶顶顶顶顶顶顶顶Q 

wtsacalwolf

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 51回
  • 年度积分:0
  • 历史总积分:86
  • 注册:2011年6月21日
发表于:2016-10-31 23:09:39
26楼

谢谢,很期待,顶顶顶顶顶顶顶顶Q 

blue881126

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 26回
  • 年度积分:0
  • 历史总积分:31
  • 注册:2012年1月08日
发表于:2016-11-22 21:56:23
27楼

不错,参考下====

小王热力电工

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 13回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2015年12月15日
发表于:2016-11-25 09:55:46
28楼

大哥,你要火啦。谢谢分享

liujiseng

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4661回
  • 年度积分:0
  • 历史总积分:822
  • 注册:2011年3月29日
发表于:2016-11-25 12:56:42
29楼

下载来看看,看看清晰思路.

故事之后

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 271回
  • 年度积分:0
  • 历史总积分:185
  • 注册:2015年8月01日
发表于:2016-12-08 16:15:28
30楼

好资料,下来学习,谢谢啊。。。。

1003553215

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 150回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2015年7月28日
发表于:2016-12-22 08:55:57
31楼

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

wentao3299

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 24回
  • 年度积分:0
  • 历史总积分:17
  • 注册:2008年9月05日
发表于:2017-02-05 16:00:43
32楼

打撒打撒发撒打发公司的分公司地方

rederwei

  • 精华:0帖
  • 求助:12帖
  • 帖子:17帖 | 114回
  • 年度积分:2
  • 历史总积分:72
  • 注册:2012年5月07日
发表于:2017-03-04 13:30:22
33楼

感谢楼主无私奉献,拜读一下!

sunwenliang201

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 19回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2015年4月15日
发表于:2017-03-07 11:09:25
34楼

此帖授精  感谢楼主分享 

凌云oo

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 9回
  • 年度积分:77
  • 历史总积分:187
  • 注册:2015年8月27日
发表于:2017-03-28 11:07:16
35楼

学习下 谢谢大神分享

Anderson_0372

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 52回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2015年4月19日
发表于:2017-03-30 22:50:50
36楼

学习下 谢谢大神分享

慕容残雪

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 198回
  • 年度积分:0
  • 历史总积分:602
  • 注册:2012年8月06日
发表于:2017-04-10 23:10:06
37楼

66666666感谢楼主分,看看

zhouweihan

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

没有清零程序啊

累积量清零程序是必备的

zhouweihan

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

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

zhouweihan

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

谢谢,很期待,顶顶顶顶顶顶顶顶Q 


热门招聘
相关主题

官方公众号

智造工程师