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-300和S7-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
|
2.S7-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ó))有限公司
|