**用指針存儲(chu) 數據表的例子程序**
本例中用 VD14 作為(wei) 指向配方表的指針;
配方表的起始地址為(wei) VB100,每條配方的數據長度為(wei) 5字節,共定義(yi) 4條配方;
VW1008 用來存儲(chu) 配方號,如果每條配方的長度為(wei) 5 個(ge) 字節,則用這個(ge) 配方號乘以 5 就可以得到這個(ge) 配方起始地址的偏移量,用指針加上此偏移量,就可以訪問表中的每一條配方。
最後將從(cong) VB1500 開始的 5 個(ge) 字節數據複製到指定配方中。
梯形圖實例如下:
BLKMOV這裏是傳(chuan) 送指令和普通的MOV_DW指令相比,它的區別在於(yu) MOV指令隻能傳(chuan) 送一個(ge) 變量,但是BLK可以批量傳(chuan) 送多個(ge) 寄存器的值。最多傳(chuan) 255個(ge) 。
如上圖是BLKMOV_B指令。他有3個(ge) 管腳。左邊IN管腳的寄存器傳(chuan) 給OUT管腳的寄存器,N管腳是數量,以IN和OUT為(wei) 首寄存器開始的N個(ge) 寄存器。
STL語句如下:
TITLE=**用指針存儲(chu) 數據表的例子程序**
// 本例中用 VD14 作為(wei) 指向配方表的指針;
// 配方表的起始地址為(wei) VB100,每條配方的數據長度為(wei) 5字節,共定義(yi) 4條配方;
// VW1008 用來存儲(chu) 配方號,如果每條配方的長度為(wei) 5 個(ge) 字節,則用這個(ge) 配方號乘以 5
// 就可以得到這個(ge) 配方起始地址的偏移量,用指針加上此偏移量,就可以訪問表中的每一條配方。
// 最後將從(cong) VB1500 開始的 5 個(ge) 字節數據複製到指定配方中。
Network 1
// 網絡標題
// 創建一個(ge) 指向配方表起始地址的指針
LD SM0.0
MOVD &VB100, VD14
Network 2
// 將配方號轉換成雙整型,這樣才可以和指針數據進行運算
LD SM0.0
ITD VW1008, VD18
Network 3
// 根據配方號計算偏移量,每條配方的長度為(wei) 5 個(ge) 字節,用這個(ge) 配方號乘以 5 就可以得到這個(ge) 配方起始地址的偏移量
LD SM0.0
MOVD +5, VD22
*D VD18, VD22
Network 4
// 指針加上此偏移量即可得到指向指定配方的指針
LD SM0.0
+D VD22, VD14
Network 5
// 將VB1500-VB1504數據傳(chuan) 送到指定配方中,VB1500-VB1504由用戶在狀態表中定義(yi) 。
LD SM0.0
BMB VB1500, *VD14, 5