STL程序疑问

已锁定

摄氏度温度

  • 帖子

    30
  • 精华

    0
  • 被关注

    1

论坛等级:游侠

注册时间:2017-07-28

普通 普通 如何晋级?

STL程序疑问

667

2

2021-03-31 09:04:05

 SET

      =     #REQ

//---------- Check DevCnt (>= 1 and <= 16)

      L     #IN_DEVICE_COUNT

      +     -1

      AW    16#FFF0

      JN    ErrP

//---------- Presence Bit for each of the device

      L     #IN_DEVICE_COUNT

      L     WORD#16#FFFF

      SLW

      INVI

      CAW                        //Device 1 => Bit 8 ... Device 9 => Bit 0

      T     #DevMask

//---------- Initializations

      L     BYTE#16#00

      T     #OUT_DIAG.Codedef

      T     #MODE

      T     #Sts.ActReq

      T     #Sts.DeaReq

      L     #DevMask

//---------- First Cycle Deactivation Request

      ON    #IN_SYSFROID

      ON    #OUT_DEACTIVATED

      JC    x0

      T     #Sts.DeaReq          //for each of the device

      T     #Sts.Act             //Activated

      JU    x2

//---------- Activation Request

x0:   AN    #IN_ACT_REQ

      AN    #PILOT.HmiActReq

      JC    x1

      T     #Sts.ActReq          //for each of the device

//---------- Deactivation Request

x1:   AN    #IN_DEA_REQ

      AN    #PILOT.HmiDeaReq

      JC    x2

      T     #Sts.DeaReq          //for each of the device

//---------- Deactivation

x2:   L     #Sts.ActMod          //Activation in progress

      L     #Sts.Act             //Activated

      OW

      L     #Sts.DeaReq          //Deactivation Request

      AW

      L     #Sts.DeaMod          //Deactivation in progress

      OW

      L     #Sts.EndMod          //End

      INVI

      AW

      L     #DevMask

      AW

      T     #Sts.DeaMod          //Deactivation

      A <>0

      =     #Deactivating        //Deactivation in progress

//---------- Activation

      L     #Sts.Dea             //Deactivated

      L     #Sts.ActReq          //Activation Request

      AW

      L     #Sts.ActMod          //Activation in progress

      OW

      L     #Sts.EndMod          //End

      INVI

      AW

      L     #Sts.DeaMod          //Deactivation in progress

      INVI

      AW

      L     #DevMask

      AW

      T     #Sts.ActMod          //Activation

      A <>0

      =     #Activating          //Activation in progress

//----------

      O     #Activating

      O     #Deactivating

      =     #OUT_BUSY            //Activation or Deactivation in progress

//---------- Loop Initialization

      L     #IN_FIRST_DEVNUM     //Initialize DevNum

      T     #DevNum

      LAR1 AR2                   //Initialize address register (AR1)

      L     P##Sts

      +AR1

      L     #IN_DEVICE_COUNT     //Initialize LoopCnt

Loop: T     #LoopCnt


