久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5388|回復: 0
收起左側

S7-300和S7-400尋址

[復制鏈接]
ID:106101 發表于 2016-2-22 22:13 | 顯示全部樓層 |閱讀模式
Addressing for S7-300 and S7-400
Single - FAQ                                                           Edition (2010-9)


摘    本文對S7-300, S7-400 PLC編程過程中,所涉及的尋址方式方法,做了簡單介紹及簡單示例。
關鍵詞  STEP7, 編程,尋址,間接尋址,S7-300, S7-400
Key Words  STEP7, Programming, Addressing, Indirection addressing, S7-300,S7-400

S7-300S7-400尋址
1.S7-300/400系統存儲區域                  
2. S7-300/400 PLC尋址方式                 
      2.1直接尋址      
            2.1.1絕對地址:         
            2.1.2符號尋址:                  
      2.2間接尋址                       
            2.2.1存儲器間接尋址                    
            2.2.2寄存器間接尋址               
            2.2.3 FB/FC的指針參數傳遞            

1 S7-300/400系統存儲區域
S7 CPU的系統存儲區域分為下表中列出的地址區域。在程序中可以根據相應的地址直接讀取數據。
地址區域
可以訪問的地址單位
S7符號
(IEC)
描述
過程映像輸入表
輸入(位)
I
循環掃描周期開始時,CPU從輸入模板讀輸入值并記錄到該區域
輸入(字節)
IB
輸入(字)
IW
輸入(雙字)
ID
過程映像輸出表
輸出(位)
Q
在循環掃描周期中,程序計算輸出值并記錄到該區域。循環掃描周期結束時,CPU將計算結果寫入相應的輸出模板
輸出(字節)
QB
輸出(字)
QW
輸出(雙字)
QD
位存儲器
存儲器(位)
M
該區域用于存儲程序的中間計算結果
存儲器(字節)
MB
存儲器(字)
MW
存儲器(雙字)
MD
定時器
定時器 (T)
T
該區域提供定時器的存儲
計數器
計數器 (C)
C
該區域提供計數器的存儲
數據塊
數據塊,用"OPN DB"打開
DB
數據塊中包含了程序的信息?梢远x為所有邏輯塊共享 (shared DBs) 或指定給一個特定的 FB或 SFB 做背景數據塊(instance DB)。
數據位
DBX
數據字節
DBB
數據字
DBW
數據雙字
DBD
數據塊,用"OPN DI"打開
DI
數據位
DIX
數據字節
DIB
數據字
DIW
數據雙字
DID
局部數據
局部數據位
L
該區域包含塊執行時該塊的臨時數據。L堆棧還提供用于傳遞塊參數及記錄梯形邏輯網絡中間結果的存儲器
局部數據字節
LB
局部數據字
LW
局部數據雙字
LD
外設地址 (I/O)
外設輸入字節
PIB
主站及分布式從站(DP)外設輸入輸出區域允許直接存取
輸入
外設輸入字
PIW
外設輸入雙字
PID
外設地址 (I/O)
外設輸出字節
PQB
輸出
外設輸出字
PQW
外設輸出雙字
PQD

