回复:求教:loop循环指令

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2011-08-08 19:22:42

17楼

看背影大侠的回帖和精妙的程序就好像听高手上一堂课,需要花上很长时间来学习,才能体会其精髓;上周住院动了个小手术,拉了很多课,出了院赶快把此帖找到,继续学习,发现背影大侠还留下了试题:
1. 要求将跑马灯写成FC(画外音:要真正理解大侠的程序都要颇费一番脑筋,居然还要求写成FC,这不是赶鸭子上架吗,呵呵)
2. 要求跑3万2千多匹马(画外音:天哪!这不是要了亲命了吗)?
3. 还要同时跑两匹马(画外音:4斤龙虾...这个真没有)?
想来想去,先做完前两题,保证60分,后面一题留给t1122同学吧:
思路:
1. “熟读唐诗三百首,不会写诗也会凑”,就照葫芦画瓢吧
2. 要是写成FC,输出变量为任意存储区,估计3万2千多匹马可能差不多了(没算过),就这么着吧!
OB1:
CALL "MARQUEE" //调用FC1
REQ :=M0.1 //跑马灯的启动标志位REQ=1启动,REQ=0停止
INTERVAL :=S5T#5S //同步脉冲周期
NUMBER :=100 //跑马灯区域,即位数
START_ADD:=Q0.5 //起始地址,可以使用Q,M,DB等各种存储区
MAR_STOP :=M1.1 //跑马灯停止辅助变量
ON :=M1.2 //跑马灯打开辅助变量
OFF :=M1.3 //跑马灯关闭辅助变量
FC1:
A #REQ //跑马灯的启动标志位REQ=1启动,REQ=0停止
FN #MAR_STOP //如果跑马灯停止时
JC M001 //跳转到初始化
L LW 14 //计数到达指定的位数结束(返回)
L 0
<=I
JC M001 //返回跑马灯的起始地址
JU M002
M001: L P##START_ADD //起始地址指针
T LD 0
L #NUMBER //跑马位数
T LW 10
L LD 0
T LD 4
LAR1 LD 0 //初始化一下地址寄存器1
L LW 10
T LW 14 //初始化位数计数
L LW 10 //跑马位数
NEXT: T LW 12 //循环计数
SET
R [AR1,P#0.0] //将跑马灯区域Q点全部复位
+AR1 P#0.1
L LW 12
LOOP NEXT
M002: LAR1 LD 4
A #REQ
A T 1
FP #ON
S [AR1,P#0.0]
A #REQ
A T 1
FN #OFF
R [AR1,P#0.0]
JC M003
JU M004
M003: AN #REQ
JC M004
L LD 4
+ L#1
T LD 4
L LW 14
L 1
-I
T LW 14
M004: AN T 1
L #INTERVAL
SE T 1
发现一点小错误,晚些时候更改,现在伤口疼啊,对不起了!
继续:
我发现的问题是原先的程序开始时,总是从第二点(当前的Q0.6)开始跑马,经过分析我发现造成问题原因是在第一次扫描过程中或当#REQ的下降沿时,“地址存储器”LD4在经过M003标志时被加1位(L#0.1),因此,我重新修改了程序,在M003标志加了一个条件跳转,经过仿真问题解决了。
谢谢背影大侠和明白朋友的关怀,知我者背影大侠也,看到精彩的作品,我就兴奋、快乐,总是跃跃欲试,就好像回到当年的课堂,参加各种数理化竞赛,越是碰到难题,那真是茶饭不思。
程序虽然仿真通过了,但是我总觉得好像很多地方不严谨,漏洞太多,希望背影大侠不吝赐教!
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54617条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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