找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5303|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

S7-300和S7-400尋址

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:106101 發(fā)表于 2016-2-22 22:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Addressing for S7-300 and S7-400
Single - FAQ                                                           Edition (2010-9)


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

S7-300S7-400尋址
1.S7-300/400系統(tǒng)存儲(chǔ)區(qū)域                  
2. S7-300/400 PLC尋址方式                 
      2.1直接尋址      
            2.1.1絕對(duì)地址:         
            2.1.2符號(hào)尋址:                  
      2.2間接尋址                       
            2.2.1存儲(chǔ)器間接尋址                    
            2.2.2寄存器間接尋址               
            2.2.3 FB/FC的指針參數(shù)傳遞            

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

2S7-300/400 PLC尋址方式
2.1直接尋址
在STEP7程序中可以使用輸入輸出信號(hào)(I/O),位存儲(chǔ)區(qū)(M),計(jì)數(shù)器(C),計(jì)時(shí)器(T),數(shù)據(jù)塊(DB)以及功能塊(FB)等地址。你可以直接訪問(wèn)這些絕對(duì)地址,但是如果給絕對(duì)地址以符號(hào)(助記符)程序?qū)⒏鬃x懂(例如Motor_A_On, 或者根據(jù)你的公司或者工程中的代碼使用別的標(biāo)識(shí)符),而一個(gè)你的用戶程序中的地址也就可以用一個(gè)符號(hào)來(lái)訪問(wèn)。
2.1.1絕對(duì)地址:
絕對(duì)地址由一個(gè)地址標(biāo)識(shí)符和存儲(chǔ)器位置組成。
例如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符號(hào)尋址:
如果給絕對(duì)地址分配符號(hào)可使程序易讀而簡(jiǎn)化故障查找。
STEP7能自動(dòng)翻譯符號(hào)名為要求的絕對(duì)地址。如果你準(zhǔn)備用符號(hào)名訪問(wèn) 數(shù)組,結(jié)構(gòu),數(shù)據(jù)塊,局部變量,邏輯塊及用戶自定義數(shù)據(jù)類型,那么你必須在此之前先分配符號(hào)名給絕對(duì)地址。
例如, 你可以分配符號(hào)名’Motor_On’給地址Q 4.0,然后在程序語(yǔ)句中使用符名’Motor_On’作為地址。
如需在程序中顯示DB里所定義的符號(hào),可以給該DB塊定義一個(gè)符號(hào)。不能在符號(hào)表給DB塊中某地址單獨(dú)定義符號(hào)。
2.2間接尋址
間接尋址分為存儲(chǔ)器間接尋址和寄存器間接尋址,間接尋址的指針?lè)譃?6位指針和32位指針,而32位指針又分為內(nèi)部區(qū)域?qū)ぶ放c交叉區(qū)域?qū)ぶ贰?br /> 2.2.1存儲(chǔ)器間接尋址
16位指針:16位地址指針用于定時(shí)器、計(jì)數(shù)器、程序塊(DB、FC、FB)的尋址,16位指針被看作一個(gè)無(wú)符號(hào)整數(shù)(0~65535),它表示定時(shí)器(T)、計(jì)數(shù)器(C)、數(shù)據(jù)塊(DB、DI)或程序塊(FB、FC)的號(hào),16位指針的格式如下:
圖1

尋址格式表示為:   區(qū)域標(biāo)識(shí)符 [ 16位地址指針 ]
例如使一個(gè)計(jì)數(shù)器向上計(jì)數(shù)表示為:
CU         C [ MW ]
上述指令中,’C’為區(qū)域標(biāo)識(shí)符,而’MW20’為一個(gè)16位指針。

16位指針存儲(chǔ)器間接尋址舉例:

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

//用于打開(kāi)DB塊
L    20
T    LW20
OPN       DB[LW20]            //打開(kāi)DB20

//程序調(diào)用
L     2
T    LW20
UC  FC[LW20]            //調(diào)用FC2

L     41
T    DBW30
UC        FB[DBW30]          //調(diào)用FB41

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

圖 2

存儲(chǔ)器32指針僅用于內(nèi)部區(qū)域?qū)ぶ贰?br /> 尋址格式表示為:   地址存儲(chǔ)器標(biāo)識(shí)符  [ 32位地址指針 ]

例如寫入一個(gè)M的雙字表示為:
T     MD [ LD0 ]
‘MD’為區(qū)域標(biāo)識(shí)符及訪問(wèn)寬度,而LD0為一個(gè)32位指針。

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

32位存儲(chǔ)器間接尋址舉例:

//DB塊間接尋址舉例
OPN       DB  1            //打開(kāi)DB1。
OPN       DI    3            //打開(kāi)DB3,最多可以同時(shí)打開(kāi)兩個(gè)DB塊。
L     4                   //裝載4到累加器1中。
SLD       3                   //累加器1中數(shù)值左移3位。
T     MD  20          //將邏輯操作結(jié)果傳送到MD20中,MD20                     
                                               //包含地址指針為P#4.0。
L     P#20.0                 //將地址指針P#20.0裝載到MD24中。
T     MD    24
L     320               //320轉(zhuǎn)換指針為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                     //將運(yùn)算結(jié)果傳送到DB3.DBW2中。
JZ       m1

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

