回复:PLC循环编程

多多指点

  • 帖子

    51
  • 精华

    0
  • 被关注

    0

论坛等级:游侠

注册时间:2012-05-21

普通 普通 如何晋级?

发布于 2013-04-23 11:39:22

9楼

quote:以下是引用n次看你的背影在2013-04-22 14:47:46的发言:
可以的,利用PLC程序不断循环的特点,可以这样处理一下。先把存储器分配到你的表达式里面DB1.DBD8=DB1.DBD4—DB1.DBD0,DBD4存储的是本周期数据、DBD0存储的是上周期数据、用本周期的数据减去上周期的数据存储在DBD8里面。这样每个周期都执行一次,也就实现了你上面的功能。就举这个例子吧,你可以参考一下:

L DB1.DBD4 //装载上周期的数据DB1.DBD4到ACCU1里面
T DB1.DBD0 //将ACCU1里面的内容存储到DB1.DBD0里面

L MD100 //装载当前过程数据MD100(比如是FC105的输出)到ACCU1里面
T DB1.DBD4 //将ACCU1里面的内容保存到DB1.DBD4里面

L DB1.DBD0 //装载上周期的数据DB1.DBD0到ACCU1里面
-R //ACCU2减去ACCU1=DB1.DBD4—DB1.DBD0
T DB1.DBD8 //存储本周期减去上一周期差值的数据

初学,对STL语句不熟悉,编程模拟了下,有一个问题需要解决。比如,假设数据采集周期为1S,即每1S更新MD 100,主程序循环扫描周期为0.1S(一般小于0.1s)。
在0S,初始化DB1.DBD0=0.0, DB1.DBD4=0.0同时采集到MD= 20.0,则有
L DB1.DBD4 =0.0
T DB1.DBD0 =0.0

L MD100 =20.0
T DB1.DBD4 =20.0

L DB1.DBD0 =0.0
-R
T DB1.DBD8 =20.0
此时MD1.DBD8=20.0,结果正确。
但是,0.1s时,PLC再次扫描,此时未到数据采集周期,数据MD100=20.0保持不变,则有
L DB1.DBD4 =20.0
T DB1.DBD0 =20.0

L MD100 =20.0
T DB1.DBD4 =20.0

L DB1.DBD0 =20.0
-R
T DB1.DBD8 =0.0
此时DB1.DBD8=0.0,不是我想要的结果,以此类推。直到1S时,MD才有第二次采集数据, DB1.DBD8结果发生相应改变,但其数据在PLC下一个循环周期发生变化。此问题如何解决?
努力!奋斗!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54621条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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