技术论坛

设备运行时间计算程序

作者 主题
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
主题:【分享】设备运行时间计算程序
推荐帖


只看楼主 楼主 2020-07-18 10:51:46
标签:

        昨天一个同事向我反应说现场PLC的设备运行时间计算不准确,有时候一个小时能差一分钟,他经过分析认为运行时间计算应该放到中断程序里处理。我跟他说设备运行时间计算完全没有必要放在中断中执行,有误差肯定是编程有问题,然后我把我的算法给他分享了,并且这个算法我用了很久没有出现过明显误差,今天也跟大家分享一下。



        程序用到了系统时钟M0.5(设置时钟标记地址为M0)秒方波。具体算法是T_RT_M每秒加1,当它大于3600时表明记录时间超过1小时了,此时给T_RT_H加1,给T_RT_M减3600。最后时间等于T_RT_H+(T_RT_M/3600),用实数表示。因为是用上升沿计数,并且秒信号是保持0.5秒的方波,所以程序扫描时间不大于500ms的情况下肯定能捕捉到,不会丢失脉冲。

        以前发现有的程序虽然也采用秒方波计数的方式,但是没用用到两级累计的方法,而是每个脉冲给运行时间累计0.0002778小时,由于浮点数小数精度是不定的,当数据大到一定程度每次累加的小数就会被舍去,造成误差偏大。



污水处理自控工程师,简称污师。
分享帖版主置评: 考虑下使用整型累计时间? (推荐人:Letham)
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1632864&b_id=4&s_id=23&num=12

至圣

经验值: 18415
发帖数: 2409
精华帖: 1
回复:设备运行时间计算程序
推荐帖


只看楼主 2楼 2020-07-18 14:31:51

嗯,自带系统时钟常用!


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18920
发帖数: 2108
精华帖: 0
回复:设备运行时间计算程序


只看楼主 3楼 2020-07-18 14:52:12

有用,学习学习!


 
以下网友喜欢您的帖子:

  
至圣

经验值: 13937
发帖数: 2008
精华帖: 43
回复:设备运行时间计算程序


只看楼主 4楼 2020-07-19 08:23:23

还是用整型比较好!


人生就像一场旅行!
以下网友喜欢您的帖子:

  
至圣

经验值: 67546
发帖数: 14783
精华帖: 100
回复:设备运行时间计算程序


只看楼主 5楼 2020-07-19 08:40:26

如果设备在两个上升缘之间运行了0.9秒,那么这0.9秒算谁的?

如果设备跟M0.5有关联,那么可能每次接通的第一次计秒都是被忽略掉的(可能扫描周期原因等)。


 
以下网友喜欢您的帖子:

  
侠士

经验值: 1487
发帖数: 210
精华帖: 0
回复:设备运行时间计算程序


只看楼主 6楼 2020-07-21 08:11:57


感谢楼主的精彩分享,学习了!


靡不有初,鲜克有终。
以下网友喜欢您的帖子:

  
至圣

经验值: 10583
发帖数: 1796
精华帖: 0
回复:设备运行时间计算程序


只看楼主 7楼 2020-07-21 17:12:08



这个很实用,谢谢分享


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4872
发帖数: 741
精华帖: 10
回复:设备运行时间计算程序


只看楼主 8楼 2020-07-26 22:06:27

设备运行时间不需要精确到ms吧,到秒已经足够了。

所以我一般用秒脉冲而不是500ms脉冲。

楼上有人说0.9秒算谁的,算空气的了。

这种事情就不纠结了。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
回复:设备运行时间计算程序


只看楼主 楼主 9楼 2020-07-27 09:47:26
以下是引用芳季在2020-07-19 08:40:26的发言 >5楼

如果设备在两个上升缘之间运行了0.9秒,那么这0.9秒算谁的?

如果设备跟M0.5有关联,那么可能每次接通的第一次计秒都是被忽略掉的(可能扫描周期原因等)。

这个运行时间计算主要用于统计设备的运行台时或者用于设备的定期轮换,允许有几秒甚至分钟级别的误差。如果是生产线的节拍控制需要用更精确的算法。


污水处理自控工程师,简称污师。
以下网友喜欢您的帖子:

  
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
回复:设备运行时间计算程序


只看楼主 楼主 10楼 2020-07-27 09:50:34
以下是引用xiatianyun在2020-07-26 22:06:27的发言 >8楼

设备运行时间不需要精确到ms吧,到秒已经足够了。

所以我一般用秒脉冲而不是500ms脉冲。

楼上有人说0.9秒算谁的,算空气的了。

这种事情就不纠结了。

我用的是占空比为50%的秒方波,不是脉冲,所以说只要扫描时间不大于500ms肯定能捕捉到上升沿的,不会丢失信号。


污水处理自控工程师,简称污师。
以下网友喜欢您的帖子:

  
侠士

经验值: 1545
发帖数: 166
精华帖: 2
回复:设备运行时间计算程序