2S7-300/400 PLC尋址方式
2.1直接尋址
在STEP7程序中可以使用輸入輸出信號(I/O),位存儲區(M),計數器(C),計時器(T),數據塊(DB)以及功能塊(FB)等地址。你可以直接訪問這些絕對地址,但是如果給絕對地址以符號(助記符)程序將更易讀懂(例如Motor_A_On, 或者根據你的公司或者工程中的代碼使用別的標識符),而一個你的用戶程序中的地址也就可以用一個符號來訪問。
2.1.1絕對地址:
絕對地址由一個地址標識符和存儲器位置組成。
例如I 0.0,Q 1.7,PIW 256,PQW 512,MD 20,T 15,C 16,DB1.DBB 10,L1 0.0等。
2.1.2符號尋址:
如果給絕對地址分配符號可使程序易讀而簡化故障查找。
STEP7能自動翻譯符號名為要求的絕對地址。如果你準備用符號名訪問 數組,結構,數據塊,局部變量,邏輯塊及用戶自定義數據類型,那么你必須在此之前先分配符號名給絕對地址。
例如, 你可以分配符號名’Motor_On’給地址Q 4.0,然后在程序語句中使用符名’Motor_On’作為地址。
如需在程序中顯示DB里所定義的符號,可以給該DB塊定義一個符號。不能在符號表給DB塊中某地址單獨定義符號。
2.2間接尋址
間接尋址分為存儲器間接尋址和寄存器間接尋址,間接尋址的指針分為16位指針和32位指針,而32位指針又分為內部區域尋址與交叉區域尋址。
2.2.1存儲器間接尋址
16位指針:16位地址指針用于定時器、計數器、程序塊(DB、FC、FB)的尋址,16位指針被看作一個無符號整數(0~65535),它表示定時器(T)、計數器(C)、數據塊(DB、DI)或程序塊(FB、FC)的號,16位指針的格式如下:
圖1

尋址格式表示為:   區域標識符 [ 16位地址指針 ]
例如使一個計數器向上計數表示為:
CU         C [ MW ]
上述指令中,’C’為區域標識符,而’MW20’為一個16位指針。

16位指針存儲器間接尋址舉例:

//用于定時器
L    1
T    MW0                    //將1傳送到MW0
A    I0.0               //如果I0.0 = True
L    S5T#10S
SD T[MW0]         //T1開始計時
//            上述指令可等同于:
A    I0.0
L    S5T#10S
SD T1

//用于打開DB塊
L    20
T    LW20
OPN       DB[LW20]            //打開DB20

//程序調用
L     2
T    LW20
UC  FC[LW20]            //調用FC2

L     41
T    DBW30
UC        FB[DBW30]          //調用FB41

32位指針:32位地址指針用于I、Q、M、L、數據塊等存儲器中位、字節、字及雙字的尋址,32位的地址指針可以使用一個雙字表示,第0位~第2位作為尋址操作的位地址,第3位~第18位作為尋址操作的字節地址,第19位~第31位沒有定義,32位指針的格式如下:

圖 2

存儲器32指針僅用于內部區域尋址。
尋址格式表示為:   地址存儲器標識符  [ 32位地址指針 ]

例如寫入一個M的雙字表示為:
T     MD [ LD0 ]
‘MD’為區域標識符及訪問寬度,而LD0為一個32位指針。

32位內部區域指針可用常數表示, 表示為P# 字節. 。如常數
       P#   10.3
為指向第10個字節第3位的指針常數。
若把一個32位整型轉換為字節指針常數,從上述指針格式可以看出,應要把該數左移3位(或是乘8)即可。
如:       L     L#100           //Accu0裝入32位整形100
SLD       3                   //左移3位
T     LD0               //LD0得到P#100.0指針常數

32位存儲器間接尋址舉例:

//DB塊間接尋址舉例
OPN       DB  1            //打開DB1。
OPN       DI    3            //打開DB3,最多可以同時打開兩個DB塊。
L     4                   //裝載4到累加器1中。
SLD       3                   //累加器1中數值左移3位。
T     MD  20          //將邏輯操作結果傳送到MD20中,MD20                     
                                               //包含地址指針為P#4.0。
L     P#20.0                 //將地址指針P#20.0裝載到MD24中。
T     MD    24
L     320               //320轉換指針為P#40.0并裝載到MD28中。
T        MD      28
L        DBW     [MD 20]                //裝載DB1.DBW4。
L        DBW     [MD 24]                //裝載DB1.DBW20。
+I                                      //相加
L        DIW       [MD 28]                //裝載DB3.DBW40。
-I                                  //相減。
T        DIW    2                     //將運算結果傳送到DB3.DBW2中。
JZ       m1

