回复:编写一个小程序

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2013-10-04 18:45:27

5楼

节日长假,玩了几天也玩腻了,看见楼主出了个题,就顺便用它来活动活动脑筋吧,免得生锈了:
1. 小程序乍一看很简单,实际动手编程还似乎有点纠结,^_^不好意思,水平有限;
2. 本想借鉴一下经典的跑马灯程序中常用的Loop循环,但尝试了几次均不成功,只好化腐朽为神奇,用最笨的办法来编程,“定时器+计数器”先搞出个方案来再说,然后听听各位朋友们的意见;
3. 用绝对地址编程,只要计算正确,写到DB中这部分的编程,只要对指针熟悉,应该是比较简单的;
4. 也可以将FC扩展和封装成循环任意n个触发周期并写入DB的任意地址的块;
5.程序设计思路:
1)用接近开关触发信号的上升沿在计数器中记录触发次数,并且为了保证计时精确度用上升沿控制计时器启动/停止/采集触发周期剩余时间/再启动;
2)采集接近开关每个触发周期计时器的剩余时间;
3)用预设的接近开关最大触发周期长度(例如:500秒)减去记录的所有触发周期计时器剩余时间的平均值=接近开关平均触发周期;
6. 经仿真程序计算正确。
OB1:
CALL FC1

FC1:
A M 0.7 //初始化
FP M 0.6
JCN _001
L 0
T MW 100
T MW 102
T MW 104
T MW 108
T MW 0
R T 1
R C 1
_001: NOP 0
A M 0.0 //接近开关触发信号,为了便于仿真用M0.0替代
FP M 0.1
= M 0.2 //开关触发信号上升沿脉冲信号
S M 0.3 //开关触发信号上升沿用于计时器启动/停止/再启动控制标志

A M 0.2 //开关触发信号上升沿脉冲信号
CU C 1 //接近开关触发次数计数器

A M 0.2 //开关触发信号上升沿脉冲信号
A(
L C 1 //接近开关触发次数计数器
L 1
>=I
)
JCN _002 //从接近开关第2次触发开始采集二次触发的剩余时间
R M 0.3 //停止计时器
L MW 100 //计时器的实时剩余时间
L MW 102 //触发周期累计剩余时间
+I
T MW 102 //触发周期累计剩余时间

_002: NOP 0

A M 0.3 //计时器启动/停止控制标志
L S5T#8M20S //预设的可能最大周期长度(这里设置为500秒)
SS T 1 //计时器
L T 1
T MW 100 //计时器的实时剩余时间

A M 0.2 //开关触发信号上升沿脉冲信号
A(
L C 1 //接近开关触发次数计数器
L 4
<=I
)
JCN _003
S M 0.3 //判断是否到达要求的触发次数,否,则重新激活计时器

_003: NOP 0
A M 0.2 //开关触发信号上升沿脉冲信号
A(
L C 1 //接近开关触发次数计数器
L 4
>=I
)
JCN _END //判断是否到达要求的触发次数,是,则开始计算

L MW 102 //触发周期累计剩余时间
L 3
/D
T MW 104 //触发周期剩余时间平均值
L S5T#8M20S //预设可能的最大触发周期长度(这里设置为500秒)
AW W#16#FFF //过滤时基
BTI //转换成时间整数值
L MW 104 //触发周期剩余时间平均值
-R
T MW 108 //触发周期平均值
_END: NOP 0

END_FUNCTION

请各位大侠拍砖引玉,帮助本人提高水平!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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