haipingyuer
级别: 论坛先锋
精华主题: 0
发帖数量: 126 个
工控威望: 1756 点
下载积分: 715 分
在线时间: 81(小时)
注册时间: 2012-09-06
最后登录: 2016-04-26
查看haipingyuer的 主题 / 回贴
楼主  发表于: 2013-11-16 16:09
本人最近开始做西门子300的项目了,大家谁有300的间接寻址的例子啊   看手册看得有点迷糊了   望大家指点         本人做过200的间接寻址和for循环
男儿当自强
xkqxwhz
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 124 点
下载积分: 562 分
在线时间: 5(小时)
注册时间: 2013-12-11
最后登录: 2021-12-15
查看xkqxwhz的 主题 / 回贴
1楼  发表于: 2013-12-12 09:58
   OPN   #iDrive_IntfcDB
      L     DBNO
      T     #tDriveIntfcDBNum
      LAR1  P##tOutputsPointer

      L     B#16#10                     // 10 hex = S7 Data Type
      T     LB [AR1,P#0.0]              // Transfer to Source pointer byte 0

      L     B#16#2                      // 2 hex = byte data type
      T     LB [AR1,P#1.0]              // Transfer to Source pointer byte 1

      L     24                          // How many bytes to move
      T     LW [AR1,P#2.0]              // Transfer to Source pointer bytes 2-3

      L     #tDriveIntfcDBNum           // Load DB Number
      T     LW [AR1,P#4.0]              // Transfer to Source pointer bytes 4-5

      L     172                         // Load start address of data
      SLD   3                           // Shift data in AR1 3 bits to the left    
      T     LD [AR1,P#6.0]              // Trasfer to Source Pointer bytes 6-9

      L     B#16#84                     // 84 hex = DB memory area
      T     LB [AR1,P#6.0]              // Transfer to Source pointer byte 6

//Copy Outputs From Drive Interface DB To Local Copy
      CALL  SFC   20
       SRCBLK :=#tOutputsPointer
       RET_VAL:=#tRetVal
       DSTBLK :=#tDriveIntfc.Output
xkqxwhz
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 124 点
下载积分: 562 分
在线时间: 5(小时)
注册时间: 2013-12-11
最后登录: 2021-12-15
查看xkqxwhz的 主题 / 回贴
2楼  发表于: 2013-12-12 09:59
    TAR2  #tTempAR2

// Create Pointer To HMI Data

      L     P##iHMIData
      AD    DW#16#FFFFFF
      LAR1  


      LAR2  P##tHMIDataPointer

      L     DIB [AR1,P#0.0]             // 10 hex = S7 Data Type
      T     LB [AR2,P#0.0]              // Transfer to Source pointer byte 0

      L     DIB [AR1,P#1.0]             // 2 hex = byte data type
      T     LB [AR2,P#1.0]              // Transfer to Source pointer byte 1

      L     DIW [AR1,P#2.0]             // How many bytes to move
      T     LW [AR2,P#2.0]              // Transfer to Source pointer bytes 2-3

      L     DIW [AR1,P#4.0]             // Load DB Number
      T     LW [AR2,P#4.0]              // Transfer to Source pointer bytes 4-5

      L     DID [AR1,P#6.0]             // Load start address of data
      T     LD [AR2,P#6.0]              // Trasfer to Source Pointer bytes 6-9


      LAR2  #tTempAR2                   // Restore AR2
xkqxwhz
级别: 探索解密
精华主题: 0
发帖数量: 11 个
工控威望: 124 点
下载积分: 562 分
在线时间: 5(小时)
注册时间: 2013-12-11
最后登录: 2021-12-15
查看xkqxwhz的 主题 / 回贴
3楼  发表于: 2013-12-12 10:01
      L     0
      T     #tPrevOpOffset

//////Get 1st Op Status Byte Number
      L     P##iFirstRFReadOpStatusByte
      AD    DW#16#FFFFFF
      LAR1  

      L     DID [AR1,P#6.0]             // Load start address of data
      AD    DW#16#FFFFFF
      SRD   3
      T     #t1stOpByteNum
      L     #sOMS_OPHeader.OPstatusAddress
      ==I  
      JCN   _200
      S     #qAllPrevOpsOkToBuild
      JU    NoCk

_200: L     #sOMS_OPHeader.OPstatusAddress
      L     #t1stOpByteNum
      -I    
PrOp: T     #tPrevOpLoop

      LAR1  P##tPrevOpStatusPointer

      L     B#16#10                     // 10 hex = S7 Data Type
      T     LB [AR1,P#0.0]              // Transfer to Source pointer byte 0

      L     B#16#2                      // 2 hex = byte data type
      T     LB [AR1,P#1.0]              // Transfer to Source pointer byte 1

      L     2                           // How many bytes to move
      T     LW [AR1,P#2.0]              // Transfer to Source pointer bytes 2-3

      L     #sRFReadDBNum
      T     LW [AR1,P#4.0]

      L     #t1stOpByteNum              // Transfer to Source pointer bytes 4-5
      L     #tPrevOpOffset              // Load start address of data
      +I    
      SLD   3
      T     LD [AR1,P#6.0]              // Shift data in AR1 3 bits to the left    

      L     B#16#84                     // Trasfer to source pointer bytes 6-9
      T     LB [AR1,P#6.0]              // 84 hex = DB memory area

      CALL  SFC   20                    // Transfer to source pointer byte 6
       SRCBLK :=#tPrevOpStatusPointer
       RET_VAL:=#tRetVal
       DSTBLK :=#tCurrPrevOp

      SET  
      O     #tCurrPrevOp.Accept
      O     #tCurrPrevOp.NoOperation
      JCN   PrRj

      L     1
      L     #tPrevOpOffset
      +I    
      T     #tPrevOpOffset

      L     #tPrevOpLoop
      LOOP  PrOp

      S     #qAllPrevOpsOkToBuild
      L     0
      T     #qPrevOperRejRFByte
      T     #sPrevOperRejRFByte


      JU    NoCk

PrRj: S     #qPreviousOperReject

      L     #t1stOpByteNum              // Transfer to Source pointer bytes 4-5
      L     #tPrevOpOffset              // Load start address of data
      +I    
      T     #qPrevOperRejRFByte
      T     #sPrevOperRejRFByte
NoCk: NOP   0