2.2.2寄存器間接尋址
通過(guò)CPU的地址寄存器AR1和AR2尋址方式稱為寄存器間接尋址,分為內(nèi)部區(qū)域間接尋址和交叉區(qū)域?qū)ぶ。使用寄存器間接尋址方式的程序語(yǔ)句包含以下部分:

指令,地址標(biāo)識(shí)符,地址寄存器標(biāo)識(shí)符,偏移量

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

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

內(nèi)部區(qū)域寄存器間接尋址
指針格式與存儲(chǔ)器間接尋址的32位指針相同,第0位~第2位作為尋址操作的位地址,第3位~第18位作為尋址操作的字節(jié)地址,第19位~第31位沒(méi)有定義,32位指針的格式如下:

圖 3
間接尋址表示為:存儲(chǔ)器標(biāo)識(shí)符 [ ARx, 地址偏移量 ]
如:
L     MW [AR1, P#2.0]
‘MW’為被訪問(wèn)的存儲(chǔ)器及訪問(wèn)寬度,’AR1’為地址寄存器1,P#2.0為地址偏移量。

內(nèi)部區(qū)域寄存尋址舉例:

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

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

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

圖 4

交叉區(qū)域指針常數(shù)表達(dá)為:P#   存儲(chǔ)器  字節(jié) .

例如:    P#Q10.5              //指向Q區(qū)第10字節(jié)第5位的指針常
       P#DB1.DBX32.0  //指向DB1區(qū)域的第32字節(jié)第0位的指針常數(shù)

交叉區(qū)域?qū)ぶ繁硎緸椋?nbsp;      訪問(wèn)寬度 [ ARx, 偏移量 ]
例如:    L     W [ AR2, P#1.0 ]
       ‘W’為訪問(wèn)寬度,AR2為地址寄存器2,P#1.0為偏移量。

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

//I存儲(chǔ)區(qū)
L     P#I0.0
LAR2
L     W[ AR2, P#0.0 ]
T     MW0

2.2.3 FB/FC的指針參數(shù)傳遞
在使用FB/FC形參傳遞指針參數(shù)時(shí),16位、32位指針是可用的,但POINTER與ANY指針類型也是常見(jiàn)的類型,因?yàn)楦奖恪?br /> 16指針用于參數(shù)傳遞
例如:
//編寫一個(gè)FC,作用是啟動(dòng)條件滿足后延時(shí)3秒輸出閉合信號(hào)
//定義FC的形參如下:
圖 5
//程序如下:
L     #Pointer16
T     LW     0            //將16位指針裝入LW0
A     #Start                   //Start參數(shù) = True時(shí)
L     S5T#3S        //計(jì)時(shí)3秒
SD  T [LW 0]
A     T [LW 0]        //計(jì)時(shí)器計(jì)時(shí)到
=     #Motor                 //輸出Motor = True   

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

      L     #Data_1st
      T     LD     2                         //裝載第一個(gè)要計(jì)算的實(shí)數(shù)的32指針至LD0

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

      L     #Len                              //長(zhǎng)度
NEXT:        T     LW     6             //實(shí)數(shù)的個(gè)數(shù)裝載至LW6, 并且進(jìn)入一個(gè)LOOP循環(huán)
      L     DBD [LD 2]              //讀取LD2指針位置的實(shí)數(shù)
      L     LD     8
      +R                                      //與'和'相加
      T     LD     8                         //結(jié)果存到'和'中
      L     LD     2                          //裝入指針
      L     P#4.0
      +D                                      //指針加4個(gè)字節(jié)
      T     LD     2                         //結(jié)果仍存入LD2,此時(shí)LD2指針指向下一個(gè)實(shí)數(shù)

      L     LW     6                         //循環(huán)計(jì)數(shù)
      LOOP  NEXT                        //LOOP循環(huán)的結(jié)束

      L     #Len                         //將實(shí)數(shù)個(gè)數(shù)由INT轉(zhuǎn)成REAL
      ITD  
      DTR  
      T     LD    12
      L     LD     8                          //'和'除以實(shí)數(shù)格式的實(shí)數(shù)個(gè)數(shù)
      TAK
      /R   
      T     #Average_out            //得到平均值,通過(guò)Average_out輸出

POINTER數(shù)據(jù)類型及參數(shù)傳遞
POINTER是一種用于傳遞指針的形參數(shù)據(jù)類型,長(zhǎng)度為6個(gè)字節(jié)。用于向被調(diào)用的函數(shù)FC及函數(shù)塊FB傳遞復(fù)合數(shù)據(jù)類型(如ARRAY、STRUCT及DT等)的實(shí)參。在被調(diào)用的函數(shù)FC及函數(shù)塊FB內(nèi)部可以間接訪問(wèn)實(shí)參的存儲(chǔ)器。
格式如下:
圖 7
POINTER參數(shù)中,數(shù)據(jù)區(qū)含義如下:
16進(jìn)制代碼
數(shù)據(jù)區(qū)
簡(jiǎn)單描述
B#16#81
I
輸入?yún)^(qū)
B#16#82
Q
輸出區(qū)
B#16#83
M
標(biāo)志位
B#16#84
DB
數(shù)據(jù)塊
B#16#85
DI
背景數(shù)據(jù)塊
B#16#86
L
區(qū)域數(shù)據(jù)區(qū)
B#16#87
V
上一級(jí)賦值的區(qū)域數(shù)據(jù)
表 1
若數(shù)據(jù)區(qū)為B#16#84,那么表示該P(yáng)OINTER指針是一個(gè)DB塊地址,DB塊號(hào)區(qū)域應(yīng)當(dāng)是所指向的DB塊號(hào)(INT類型)并且不為零。
(請(qǐng)參考ANY數(shù)據(jù)類型舉例)
ANY數(shù)據(jù)類型及參數(shù)傳遞
ANY是一種用于傳遞指針的形參數(shù)據(jù)類型,可視為POINTER類型的擴(kuò)展,較POINTER類型為復(fù)雜,長(zhǎng)度為10個(gè)字節(jié),增加的4字節(jié),最高字節(jié) (Byte 0) 固定為B#16#10,第二字節(jié) (Byte 1) 為ANY指針?biāo)赶騾^(qū)域的數(shù)據(jù)類型,而接下來(lái)的2字節(jié) (BYTE 3, 4) 組合為一個(gè)INT,為ANY指針?biāo)付▍^(qū)域的長(zhǎng)度,稱為重復(fù)系數(shù) (Repetition factor) 。其余6字節(jié)作用與POINTER類型相同。
格式如下
圖 8

