回复:斜坡函数与扫描周期的事情... ...

西山炮台

  • 帖子

    148
  • 精华

    7
  • 被关注

    11

论坛等级:侠圣

注册时间:2008-11-21

普通 普通 如何晋级?

发布于 2018-03-12 09:31:22

25楼

展开查看
以下是引用伊默在2018-03-09 14:00:47的发言 >12楼

看来节奏难带啊... ...

就是用  “西山炮台” 说的方法,自己做减法了。

#iTemp := RD_SYS_T(OUT=>#ACTUAL_TIME);   //读取当前系统时间

IF    #ACTUAL_TIME.YEAR=#LAST_TIME.YEAR

  AND #ACTUAL_TIME.MONTH=#LAST_TIME.MONTH

  AND #ACTUAL_TIME.DAY=#LAST_TIME.DAY

  AND #ACTUAL_TIME.HOUR=#LAST_TIME.HOUR

  AND #ACTUAL_TIME.MINUTE=#LAST_TIME.MINUTE

THEN

  #rCycleTime := LREAL_TO_REAL(#ACTUAL_TIME.SECOND-#LAST_TIME.SECOND+LReal#1.0E-9*(UDINT_TO_LREAL(#ACTUAL_TIME.NANOSECOND)-UDINT_TO_LREAL(#LAST_TIME.NANOSECOND)));

END_IF;

#rDeltaTime := 1.0E-3*DINT_TO_REAL(TIME_TO_DINT(T_DIFF(IN1:=#ACTUAL_TIME, IN2:=#LAST_TIME)));

#LAST_TIME := #ACTUAL_TIME;  //为下一次调用做准备



Test.rar

测试程序在附件内。

@伊默 ,伊大侠,上面的程序,考虑到刚好进位的情况了吗?

年=年;月=月;日=日;时=时;分=分;的情况下进行计算。

如果不相等呢?

比如前一次时间刚好为2017年12月31日23时59秒,本次采样时是2018年1月1日00时01秒。

虽然扫描周期是毫秒级,但也会有进位时,我只是拿秒为单位做说明,实际程序可以以纳秒为单位。

我的方法是不管什么时刻,只需比较秒即可。

IF 本次秒 >= 上次秒 THEN 

周期:= 本次秒 - 上次秒;

ELSE 

周期:= 60 + 本次秒 - 上次秒; //若为纳秒时,此处的60应更改为纳秒的最大值+1;

END_IF


因为我们是需要采集扫描周期,而扫描周期不可能出现纳秒的两次进位的情况,如果出现两次进位,那PLC早就因扫描周期太长而进入STOP了。


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10699条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。