ANY數據類型及參數傳遞
ANY是一種用于傳遞指針的形參數據類型,可視為POINTE R 類型的擴展,較POINTER 類型為復雜,長度為10個字節,增加的4 字節,最高字節 (Byte 0) 固定為B#16#10,第二字節 (Byte 1) 為ANY指針所指向區域的數據類型,而接下來的2 字節 (BYTE 3, 4) 組合為一個INT ,為ANY指針所指定區域的長度,稱為重復系數 (Rep etition factor) 。其余6 字節作用與POINTE R 類型相同。
編程舉例:
// 此例程僅提供存于DB塊中的INT 類型數據排序
// 結果為INT 數據由小到大排列,保存于原DB塊中
//FC3 塊,形參定義如下:
// 輸入參數Dat a(A ny 類型);輸出參數Error(INT類型)
// 若輸出參數Error不為0, 則說明排序未進行,
//Error = 1, D ata(ANY 類型)輸入指針無效
//Error = 2, D ata(ANY 類型)輸入指針地址非DB地址
//Error = 3, D ata(ANY 類型)輸入指針指定區域類型非INT 類型
SET
SAVE
L 0
T #Err or
// 將輸入ANY 指針‘Data_ In’復制到LB0~LB9
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#1 6#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
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 L W 20
L LD 10
LAR1
L LW 20
// 嵌套循環計數LW18 ,循環次數為(LW20)次
NXT1: T L W 18
T A R1
L P#2. 0
-D
LAR1
// 后一單元數據小于前一單元數據?
L DB W [AR1,P#2.0]
L DB W [AR1,P#0.0]
《i 《/i
JCN L1
// 否,交換2 單元數據
L DB W [AR1,P#2.0]
L DB W [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 EX IT
// 錯誤碼1,ANY指針有錯
ERR1: L 1
T #Err or
JU EX IT
// 錯誤碼2,輸入數據區不是DB塊
ERR2: L 2
T #Err or
JU EX IT
// 錯誤碼3,輸入數據類型不是INT
ERR3: L 3
T #Err or
EXIT: SET
SAVE
在OB1程序中調用舉例:
A M 0.0
F P M 0.1
JCN EXI T
CALL F C 3 //FC3 為上述排序程序
Data : =P#DB3.DBX 0.0 INT 64 // 參數Data, DB3 中64個INT 排序
Error : =MW2
EXIT: NOP 0
編輯:lyn
-
參數
+關注
關注
11文章
1857瀏覽量
32367 -
指針
+關注
關注
1文章
481瀏覽量
70593
原文標題:ANY數據類型及參數傳遞
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論