仿SFB4的定时器FC

已锁定

pkh2006

西门子1847工业学习平台

  • 帖子

    872
  • 精华

    11
  • 被关注

    130

论坛等级:奇侠

注册时间:2013-08-25

黄金 黄金 如何晋级?

仿SFB4的定时器FC

903

1

2015-01-28 15:51:23

最近在项目里面,涉及到了定时器的设定时间是变量的情况。
S5定时器的一旦开始计时,定时器的内部只计算剩余时间,而不计算已用时间,这样就造成,在定时器运行中改变设定时间,定时器依然按照启动时的设定时间运行。并且S5定时器只能用到9990S,这个有时候会不够用。
SFB4计算的就是已用时间,也就是它的输出ET,它利用的是SFC64的系统时间,STIME为起始时间,STATE为状态(0为还没使用,1为计时中,2为计时结束),但是它也有缺点。一个是每个计时器都需要一个背景数据块,还有一个在OB100需要对所有计时器初始化。
针对这些问题,我仿造SFB4,重新编了个计时器FC,变量和SFB4基本一致。
需要1个UDT,里面是STATE BYTE STIME TIME ET TIME三个变量共10字节。可以在1个DB块里面最多建6553个这种UDT的数组,一般都够供普通程序使用。
需要在OB1开始调用SFC64,将输出保存到某一变量。
需要在OB100使某变量置True,然后在OB1结束置False。
FC的输入变量为:
Initial BOOL //初始化
In BOOL//变量
PT TIME//设定时间
ATIME TIME//SFC64输出的系统时间
输出变量为:
Q BOOL//计时器的输出
输入输出变量为:
IN_OUT 上面提到的UDT
程序如下:

A #Initial
JCN a0
JU a5
a0: A #IN
JCN res
L #IN_OUT.STATE
L B#16#1
==I
JC a1
TAK
L B#16#2
==I
JC a4
L T#0MS
T #IN_OUT.ET
L #PT
L T#0MS
<=D
JC res
L #ATIME
T #IN_OUT.STIME
L B#16#1
T #IN_OUT.STATE
JU res1
a1: L #ATIME
L #IN_OUT.STIME
>D
JCN a2
-D
JU a3
a2: L L#2147483647
L #IN_OUT.STIME
-D
L #ATIME
+D
a3: T #IN_OUT.ET
L #PT
>=D
JCN res1
a4: SET
= #Q
L B#16#2
T #IN_OUT.STATE
JU end
a5: L T#0MS
T #IN_OUT.ET
res: L B#16#0
T #IN_OUT.STATE
res1: CLR
= #Q
end: SET
SAVE
希望能帮助到一些朋友们

PS:电脑是加密的,没法传STL源程序,请见谅
还有可能会有误差,最大误差是最长的扫描周期。我不清楚是不是SFB4也有这个问题
仿SFB4的定时器FC 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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