只看楼主 11楼 2020-08-24 11:04:22

一般计时都是用S为基本单位,而且是用整型数据,浮点型数据太容易有误差了


一世温柔暖一人
以下网友喜欢您的帖子:

  
侠圣

经验值: 2790
发帖数: 390
精华帖: 5
回复:设备运行时间计算程序


只看楼主 12楼 2020-09-05 09:23:59

CONST

unit:=60;      //换算率

END_CONST


VAR_INPUT

    // Input Parameters

Input_Condition:BOOL:=false;   //允许计时

FP_1Sec:BOOL;                  //单位时基 秒

reset:BOOL;                    //计时复位

END_VAR

VAR

Impls_1Sec_Aux:BOOL;

Impls_1Sec:BOOL;

pos1,pos2,pos3:BOOL;


END_VAR

VAR_OUTPUT

    // Output Parameters

act_second:INT:=0;

act_min:INT:=0;

act_hour:INT:=0;

END_VAR


Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

    IF  Input_Condition AND  Impls_1Sec AND NOT pos1  THEN

    act_second:= act_second + 1;

    pos1:=true;

    ELSE

    pos1:=false;

    END_IF;


   

    IF (act_second >= unit) AND NOT pos2  THEN

        act_min:= act_min + 1;

        act_second:=0;

        pos2:=true;

    ELSE

        pos2:=false;

    END_IF;

    

    IF (act_min >= unit) AND NOT pos3  THEN

        act_hour:=act_hour + 1;

        act_min:=0;

        pos3:=true;

    ELSE

        pos3:=false;

    END_IF;

ELSE

    act_second:=0;

    act_min:=0;

    act_hour:=0;

END_IF;



大家同行,you ok ? me !
以下网友喜欢您的帖子:

  
游民

经验值: 100
发帖数: 2
精华帖: 0
回复:设备运行时间计算程序


只看楼主 14楼 2021-02-03 19:34:33

很有用的程序,思路很好。谢谢分享


 
以下网友喜欢您的帖子:

  
游侠

经验值: 482
发帖数: 49
精华帖: 1
回复:设备运行时间计算程序


只看楼主 15楼 2021-02-04 06:20:06

我更偏向于使用特殊存贮器SMW22。因为Q在一个扫描周期中是不会改变的,每次扫描直接把SMW22的值累加进来就可以了。程序简单很多。


QQ:2541809761
以下网友喜欢您的帖子:

  
游民

经验值: 120
发帖数: 9
精华帖: 0
回复:设备运行时间计算程序


只看楼主 16楼 2021-02-05 16:30:21


学习了,路过


学无止境
以下网友喜欢您的帖子:

  
侠客

经验值: 900
发帖数: 87
精华帖: 0
回复:设备运行时间计算程序


只看楼主 17楼 2021-02-17 11:47:55

大哥,我肯这个程序每到3600秒,小时累加一次,可下面为什么又是秒除以3600呢?那为什么不把上面的省略了直接用秒除以3600得出的数不是一样么?

如累积5800秒,以你的程序应该是:

5800-3600=2200 小时累加1

2200/3600=0.61

1+0.61=1.61

那如果5800/3600=不一样等于1.61么?


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 8877
发帖数: 2002
精华帖: 12
回复:设备运行时间计算程序


只看楼主 楼主 18楼 2021-02-17 19:27:10
以下是引用手机用户2019062886Z2FN在2021-02-17 11:47:55的发言 >17楼

大哥,我肯这个程序每到3600秒,小时累加一次,可下面为什么又是秒除以3600呢?那为什么不把上面的省略了直接用秒除以3600得出的数不是一样么?

如累积5800秒,以你的程序应该是:

5800-3600=2200 小时累加1

2200/3600=0.61

1+0.61=1.61

那如果5800/3600=不一样等于1.61么?

没错,如果用整数本质上是一样。但我是用浮点数累计计算的,当数据大的时候浮点数是有精度的,你这种方法就不准确了。


污水处理自控工程师,简称污师。
以下网友喜欢您的帖子:

  
侠圣

经验值: 2178
发帖数: 467
精华帖: 0
回复:设备运行时间计算程序


只看楼主 19楼 2021-03-23 17:16:26

每次开关机0.9秒误差,设备不可能一天开关机很多次吧……


以不变应万变
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:设备运行时间计算程序


只看楼主 20楼 2021-03-24 10:58:04

基本上运行时间统计我是用双字来累计,以秒为单位。

双字最大 2,147,483,647 秒,约为67.9年,完全足够用了!!

不建议用浮点数,很快会被坑死的。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2706
发帖数: 441
精华帖: 0
回复:设备运行时间计算程序


只看楼主 21楼 2021-04-11 19:35:07



方法有几种,感谢楼上分享


懒是人类前进的动力
以下网友喜欢您的帖子:

  
收起
设备运行时间计算程序
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。