//---------- Get Logic Address

      L     2

      T     #GeoADDR.HWTYPE      //HW type out of DTI_type of the HW object

      L     1

      T     #GeoADDR.AREA        //Format and area: 0=central, 1= PNIO, 2= DP, 3= AS-i

      L     100

      T     #GeoADDR.IOSYSTEM    //Master system ID

      L     #DevNum

      T     #GeoADDR.STATION     //Station number,

      L     0

      T     #GeoADDR.SLOT        //Slot Number

      L     0

      T     #GeoADDR.SUBSLOT     //Subslot number, 0= no subslot


      CALL  GEO2LOG              // Get Logic Address of the device

         GEOADDR :=#GeoADDR

         RET_VAL :=#RET

         LADDR   :=#LADDR


      L     #RET

      L     BYTE#16#00

      <>D

      = DIX [ AR1 , P#14.0 ]     //Sts.Err[]

      JC    Err

//----------

      A DIX [ AR1 , P#4.0 ]      //Sts.ActMod[]

      =     %L0.0                //Mode.X0 -> Mode = 1 (Activation)

      A DIX [ AR1 , P#6.0 ]      //Sts.DeaMod[]

      =     %L0.1                //Mode.X1 -> Mode = 2 (Deactivation)

//----------

      T     #_Accu1Safe

      TAK

      T     #_Accu2Safe

      CALL  D_ACT_DP

         REQ     :=#REQ

         MODE    :=#MODE

         LADDR   :=#LADDR

         RET_VAL :=#RET

         BUSY    :=#BUS

      L     #_Accu2Safe

      L     #_Accu1Safe

// ---------- Evaluate result

      L     #RET

      L     BYTE#16#00           //Request completed without errors

      ==D

      = DIX [ AR1 , P#8.0 ]      //EndMod[]

// ---------- Evaluate result

      POP                        //RET

      L     BYTE#16#01           //IO device is active (and Mode = 0)

      ==D

      = DIX [ AR1 , P#10.0 ]     //Sts.Act[]

// ---------- Evaluate result

      POP                        //RET

      L     BYTE#16#02           //IO device is deactivated (and Mode = 0)

      ==D

      = DIX [ AR1 , P#12.0 ]     //Sts.Dea[]

// ---------- Evaluate result

      POP                        //RET

      L     WORD#16#80C3         //Temporary resource error

      <>D

// ----------Evaluate result

      POP                        //RET

      L     WORD#16#8000         //Other error

      AW

      A <>0

      = DIX [ AR1 , P#14.0 ]     //Sts.Err[]

      JCN   NErr

Err:  L     #OUT_DIAG.Codedef

      L     BYTE#16#00

      <>D

      JC    NErr

      L     #RET

      T     #OUT_DIAG.Codedef

// ---------- Next Device

NErr: +AR1  P#0.1

      L     #DevNum

      +     1

      T     #DevNum

      L     #LoopCnt

      LOOP  Loop

//---------- All devices activated

      L     #DevMask

      L     #Sts.Act

      AW

      ==D

      =     #OUT_ACTIVATED

//---------- All devices deactivated

      POP                        //DevMask

      L     #Sts.Dea

      AW

      ==D

      =     #OUT_DEACTIVATED

//---------- Time mesurement

      A     #Activating

      FN    #XAct

      AN    #Deactivating

      JCN   T

      L     #TONAct.ET

      L     #TONAct.PT

      ==D

      JC    T

      POP                        //TONAct.ET

      T     #TAct

      L     #TActMax

      >D

      JCN   Min

      POP                        //TONAct.ET

      T     #TActMax

Min:  L     #TAct

      L     #TActMin

      <D

      JCN   T

      POP                        //TONAct.ET

      T     #TActMin

T:    CALL  #TONAct

         time_type:=Time

         IN :=#Activating

         PT :=T#30S

         Q  :=

         ET :=


//---------- Error

Def:  L     #OUT_DIAG.Codedef

      L     BYTE#16#00

      <>D

      =     #OUT_DEFAULT

      =     #OUT_DIAG.Def

      L     BYTE#16#01           //Error

      JC    TSts

      A     #OUT_DEACTIVATED

      L     BYTE#16#02           //All devices of the group deactivated

      JC    TSts

      A     #OUT_ACTIVATED

      L     BYTE#16#03           //All devices of the group activated

      JC    TSts

      A     #Deactivating

      L     BYTE#16#04           //Activation in progress

      JC    TSts

      L     BYTE#16#05           //Deactivation in progress

TSts: T     #OUT_DIAG.HmiSts

      BEU

ErrP: L     WORD#16#827F         //DevCnt < 1 or DevCnt > 16

      T     #OUT_DIAG.Codedef

      JU    Def

以上是整个STL程序段,有以下几个疑问:

1、T     #_Accu1Safe和T     #_Accu2Safe这两个变量被赋值成什么,是由赋值的;

2、POP                        //RET

      L     BYTE#16#01           //IO device is active (and Mode = 0)

      ==D

      = DIX [ AR1 , P#10.0 ]     //Sts.Act[]

Sts.Act[]监控的时候发现值是16#0300,此处只给一个位,为什么能出现16#0300呢?另外这个16#0300的值是从哪来的呢?

希望各位大神不吝赐教,谢谢!附件是接口变量

新建 XLS 工作表 (3).xls


STL程序疑问 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10698条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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