代码如下:我想用寄存器寻址的方式编一个“单按钮”功能

OB1  程序如下
   
      CALL  FC     1
       middle:=M0.0
       button:=M100.0

FC1   在in_out栏目下 建立两个bool型变量 ,button  与middle  
我的目标是是middle是button 控制的单按钮
FC1内容如下:
  程序段1:
      L     P##middle
      L     DW#16#FFFFFFF8
      AD    
      LAR1  
      A     #button
      FP    M    M [AR1,P#0.6]     //为什么这一条上升沿不能正常执行?
      JCN   _001
      L     1
      L     MB [AR1,P#0.0]
      +I    
      T     MB [AR1,P#0.0]
_001: NOP   0

程序段2:
     A     M [AR1,P#0.0]
      FN    M [AR1,P#0.5]    //但是这一条下降沿可以正常执行,
      JCN   _002
      L     0
      T     MB    20
_002: NOP   0

问题补充:
对于一楼的,我FP后面多写了M,是我在这里写错了。但是我将FP后面的内容换成一个比如说M100.6,再执行程序,就能正常的执行啊。功能也能实现。
我上面的AD指令,按位求与,我是想将不管别人输M0.7~M0.0,我都是希望是M0.0啊,这里应该不会让M0.0始终为1 啊

最佳答案

这种寻址不支持位变量,你监控时可以看到AR1是V区的变量,并不是M区的。你可以将#middle的类型改为字节即可。
感觉你的程序也不太严谨,可以去掉M标识,并且对MB [AR1,P#0.0]累积加1,上升沿用 M [AR1,P#0.6],累加值会出现错误。

提问者对于答案的评价:
对位还是可以寻址的,不知道为什么我把程序段2删除了就好了

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc233466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午1:48
下一篇 2018年12月1日 下午1:48

相关推荐