//M存儲器連續區域操作
L        0                            //初始化MW100和MD4。
T        MW      100
T        MD            4
OPN   DB     1                //打開DB1。
L    100                           //循環操作的次數,100次。
NEXT:    T        MW      100 //將循環100次裝載到MW100中,固定格式。                           L            MW       2            //進行比較的數值存儲于MW2。
L     DBW     [MD 4]           //與DB塊中存儲的值進行比較,開始地址為DBW0。
==I                           //如果數值相等跳到m1。
JC   m1
L        MD            4                //將地址指針加2(每個相鄰的字地址相差2)。
L        P#2.0
+D   
T        MD            4
L        MW      100               //次數減1,跳回next,如果MW100等于0,跳
LOOP    NEXT                   //出循環操作LOOP指令,LOOP指令固定格式。
m1:      FP   M    10.0           //如果數值相當,記錄MD4指針的數據,將轉換為數組                     
JCN     m2                          //的位置((地址值/P#2.0)+1)值存儲于MD8中。
L        MD      4
L        P#2.0
/D   
+     L#1
T        MD            8
m2:      NOP   0

2.2.2寄存器間接尋址
通過CPU的地址寄存器AR1和AR2尋址方式稱為寄存器間接尋址,分為內部區域間接尋址和交叉區域尋址。使用寄存器間接尋址方式的程序語句包含以下部分:

指令,地址標識符,地址寄存器標識符,偏移量

AR1,AR2均為32位寄存器,寄存器間接尋址只使用32位指針。
與ARx相關的指令有:

LAR1, LAR2, TAR1, TAR2, +AR1, +AR2, LAR1 AR2, CAR等。
以上指令使用請參考手冊:開始 -> (所有)程序 -> SIMATIC -> Documentation -> English -> STEP 7 – Statement List for S7-300 and S7-400。
或點擊下載該手冊中文版

內部區域寄存器間接尋址
指針格式與存儲器間接尋址的32位指針相同,第0位~第2位作為尋址操作的位地址,第3位~第18位作為尋址操作的字節地址,第19位~第31位沒有定義,32位指針的格式如下:

圖 3
間接尋址表示為:存儲器標識符 [ ARx, 地址偏移量 ]
如:
L     MW [AR1, P#2.0]
‘MW’為被訪問的存儲器及訪問寬度,’AR1’為地址寄存器1,P#2.0為地址偏移量。

內部區域寄存尋址舉例:

//DB塊寄存器內部尋址
OPN   DB     1            //打開DB1。
LAR1    P#10.0         //將指針P#10.0 裝載到地址寄存器1中。
L        DBW      [AR1, P#12.0]     //將DBW22裝載到累加器1中。
LAR1    MD      20                   //將存儲于MD20中的指針裝載到地址寄存器1中。                                               
L        DBW     [AR1, P#0.0] //將DBW裝載到累加器1中,地址存儲于MD20中。                                          
+I
LAR2    P#40.0                        //將指針P#40.0 裝載到地址寄存器2中。
T        DBW     [AR2, P#0.0] //運算結果傳送到DBW40中。

//DI、DO區寄存器內部尋址
L     P#8.7                   //裝載指向第8字節第7位的指針值到累加器1
LAR1                                     //累加器1中的指針裝載到AR1
A     I     [AR1, P#0.0] //查詢I8.7的信號狀態
=    Q    [AR1, P#1.1] //給輸出位Q10.0賦值

交叉區域寄存器間接尋址
包含有存儲器區域信息的指針,稱為交叉區域指針。
同樣,交叉區域指針為32位,寄存器間接尋址要使用地址寄存器AR1或AR2。
32位交叉區域指針,左起0~18位格式與32位內部區域指針相同,19~23位,27~30位未定義,31位為交叉區域指針標識位。
24~26位是存儲區域地址標識,8中組合表示8種存儲器區域:
000     表示沒有地址區,例如P#12.0;
001     表示輸入地址區I,例如P#I12.0;
010     表示輸出地址區Q,例如P#Q12.0;
011     表示標志位地址區M,例如P#M12.0;
100     表示數據塊(DB)中的數據,例如P#DB1.DBX12.0
101     表示數據塊(DI)中的數據,例如P#DI1.DIX12.0
110     表示區域地址區L,例如P#L12.0;
111     表示調用程序塊的區域地址區V,例如P#V12.0;
交叉區域指針格式如下:

圖 4

交叉區域指針常數表達為:P#   存儲器  字節 .

例如:    P#Q10.5              //指向Q區第10字節第5位的指針常
       P#DB1.DBX32.0  //指向DB1區域的第32字節第0位的指針常數

交叉區域尋址表示為:       訪問寬度 [ ARx, 偏移量 ]
例如:    L     W [ AR2, P#1.0 ]
       ‘W’為訪問寬度,AR2為地址寄存器2,P#1.0為偏移量。

交叉區域間接尋址舉例:
//M存儲區
L     P#M20.0
LAR1
L     1234
T     W [ AR1, P#2.0]

//I存儲區
L     P#I0.0
LAR2
L     W[ AR2, P#0.0 ]
T     MW0

2.2.3 FB/FC的指針參數傳遞
在使用FB/FC形參傳遞指針參數時,16位、32位指針是可用的,但POINTER與ANY指針類型也是常見的類型,因為更方便。
16指針用于參數傳遞
例如:
//編寫一個FC,作用是啟動條件滿足后延時3秒輸出閉合信號
//定義FC的形參如下:
圖 5
//程序如下:
L     #Pointer16
T     LW     0            //將16位指針裝入LW0
A     #Start                   //Start參數 = True時
L     S5T#3S        //計時3秒
SD  T [LW 0]
A     T [LW 0]        //計時器計時到
=     #Motor                 //輸出Motor = True   

*32指針用于參數傳遞
//編寫一個FC,作用是將輸入DB塊指定的區域 (實數) 求出平均值
//定義形參如下:
圖 6
//程序如下:
      L     #DB_No
      T     LW     0          //裝載DB塊號至LW0
      OPN   DB [LW 0]                //并打開該DB塊

      L     #Data_1st
      T     LD     2                         //裝載第一個要計算的實數的32指針至LD0

      L     0
      T     LD     8                         //將'和'初始為 0

      L     #Len                              //長度
NEXT:        T     LW     6             //實數的個數裝載至LW6, 并且進入一個LOOP循環
      L     DBD [LD 2]              //讀取LD2指針位置的實數
      L     LD     8
      +R                                      //與'和'相加
      T     LD     8                         //結果存到'和'中
      L     LD     2                          //裝入指針
      L     P#4.0
      +D                                      //指針加4個字節
      T     LD     2                         //結果仍存入LD2,此時LD2指針指向下一個實數

      L     LW     6                         //循環計數
      LOOP  NEXT                        //LOOP循環的結束

      L     #Len                         //將實數個數由INT轉成REAL
      ITD  
      DTR  
      T     LD    12
      L     LD     8                          //'和'除以實數格式的實數個數
      TAK
      /R   
      T     #Average_out            //得到平均值,通過Average_out輸出

POINTER數據類型及參數傳遞
POINTER是一種用于傳遞指針的形參數據類型,長度為6個字節。用于向被調用的函數FC及函數塊FB傳遞復合數據類型(如ARRAY、STRUCT及DT等)的實參。在被調用的函數FC及函數塊FB內部可以間接訪問實參的存儲器。
格式如下:
圖 7
POINTER參數中,數據區含義如下:
16進制代碼
數據區
簡單描述
B#16#81
I
輸入區
B#16#82
Q
輸出區
B#16#83
M
標志位
B#16#84
DB
數據塊
B#16#85
DI
背景數據塊
B#16#86
L
區域數據區
B#16#87
V
上一級賦值的區域數據
表 1
若數據區為B#16#84,那么表示該POINTER指針是一個DB塊地址,DB塊號區域應當是所指向的DB塊號(INT類型)并且不為零。
(請參考ANY數據類型舉例)
ANY數據類型及參數傳遞
ANY是一種用于傳遞指針的形參數據類型,可視為POINTER類型的擴展,較POINTER類型為復雜,長度為10個字節,增加的4字節,最高字節 (Byte 0) 固定為B#16#10,第二字節 (Byte 1) 為ANY指針所指向區域的數據類型,而接下來的2字節 (BYTE 3, 4) 組合為一個INT,為ANY指針所指定區域的長度,稱為重復系數 (Repetition factor) 。其余6字節作用與POINTER類型相同。
格式如下
圖 8

其中數據類型含義為:
數據類型代碼
十六進制代碼
數據類型
簡單描述
B#16#00
NIL

B#16#01
BOOL

B#16#02
BYTE
8位字節
B#16#03
CHAR
8位字符
B#16#04
WORD
16位字
B#16#05
INT
16位整形
B#16#06
DWORD
32位雙字
B#16#07
DINT
32位雙整形
B#16#08
REAL
32位浮點
B#16#09
DATE
IEC日期
B#16#0A
TIME_OF_DAY(TOD)
24小時時間
B#16#0B
TIME
IEC時間
B#16#0C
S5TIME
SIMATIC時間
B#16#0E
DATE_AND_TIME(DT)
時鐘
B#16#13
STRING
字符串
B#16#17
BLOCK_FB
FB號
B#16#18
BLOCK_FC
FC號
B#16#19
BLOCK_DB
DB號
B#16#1A
BLOCK_SDB
SDB號
B#16#1C
COUNTER
計數器
B#16#1D
TIMER
定時器
表 2

編程舉例:
//冒泡排序程序,算法原理請參考相關資料
//此例程僅提供存于DB塊中的INT類型數據排序
//結果為INT數據由小到大排列,保存于原DB塊中
//FC3塊,形參定義如下:
圖 9

//輸入參數Data(Any類型);輸出參數Error(INT類型)
//若輸出參數Error不為0, 則說明排序未進行,
//Error = 1, Data(ANY類型)輸入指針無效
//Error = 2, Data(ANY類型)輸入指針地址非DB地址
//Error = 3, Data(ANY類型)輸入指針指定區域類型非INT類型


      SET  
      SAVE
      L     0
      T     #Error

//將輸入ANY指針'Data_In'復制到LB0~LB9
      L     P##Data
      LAR1
      L     D [AR1,P#0.0]
      T     LD     0
      L     D [AR1,P#4.0]
      T     LD     4
      L     W [AR1,P#8.0]
      T     LW     8

//ANY指針BYTE0是B#16#10
      L     LB     0
      L     B#16#10
      ==I  
      JCN   ERR1

//輸入數據區是否為DB塊
      L     LB     6
      L     B#16#84
      ==I  
      JCN   ERR2

//類型為INT
      L     LB     1
      L     B#16#5
      ==I  
      JCN   ERR3

//打開輸入DB塊
      OPN   DB [LW 4]

//數據起始地址去掉數據區標識部分
      L     LD     6
      L     DW#16#FFFFFF
      AD   
      T     LD    10
//計算最后一個存儲單元指針保存至LD10
      L     LW     2
      L     2
      *I   
      T     LD    14
      L     L#2
      -D   
      SLD   3
      L     LD    10
      +D   
      T     LD    10

//外循環計數LW20,循環次數為(數據個數-1)次
      L     LW     2
      L     1
      -I   
NXT2: T     LW    20
      L     LD    10
      LAR1
      L     LW    20

//嵌套循環計數LW18,循環次數為(LW20)次
NXT1: T     LW    18
      TAR1
      L     P#2.0
      -D   
      LAR1

//后一單元數據小于前一單元數據?
      L     DBW [AR1,P#2.0]
      L     DBW [AR1,P#0.0]
      <I   
      JCN   L1

//否,交換2單元數據
      L     DBW [AR1,P#2.0]
      L     DBW [AR1,P#0.0]
      T     DBW [AR1,P#2.0]
      POP  
      T     DBW [AR1,P#0.0]

L1:   L     LW    18
     LOOP  NXT1
      L     LW    20
     LOOP  NXT2
      JU    EXIT
//錯誤碼1,ANY指針有錯
ERR1: L     1
      T     #Error
      JU    EXIT

//錯誤碼2,輸入數據區不是DB塊
ERR2: L     2
      T     #Error
      JU    EXIT

//錯誤碼3,輸入數據類型不是INT
ERR3: L     3
      T     #Error

EXIT:     SET
       SAVE

OB1程序中調用舉例:
      A     M      0.0
      FP    M      0.1
      JCN   EXIT
      CALL  FC     3                 //FC3為上述排序程序
         Data  :=P#DB3.DBX 0.0 INT 64  //參數Data, DB3中64個INT排序
        Error  :=MW2
EXIT: NOP   0

如果您對該文檔有任何建議,請將您的寶貴建議提交至下載中心留言板。
該文檔的文檔編號:F0215


附錄-推薦網址
自動化系統
西門子(中國)有限公司
工業自動化與驅動技術集團 客戶服務與支持中心
自動化系統 下載中心http://www.ad.siemens.com.cn/dow ... Id=0&CatFirst=1   
自動化系統 全球技術資源http://support.automation.siemens.com/CN/view/zh/10805045/130000
“找答案”自動化系統版區:http://www.ad.siemens.com.cn/service/answer/category.asp?cid=1027


注意事項

應用示例與所示電路、設備及任何可能結果沒有必然聯系,并不完全相關。應用示例不表示客戶的具體解決方案。它們僅對典型應用提供支持。用戶負責確保所述產品的正確使用。這些應用示例不能免除用戶在確保安全、專業使用、安裝、操作和維護設備方面的責任。當使用這些應用示例時,應意識到西門子不對在所述責任條款范圍之外的任何損壞/索賠承擔責任。我們保留隨時修改這些應用示例的權利,恕不另行通知。如果這些應用示例與其它西門子出版物(例如,目錄)給出的建議不同,則以其它文檔的內容為準。

聲明

我們已核對過本手冊的內容與所描述的硬件和軟件相符。由于差錯難以完全避免,我們不能保證完全一致。我們會經常對手冊中的數據進行檢查,并在后續的版本中進行必要的更正。歡迎您提出寶貴意見。
版權© 西門子(中國)有限公司2001-2008 版權保留
復制、傳播或者使用該文件或文件內容必須經過權利人書面明確同意。侵權者將承擔權利人的全部損失。權利人保留一切權利,包括復制、發行,以及改編、匯編的權利。

西門子(中國)有限公司




回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清久久久 | 久久伊人精品一区二区三区 | 99热热99| 先锋资源网站 | 日韩欧美亚洲一区 | 国产一区二区三区欧美 | 免费在线h视频 | 91亚洲国产 | 久久久久亚洲精品 | 国产精品亚洲一区 | 欧美一区二区三区小说 | 亚洲一区视频在线 | 成人在线精品 | 国产成人福利在线观看 | 日韩影院在线观看 | 日本久久精品视频 | 欧美色综合一区二区三区 | 一区二区视频免费观看 | 精品成人在线 | 天天操综合网站 | 自拍偷拍第一页 | 天天天天天天天干 | 欧美第一页 | 2018天天干天天操 | 日韩视频观看 | 欧美日韩国产精品一区 | 日韩高清一区 | 特级毛片爽www免费版 | 在线免费av电影 | 美女久久久久久久 | 国产成人精品一区二区三区网站观看 | 天天天天操 | 日韩一区二区在线视频 | 欧美精品一区二区在线观看 | 日本在线看片 | 欧美99 | 最新中文字幕久久 | 亚洲一区中文字幕在线观看 | 中文字幕国产日韩 | 亚洲视频在线观看一区二区三区 | 日本手机看片 |