其中數(shù)據(jù)類型含義為:
數(shù)據(jù)類型代碼
十六進(jìn)制代碼
數(shù)據(jù)類型
簡(jiǎn)單描述
B#16#00
NIL

B#16#01
BOOL

B#16#02
BYTE
8位字節(jié)
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位浮點(diǎn)
B#16#09
DATE
IEC日期
B#16#0A
TIME_OF_DAY(TOD)
24小時(shí)時(shí)間
B#16#0B
TIME
IEC時(shí)間
B#16#0C
S5TIME
SIMATIC時(shí)間
B#16#0E
DATE_AND_TIME(DT)
時(shí)鐘
B#16#13
STRING
字符串
B#16#17
BLOCK_FB
FB號(hào)
B#16#18
BLOCK_FC
FC號(hào)
B#16#19
BLOCK_DB
DB號(hào)
B#16#1A
BLOCK_SDB
SDB號(hào)
B#16#1C
COUNTER
計(jì)數(shù)器
B#16#1D
TIMER
定時(shí)器
表 2

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

//輸入?yún)?shù)Data(Any類型);輸出參數(shù)Error(INT類型)
//若輸出參數(shù)Error不為0, 則說(shuō)明排序未進(jìn)行,
//Error = 1, Data(ANY類型)輸入指針無(wú)效
//Error = 2, Data(ANY類型)輸入指針地址非DB地址
//Error = 3, Data(ANY類型)輸入指針指定區(qū)域類型非INT類型


      SET  
      SAVE
      L     0
      T     #Error

//將輸入ANY指針'Data_In'復(fù)制到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

//輸入數(shù)據(jù)區(qū)是否為DB塊
      L     LB     6
      L     B#16#84
      ==I  
      JCN   ERR2

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

//打開(kāi)輸入DB塊
      OPN   DB [LW 4]

//數(shù)據(jù)起始地址去掉數(shù)據(jù)區(qū)標(biāo)識(shí)部分
      L     LD     6
      L     DW#16#FFFFFF
      AD   
      T     LD    10
//計(jì)算最后一個(gè)存儲(chǔ)單元指針保存至LD10
      L     LW     2
      L     2
      *I   
      T     LD    14
      L     L#2
      -D   
      SLD   3
      L     LD    10
      +D   
      T     LD    10

//外循環(huán)計(jì)數(shù)LW20,循環(huán)次數(shù)為(數(shù)據(jù)個(gè)數(shù)-1)次
      L     LW     2
      L     1
      -I   
NXT2: T     LW    20
      L     LD    10
      LAR1
      L     LW    20

//嵌套循環(huán)計(jì)數(shù)LW18,循環(huán)次數(shù)為(LW20)次
NXT1: T     LW    18
      TAR1
      L     P#2.0
      -D   
      LAR1

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

//否,交換2單元數(shù)據(jù)
      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
//錯(cuò)誤碼1,ANY指針有錯(cuò)
ERR1: L     1
      T     #Error
      JU    EXIT

//錯(cuò)誤碼2,輸入數(shù)據(jù)區(qū)不是DB塊
ERR2: L     2
      T     #Error
      JU    EXIT

//錯(cuò)誤碼3,輸入數(shù)據(jù)類型不是INT
ERR3: L     3
      T     #Error

EXIT:     SET
       SAVE

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

如果您對(duì)該文檔有任何建議,請(qǐng)將您的寶貴建議提交至下載中心留言板。
該文檔的文檔編號(hào):F0215


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


注意事項(xiàng)

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

聲明

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

西門子(中國(guó))有限公司




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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表