发布于 2011-08-02 23:09:28
4楼
前段时间看到几个坛友问传说中跑马灯的故事!今晚刚好闲暇无事,也等于锻炼锻炼脑子,不至于生锈!就用绝对地址写了段代码,仿真测试通过!不知能否满足楼主的要求。望大家多指正,有兴趣的朋友可以将其写成一个FC,还是比较好玩的,呵呵.......
此段跑马灯程序Q点输出范围定义成Q0.5到Q13.0共100个Q点,按照楼主的要求,跑了100个马灯!可以按照自己的需要修改!也可以在连续Q区段(Q0.0-Q4095.0)内跑马灯!如果PLC光跑马灯的话,估计跑三万两千多匹马应该没有问题!兄弟们让你去指挥这千军万马哈......
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬跑马灯的过程╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
A M 6.1 //跑马灯的启动标志位M6.1=1启动,M6.1=0停止
FP M 6.2 //如果跑马灯启动时
JC M001 //跳转到初始化地址寄存器1和指定的Q区
A M 6.1 //跑马灯的启动标志位M6.1=1启动,M6.1=0停止
FN M 6.2 //如果跑马灯停止时
JC M001 //跳转到初始化地址寄存器1和指定的Q区
L MD 7
L L#105 //★定义Q点的结束(返回)地址(105/8=Q13.0)
>=D
JC M001 //返回跑马灯的起始地址
JU M002
M001: L L#5 //★定义Q点的起始地址(5/8=Q0.5)
T MD 7
LAR1 MD 7 //初始化一下地址寄存器1
L 100 //★★跑马灯区域Q点个数(105-5=100)
NEXT: T LW 20 //(Q点的结束地址减去起始地址)
SET
R Q [AR1,P#0.0] //将跑马灯区域Q点全部复位
+AR1 P#0.1
L LW 20
LOOP NEXT
L L#5 //★定义Q点的起始地址(5/8=Q0.5)
T MD 7
M002: LAR1 MD 7 //再初始化一下地址寄存器1
A T 1
A M 6.1 //跑马灯的启动标志位
FP M 6.3
S Q [AR1,P#0.0] //T1上升沿到来时,置位当前的Q点
A T 1
A M 6.1 //跑马灯的启动标志位
FN M 6.4
R Q [AR1,P#0.0] //T1下降沿到来时,复位当前的Q点
JC M003
JU M004
M003: L MD 7
+ L#1
T MD 7 //跑马灯地址往前逐步推进
//╬╬╬╬╬╬╬╬╬╬╬T1相当于5S的高电平,一个扫描周期的低电平╬╬╬╬╬╬╬╬╬╬╬╬
M004: AN T 1 //产生一个5s的“同步”脉冲源
A M 6.1 //跑马灯的启动标志位M6.1=1启动,M6.1=0停止
L S5T#5S //★时间改小一点,跑马速度会快一点。
SE T 1 //跑马灯开始,启动定时器。
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”