首页 上一页 1 2 3 4 5 6 7 下一页 尾页

300流量累计程序,源码 点击:6692 | 回复: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积分!




江湖再见-余辉

  • [版主]
  • 精华:53帖
  • 求助:44帖
  • 帖子:3351帖 | 28451回
  • 年度积分:603
  • 历史总积分:131640
  • 注册:2006年4月25日
发表于:2015-10-11 12:20:54
1楼

此帖授精  感谢楼主分享 

撞破烂钟——王者之师

  • 精华:28帖
  • 求助:1帖
  • 帖子:328帖 | 15621回
  • 年度积分:0
  • 历史总积分:78592
  • 注册:2006年7月25日
发表于:2015-10-11 15:48:10
2楼

没有清零程序啊

累积量清零程序是必备的

tyfeixian

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


引用 撞破烂钟——王者之师 的回复内容: 没有清零程序啊累积量清零程序是必备的



请仔细查看开头说明中的Com_RST的用处!

江湖再见-余辉

  • [版主]
  • 精华:53帖
  • 求助:44帖
  • 帖子:3351帖 | 28451回
  • 年度积分:603
  • 历史总积分:131640
  • 注册:2006年4月25日
发表于:2015-10-12 07:32:57
4楼

欢迎大家一起讨论此程序的利弊

撞破烂钟——王者之师

  • 精华:28帖
  • 求助:1帖
  • 帖子:328帖 | 15621回
  • 年度积分:0
  • 历史总积分:78592
  • 注册:2006年7月25日
发表于:2015-10-13 12:33:59
5楼


引用 tyfeixian 的回复内容: 引用 撞破烂钟——王者之师 的回复内容: 没有清零程序...

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

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

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

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

tyfeixian

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


回复内容:

对: 撞破烂钟——王者之师 引用 tyfeixian 的回复内容: 引用 撞破烂钟... 内容的回复!


本来不想回复的。真不知道你是不是编程的人员?


在FB块中预留了一个BOOL量的接口COM_RST,已说明这个接口为ON的时间不少于扫描时间(及OB30-38的中断事件),在上位机Wincc中,在STEP7中的OB10提供的时间中,难道不能够触发此接口吗?


本段程序只是提供一个累计值,而且留出了必须的接口,为能够在OB36中(及50ms时间)多个累计能够中断响应过来,只做了累计的计算。

向你说的日报月报年报等等需要自动清零,完全可以在主程序中加个比较判断触发清零。

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

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

撞破烂钟——王者之师

  • 精华:28帖
  • 求助:1帖
  • 帖子:328帖 | 15621回
  • 年度积分:0
  • 历史总积分:78592
  • 注册:2006年7月25日
发表于:2015-10-14 15:03:54
7楼


引用 tyfeixian 的回复内容: 回复内容:对: 撞破烂钟——王者之师  引用 tyfe...

呵呵。。。

偶的确不懂编程。

编程什么样子的呢?

偶只知道使用。

嘿嘿。。。

由于使用中很多程序的自以为然,以及编程人员的自以为是,才造成了很多可笑的错误,呵呵。。。偶就是通过这些幼稚的错误动脑子想出来的。



偶在第一个回帖中说过了,你提供的这个程序没有清零程序部分难道不对么?

tyfeixian

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


回复内容:

对: 撞破烂钟——王者之师 引用 tyfeixian 的回复内容: 回复内容:对:... 内容的回复!


这段程序你读了吗?

撞破烂钟——王者之师

  • 精华:28帖
  • 求助:1帖
  • 帖子:328帖 | 15621回
  • 年度积分:0
  • 历史总积分:78592
  • 注册:2006年7月25日
发表于:2015-10-14 18:26:13
9楼

回复内容:

对:tyfeixian 回复内容:对: 撞破烂钟——王者之师 引用 tyfeixian 的回复内容: 回复内容:对:... 内容的回复!这段程序你读了吗?     内容的回复:

经您这一提醒,偶又认真的读了帖子内容,不错有累积量的清零程序

先前回帖没认真看,对此深表谦意

厂里的累积都是把清零触发用计数器时间触发和清零程序在一起,并且累积量进入的模拟瞬时量有溢出判断程序,看习惯了,就想当然得出结论。

一叶障目,让高手笑话,惭愧!!

Andy_Liang

  • 精华:0帖
  • 求助:1帖
  • 帖子:1帖 | 245回
  • 年度积分:0
  • 历史总积分:108
  • 注册:2007年12月02日
发表于:2015-10-14 20:40:30
10楼

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

那都是浮云

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:8
  • 注册:2015年10月16日
发表于:2015-10-16 22:40:13
11楼

dssgfdgdfgrregerreg

三把手

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 338回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2004年8月07日
发表于:2015-11-07 12:53:44
12楼

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

雷日化工

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:32
  • 注册:2015年9月14日
发表于:2015-11-10 13:41:10
13楼

貌似不错,我说说吧,流量累计就是一段加法程序

maxinyang

  • 精华:0帖
  • 求助:0帖
  • 帖子:10帖 | 128回
  • 年度积分:10
  • 历史总积分:1726
  • 注册:2014年9月20日
发表于:2015-11-13 16:20:41
14楼

基于OPC的wincc数据采集!!!!!

蓝田日暖玉生烟

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 121回
  • 年度积分:0
  • 历史总积分:62
  • 注册:2014年8月26日
发表于:2015-11-14 21:47:54
15楼

此帖授精  感谢楼主分享 

a12345555

  • 精华:0帖
  • 求助:7帖
  • 帖子:24帖 | 263回
  • 年度积分:14
  • 历史总积分:1812
  • 注册:2015年9月06日
发表于:2015-12-18 08:43:29
16楼

!!!!!!!!!!!!!!!!!!!!!!!!!!!

averageman

  • 精华:0帖
  • 求助:2帖
  • 帖子:4帖 | 23回
  • 年度积分:0
  • 历史总积分:964
  • 注册:2015年11月10日
发表于:2015-12-23 12:57:50
17楼

L    #VALUE

L    #tCYCLE

*R

L    #tINTERVAL

/R

L    #ACCUM

+R

T    #ACCUM

T    #TOTAL

这段程序有问题吧?实时流量换算为t/h,怎么这么做呢?

tyfeixian

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

更新!!自己顶一下。

syq1983

  • 精华:0帖
  • 求助:0帖
  • 帖子:28帖 | 407回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2016-02-25 22:46:53
19楼

此帖授精  感谢楼主分享 

budecheng

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 93回
  • 年度积分:0
  • 历史总积分:23
  • 注册:2011年3月09日
发表于:2016-03-15 09:51:30
20楼

经典顶起来……………………


热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 3 4 5 6 7 下一页 尾页