您的位置:控制工程论坛网论坛 » 技术争鸣 » 大家来编程实现Siemens S7系列PLC中,多字节FIFO功能的实现?

hylotus

hylotus   |   当前状态:离线

总积分:5168  2024年可用积分:0

注册时间: 2009-08-20

最后登录时间: 2012-08-16

空间 发短消息加为好友

大家来编程实现Siemens S7系列PLC中,多字节FIFO功能的实现?

hylotus  发表于 2009/9/27 12:16:25      1533 查看 1 回复  [上一主题]  [下一主题]

手机阅读

Siemens S7 PLC编程中,提供的FIFO功能块FC84 ATT和FC85 FIFO,只能实现一个Word数据的FIFO装载或者弹出,如果现在一次需要装载或者弹出的数据是4Word,而且这4个word是一组数据不能分开存放,那如何实现此功能?三菱PLC有FIFO指令,一次装载或弹出的数据不受字节的限制,那吗Siemens的如何实现?大家来编程试试!
1楼 0 0 回复
  • hylotus

    hylotus   |   当前状态:离线

    总积分:5168  2024年可用积分:0

    注册时间: 2009-08-20

    最后登录时间: 2012-08-16

    空间 发短消息加为好友

    hylotus   发表于 2009/9/27 12:16:25

    通过自己编制功能块实现此功能,比如可以一次进行40byte的操作:


    Network 1


          A     #INPUT
          AN    #IN_ACTIVE
          =     #IN_START
          A     #INPUT
          =     #IN_ACTIVE
          A     #OUTPUT
          AN    #OUT_ACTIVE
          =     #OUT_START
          A     #OUTPUT
          =     #OUT_ACTIVE
          AN    #INPUT
          AN    #OUTPUT
          JC    END1


    Network 2  OUTPUT BUFFER


         AN    #OUTPUT
          O     #DONE_OUT
          JC    IN_1
          AN    #OUT_START
          JC    OP_1
          OPN   #SOURCE_DB
          L     DW#16#0
          T     DBD   40
          T     DBD   44
          T     DBD   48
          T     DBD   52
          T     DBD   56
          T     DBD   60
          T     DBD   64
          T     DBD   68
          T     DBD   72
          T     DBD   76
          L     #LOCATION
          L     0
          <=I  
          S     #EMPTY
          JC    EROR
          OPN   #SOURCE_DB
          CALL  "BLKMOV"
           SRCBLK :=P#DBX 80.0 BYTE 40
           RET_VAL:=#RET_VAL1
           DSTBLK :=P#DBX 40.0 BYTE 40
          L     #RET_VAL1
          L     0
          <>I  
          JC    EROR
          L     0
          T     #COUNT
    OP_1: L     #LOCATION
          L     0
          <=I  
          JC    EROR
          L     #LOCATION
          L     #COUNT
          <=I  
          JC    OP_3
          L     #COUNT
          L     2
          +I   
          ITD  
          L     P#40.0
          *D   
          LAR1 
          OPN   #SOURCE_DB
          L     DBD [AR1,P#40.0]
          T     DBD [AR1,P#0.0]
          L     DBD [AR1,P#44.0]
          T     DBD [AR1,P#4.0]
          L     DBD [AR1,P#48.0]
          T     DBD [AR1,P#8.0]
          L     DBD [AR1,P#52.0]
          T     DBD [AR1,P#12.0]
          L     DBD [AR1,P#56.0]
          T     DBD [AR1,P#16.0]
          L     DBD [AR1,P#60.0]
          T     DBD [AR1,P#20.0]
          L     DBD [AR1,P#64.0]
          T     DBD [AR1,P#24.0]
          L     DBD [AR1,P#68.0]
          T     DBD [AR1,P#28.0]
          L     DBD [AR1,P#72.0]
          T     DBD [AR1,P#32.0]
          L     DBD [AR1,P#76.0]
          T     DBD [AR1,P#36.0]
          L     #COUNT
          L     1
          +I   
          T     #COUNT
          L     #SIZE
          L     -1
          +I   
          L     #COUNT
          <=I  
          JC    OP_2
          JU    END2
    OP_2: L     W#16#0
          T     DBD [AR1,P#40.0]
          T     DBD [AR1,P#44.0]
          T     DBD [AR1,P#48.0]
          T     DBD [AR1,P#52.0]
          T     DBD [AR1,P#56.0]
          T     DBD [AR1,P#60.0]
          T     DBD [AR1,P#64.0]
          T     DBD [AR1,P#68.0]
          T     DBD [AR1,P#72.0]
          T     DBD [AR1,P#76.0]
    OP_3: SET  
          S     #DONE_OUT
          L     #LOCATION
          L     -1
          +I   
          T     #LOCATION
          JU    END2


    Network  3  INPUT BUFFER


         IN_1: AN    #IN_START
          JC    END2
          L     #LOCATION
          L     #SIZE
          >=I  
          S     #FULL
          JC    EROR
          L     #LOCATION
          L     2
          +I   
          ITD  
          L     P#40.0
          *D   
          LAR1 
          OPN   #SOURCE_DB
          L     DBD    0
          T     DBD [AR1,P#0.0]
          L     DBD    4
          T     DBD [AR1,P#4.0]
          L     DBD    8
          T     DBD [AR1,P#8.0]
          L     DBD   12
          T     DBD [AR1,P#12.0]
          L     DBD   16
          T     DBD [AR1,P#16.0]
          L     DBD   20
          T     DBD [AR1,P#20.0]
          L     DBD   24
          T     DBD [AR1,P#24.0]
          L     DBD   28
          T     DBD [AR1,P#28.0]
          L     DBD   32
          T     DBD [AR1,P#32.0]
          L     DBD   36
          T     DBD [AR1,P#36.0]
          L     #LOCATION
          L     1
          +I   
          T     #LOCATION
          SET  
          S     #DONE_IN
          JU    END2

    Network 4


    EROR: SET  
          =     #ERROR
          JU    END2
    END1: CLR  
          =     #DONE_IN
          =     #DONE_OUT
          =     #ERROR
          =     #EMPTY
          =     #FULL
    END2: NOP   0


    欢迎大家讨论!

    2楼 回复本楼

    引用 hylotus 2009/9/27 12:16:25 发表于2楼的内容

总共 , 当前 /