多次传送数据问题

无论Enter使能多少次,Position的值总是在2和3之间跳来跳去,DB1中也只有DB6和DB14中传入了数据。各位能不能帮我检查一下,FC1变量声明如下:
IN:   Enter    Bool
       Length   Int
       Souce    DWord
OUT:  DN      Bool
         ER       Bool
         File      Pointer
IN_OUT:   Position   Int
TEMP:      Input      Bool
FC1程序如下:
     L     P##File
      LAR1  
      L     W [AR1,P#4.0]
      LAR1  
      L     #Position
      L     4
      *I    
      SLW   3
      +AR1  
  A     #Enter
      AN    #DN
      FP    #input
      =     L      4.0
      A     L      4.0
      JNB   _001
      L     #Souce
      T     DBD [AR1,P#20.0]
_001: NOP   0
      A     L      4.0
      JNB   _002
      L     #Position
      L     1
      +I    
      T     #Position
_002: NOP   0
     L     #Length
      L     #Position
      ==I   
      =     #DN
OB1程序:
      A     DB1.DBX    0.2
      =     L     20.0
      BLD   103
      A     M      0.0
      JNB   _001
      CALL  FC     1
       Enter   :=L20.0
       Length  :=DB1.DBW2
       Souce   :=MD2
       DN      :=DB1.DBX0.1
       ER      :=DB1.DBX0.0
       File    :=DB1.DBW6
       Position:=DB1.DBW4
_001: NOP   0

问题补充:
我的目的是:在Enter的每一个上升沿取Souce(数据类型:Dword)里的数据存入数据块DB1内,
  存放地址是从File(数据类型:Pointer)指定的地址开始,
取数据的次数由Length确定,Position是当前取的次数,
  当Position=Length时,输出DN位。

最佳答案

L     W [AR1,P#4.0]-------应该写成 L   D [AR1,P#2.0]
FP    #input--------------临时变量不能用于上升/下降沿
L     #Position
      L     4
      *I    
      SLW   3
      +AR1             这时AR1中存储的是6.0+Position的指针地址

T     DBD [AR1,P#20.0]      这时计算出的地址不可能是DBD6或DBD14,你是不是写错了,是P#0.0啊

提问者对于答案的评价:
非常感谢您的帮助,
T     DBD [AR1,P#20.0]  这句是我想问题是不是出在传送到数据块的数据和指针地址[因为它要占用6个字节(只是我还是不知道这6个字节占用的是哪里的地址)]   重复了,所以把它改为P#20.0   现已经改回P#0.0
    还有一个原因是,position 不能定义为IN_OUT变量,不然也是一样在2  3 之间变来变去的,
  然后按照你的提示做成功了,再次感谢。

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

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

相关推荐