用LAD,SHL_W做跑马灯的程序 点击:1511 | 回复:4



javke

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2011年3月02日
发表于:2012-07-18 14:19:53
楼主

菜鸟写成这样,仿真,结果有些悲剧



yuanle

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 10208回
  • 年度积分:2747
  • 历史总积分:48332
  • 注册:2005年4月22日
发表于:2012-07-18 16:50:25
1楼

QW1由QB1,QB2组成,QW2由QB2,QB3组成

第一条,QW2=FE实际上就是QB3=11101111,第二条,QW1=1,那么就是QB2=0000 0001,此时合起来的QW2就是

0000 0001 1110 1111世纪上数据已经混乱,此是其一。

 

其二,由于均依靠I0.3触发移位,又因PLC扫描机制是由上往下扫描,因此你的仿真结果应该在:

0000 0010 1101 1110与0000 0001 1110 1111之间徘徊。

 

Regards

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-07-18 21:43:18
2楼

     分析楼主程序:

    在I0.3=1的第一个扫描周期里,先执行第一条: W#16#FE-->QW2,使QB2=0000_0000、QB3=1111_1110。再执行第二条:W#16#1-->QW1,使QB1=0000_0000、QB2=000_0001。其结果使 QW2=W#16#01FE=0000_0001 _ 1111_1110。再执行第三条:I0.3=1的前沿,将QW2左移一位,使QW2=W#16#03FC=0000_0011 _ 1111_1100

    如I0.3=1的时间间隔大于2个以上的扫描周期,则在I0.3=1的第二个及以后的各扫描周期里,只执行第一、第二条指令,而不执行第三条指令,故使QW2恒=W#16#01FE=0000_0001 _ 1111_1110。

     当I0.3由1变为0,程序的1、2、3条指令均不使能,其QW2仍=W#16#01FE=0000_0001 _ 1111_1110。

    如果程序的第1、第2二条也用前沿触发MOV_W 指令,该程序只在I0.3=1的前沿出现的扫描周期里执行1、2、3条指令,其它扫描周期1、2、3条程序均不使能,故使其运行结果QW2 ≡ W#16#03FC=0000_0011 _ 1111_1100

    就是说这里的左移指令只在I0.3=1的前沿出现的扫描周期里执行一次,从宏观上看,其QW2输出状态是不变的。

javke

  • 精华:0帖
  • 求助:1帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2011年3月02日
发表于:2012-07-23 20:59:41
3楼

后经高人指点,写出了如下程序

实现7盏灯的依次以1S的时间循环扫描。

 

 

 

 

 

 

但是最后发现,第8盏灯会闪一下。即第七盏灯与第一盏灯之间的衔接时,会有不连续的现象。

望指点如何避免。

wyb2866255---王者之师

  • 精华:57帖
  • 求助:0帖
  • 帖子:148帖 | 2872回
  • 年度积分:1
  • 历史总积分:31450
  • 注册:2010年7月01日
发表于:2012-07-27 09:50:47
4楼

你将第1、2二条语句移到第4条语句之后看看,能否消除第8盏灯会闪一下的现象。这样处理的目的,让QW2=128的同一扫描周期,使QW2左移一位,就可消除原有一个扫描周期显示第8个灯的时间。


热门招聘
相关主题

官方公众号

智造工程师