回复:请教各位大侠,400H CPU判断切换S7连接本地ID

宁超

  • 帖子

    1009
  • 精华

    39
  • 被关注

    370

论坛等级:至圣

注册时间:2012-12-11

普通 普通 如何晋级?

发布于 2015-12-20 12:36:06

6楼

   A     #CPU0_MSTR

      JCN   a0x0

      CALL  #S7300GET_ID1

       REQ   :=#REQ

       ID    :=#ID1

       NDR   :=

       ERROR :=

       STATUS:=#GET_STATUS

       ADDR_1:=#GET_ADDR1

       ADDR_2:=

       ADDR_3:=

       ADDR_4:=

       RD_1  :=#GET_RD1

       RD_2  :=

       RD_3  :=

       RD_4  :=


      A     #S7300GET_ID1.NDR

      O     #S7300GET_ID1.ERROR

      JCN   a2x0

      L     1

      L     #POLLING_GET

      +I    

      T     #POLLING_GET

a2x0: NOP   0

      JU    a0x1

a0x0: NOP   0

      CALL  #S7300GET_ID2

       REQ   :=#REQ

       ID    :=#ID2

       NDR   :=

       ERROR :=

       STATUS:=#GET_STATUS

       ADDR_1:=#GET_ADDR1

       ADDR_2:=

       ADDR_3:=

       ADDR_4:=

       RD_1  :=#GET_RD1

       RD_2  :=

       RD_3  :=

       RD_4  :=

      A     #S7300GET_ID2.NDR

      O     #S7300GET_ID2.ERROR

      JCN   a2x1

      L     1

      L     #POLLING_GET

      +I    

      T     #POLLING_GET

a2x1: NOP   0

其实好简单的,准备两个PUT就可以了。一个PUT给ID=1的时候用,另一个给ID=2的时候用。

再奉上CPU判断程序:

//~read cpu information

      A     #REQ

      JCN   h0a0

      CALL  "RDSYSST"

       REQ       :=#REQ

       SZL_ID    :=#SZL_ID

       INDEX     :=#INDEX

       RET_VAL   :=#SFC51_RET

       BUSY      :=#BUSY

       SZL_HEADER:=#SSL_HEADER

       DR        :=#DR

h0a0: NOP   0

   A     #BUSY

      JC    g0a0

//Get Cpu master state

      L     P##DR

      LAR1  

      A      [AR1,P#2.4]

      =     #CPU0_MSTR

      A      [AR1,P#2.5]

      =     #CPU1_MSTR


//get cpu running infomation

      A(    

      L     #DR.Bz_cpu_0

      L     W#16#8

      ==I   

      )     

      O     

      A(    

      L     #DR.Bz_cpu_0

      L     W#16#9

      ==I   

      )     

      =     #CPU0_RUN


      A(    

      L     #DR.Bz_cpu_1

      L     W#16#8

      ==I   

      )     

      O     

      A(    

      L     #DR.Bz_cpu_1

      L     W#16#9

      ==I   

      )     

      =     #CPU1_RUN

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

由SFc51读出的信息DR的内容含义

ContentsLengthMeaning

Redinf2 bytesInformation about redundancy

#16#0011:Single H CPU

#16#0012:1 of 2 H system 

Mwstat1 byteStatus byte 1

bit 0:reserved

bit 1:reserved

bit 2:reserved

bit 3:reserved

bit 4:H status of CPU in rack 0

=0: standby CPU

=1: master CPU

bit 5:H status of CPU in rack 1

=0: standby CPU

=1: master CPU

bit 6:reserved

bit 7:reserved

---------------------------------------------------

Bz_cpu_0 bytesMode of CPU in rack 0

#16#0001: STOP (update)

#16#0002: STOP (reset memory)

#16#0003: STOP (self-initialization)

#16#0004: STOP (internal)

#16#0005: STARTUP (cold restart)

#16#0006: STARTUP (warm restart)

#16#0007: STARTUP (hot restart)

#16#0008: RUN (solo mode)

#16#0009: RUN-R (redundant mode)

#16#000A: HOLD

#16#000B: LINK-UP

#16#000C: UPDATE

#16#000D: DEFECTIVE

#16#000E: SELFTEST

#16#000F: NO POWER

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54623条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。