工控之家

 找回密码
加入工控之家

求助 程序解释  谢谢

[复制链接]
发表于 2012-7-11 16:39:54 | 显示全部楼层 |阅读模式
图片:
图片:
用仿真运行两个程序运行的结果是一样的  就是不明白 为什么INCP K4Y000Z0 和MOV Z0 K4Y0这两个程序运行是一样的 求解释 麻烦您讲得详细点 谢谢
发表于 2012-7-11 18:37:09 | 显示全部楼层
:mov Z0 K4y0      打个比方说你试一下mov K10 K4Y0 , 用8421码去理解,点亮的是y1和Y3
发表于 2012-7-11 20:34:24 | 显示全部楼层
没理由会一样啊, MOV Z0 K4Y0中Z0相当于普通的寄存器D,K4Y0相当于一个16位的寄存器D,即把Z0=0,Y全灭,Z0=1Y0接通,Z0=2Y1接通,Y0灭,Z0=3,Y0Y1接通。此程序的结果是每次加1的变化1.2.3.4.5.6.7.8.9.。。。。。。。
INCP K4Y0Z0则根据Z0变址,Z0=0,对应Y0~Y17,输出全灭,Z0=1对应Y0~Y17,Y0接通,Z=2对应Y1~Y20,Y1接通,Z=3对应Y2~Y21,Y2接通,因此每接通一次就多一个输出点接通,之前的输出点不灭,变化应该是1.3.7.15。。。。。楼主留言:

你上面MOV ZO K4Y0的解释我能看的懂。 就是底下INCP K4Y0Z0的解释不是很清楚,为什么Z0=0,对应Y0~Y17,输出全灭,Z0=1对应Y0~Y17,Y0接通,Z=2对应Y1~Y20,Y1接通,Z=3对应Y2~Y21,Y2接通,因此每接通一次就多一个输出点接通,之前的输出点不灭,变化应该是1.3.7.15。。。。。,,,,,, Z0值的不同,(对应 Y0~Y17,Y0接通,对应Y1~Y20,Y1接通,对应Y2~Y21,Y2接通)Y的对应也不同,Z0=0和=1时,都是对应的Y0~Y17。还有[/quote]
发表于 2012-7-11 22:31:40 | 显示全部楼层
学习了
发表于 2012-7-12 00:28:55 | 显示全部楼层
Y0Z0=Y(0+Z0),所以Z0=1时,Y0Z0=Y1,那么K4Y0Z0=Y1~Y20,但是因为脉冲形式,一个扫描周期接通一次,所以第一行接通时Z0=0,执行到第二行的时候Z0才自加1。
发表于 2012-7-12 02:26:10 | 显示全部楼层
楼主光留言不加分,未免说不过去。我来加分吧。楼主留言:

不是不加, 之前我根本不知道,麻烦你再告诉我怎么加分,,,,谢谢,我 新人一个   呵呵[/quote]
发表于 2012-7-12 04:23:25 | 显示全部楼层
仿照楼主的程序编制了以下程序:

  
    仿真(按FX2N编程),通断X0,以下仅示出接通者:
    1次,Y0、M0
    2次,Y1、M0、M1
    3次,Y0、Y1、M0、M1、M2
    4次,Y2、M0、M1、M2、M3   
    ……
    所以,两段程序的运行结果是不一样的;原因如2楼wu32u2所解释的。

    对于INCP K4M0Z0(对应于楼主的INCP K4Y0Z0)、INCP Z0,其执行过程是:
    第一次接通X0时,(Z0)=0,(K4M0Z0)+1=(K4M0)+1=1,所以M0接通;此后(Z0)=1。
    第二次接通X0时,(Z0)=1,(K4M0Z0)+1=(K4M1)+1=1;虽然,加1前、(K4M0)=1但 (K4M1)=0,而加1后、(K4M1)=1,所以M1接通;而之前M0已接通,并无指令将其复位,所以M0保持接通,从而得到仿真的结果;此后(Z0)=2。
    ……余下类推。楼主留言:

我到现在还是有点迷糊,为什么Z0=0时m0接通,z=1时m0和m1接通,z=2时m0,m1和m2接通等等,INCP Z0是给寄存器内数据加一,那INCP K4M0Z0 是给什么加一呢,有点笨,麻烦说得详细点, 谢谢[/quote][ 此帖被qlin在2011-08-08 16:02重新编辑 ]
发表于 2012-7-12 06:20:40 | 显示全部楼层
学习了,解释得很好.
发表于 2012-7-12 08:17:55 | 显示全部楼层
引用

引用楼主留言  :
我到现在还是有点迷糊,为什么Z0=0时m0接通,z=1时m0和m1接通,z=2时m0,m1和m2接通等等,INCP Z0是给寄存器内数据加一,那INCP K4M0Z0 是给什么加一呢,有点笨,麻烦说得详细点, 谢谢
[/quote]
    呵呵,不能说笨,只是一时没有转过弯来。

    Z0是变址寄存器,INCP Z0每执行一次,Z0内容加1,这个已经理解。
    同样地,INCP K4M0Z0,将K4M0Z0看成一个(由位元件组成的)数据寄存器,执行一次该条指令,则K4M0Z0的内容加1。
    若K4M0Z0中的Z0保持不变,例如为0,则K4M0Z0就是K4M0Z0=K4M(0+0)=K4M0,那么K4M0Z0内容加1、就是K4M0内容加1,这个也可以理解。
  
    现在的问题是,K4M0Z0中的Z0,每次都是变化的;若(Z0)=0,则K4M0Z0=K4M(0+0)=K4M0;若(Z0)=1,则K4M0Z0=K4M(0+1)=K4M1,依此类推;这个关系,可参阅编程手册。
    有了上面的关系,再看INCP K4M0Z0的加1操作:
    当(Z0)=0时,执行INCP K4M0Z0,就是K4M0Z0即K4M0内容加1;当(Z0)=1时,执行INCP K4M0Z0,就是K4M0Z0、此时为K4M1的内容加1;依次类推。
  
    设开始时,M0~M15均是断开的,即K4M0的内容为0,则在(Z0)=0时执行一次加1操作后,K4M0的内容为0+1=1,所以M0为1、即M0接通。
    在(Z0)=1时执行的K4M0Z0加1操作,是K4M1的加1操作,假设M16是断开的(不妨假设涉及到的M15以后的M全是断开的),则在进行加1操作前,K4M1为0,所以加1后,K4M1为1,新增加了M1接通;
    而之前M0是接通的;应用指令的特点是,执行条件断开后,其结果会保持,所以M0保持接通;又在执行K4M1加1操作时,没有牵涉到M0,也无其他指令使M0复位,所以M0是保持接通的。
    于是,此时得到的结果是:M0接通、M1接通。
    其余类推。楼主留言:

底下有我看了你的解释自己理解的,你看我写的对不对,谢谢你对我的帮助,耐心的为我解释,加你为好友,谢谢[/quote]
发表于 2012-7-12 10:15:10 | 显示全部楼层
学习了,明白不少
您需要登录后才可以回帖 登录 | 加入工控之家

本版积分规则

QQ|手机版|小黑屋|Archiver|工控之家 ( 鲁ICP备12015736号-1 )

GMT+8, 2024-6-2 02:11 , Processed in 0.091515 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表