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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5302|回復: 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
數據塊中包含了程序的信息。可以定義為所有邏輯塊共享 (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 版權保留
復制、傳播或者使用該文件或文件內容必須經過權利人書面明確同意。侵權者將承擔權利人的全部損失。權利人保留一切權利,包括復制、發行,以及改編、匯編的權利。

西門子(中國)有限公司




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人小视频在线观看 | 91在线观看 | 国产成人免费视频网站高清观看视频 | 北条麻妃国产九九九精品小说 | 亚洲精品国产电影 | 青久草视频 | 中文字幕在线观 | av在线视| 欧美日韩电影在线 | 国产欧美日韩在线 | 成人在线网 | 国产精品18hdxxxⅹ在线 | 成人高清网站 | 久久精品成人 | 高清视频一区二区三区 | 欧美日韩不卡 | 亚洲自拍一区在线观看 | 91久久精品一区二区三区 | 国产精品久久久久久久久久久久冷 | 国精产品一品二品国精在线观看 | 日韩不卡一区二区 | 中文字幕日韩一区 | 久久综合久久综合久久综合 | 成人片网址 | 国产日韩免费观看 | 无码日韩精品一区二区免费 | 成人 在线 | 免费在线观看一区二区三区 | 9999精品视频| 国产一区二区三区免费视频 | 亚洲精品91| 久久精品亚洲成在人线av网址 | 中文字幕在线网 | av永久 | 日韩精品一区在线 | 国产精品亚洲综合 | 麻豆久久久久久久久久 | 亚洲国产精品一区二区第一页 | 久久三区 | 久久精品国产免费 | 中文在线视频观看 |