提綱 : 定義一個共享數據塊 DB1 在DB1 中定義數組
用SFC21 實現 實現全部數組元素的賦一樣的值
實現 給數組中的某一個元素賦值
實現 對數組中的全部元素賦值
實現將數組中的某個 或者 某一串 元素讀取出來,放在程序中的某一個變量 或者 某些連續數組的元素中
訓練前 需要掌握的知識點
在書本72 實訓十六 中
L P#10.0 //表示將32位內部 指針值轉載到累加器。
P#10.0 表示 10.0 是一個指針常量 。
P# "#"號后面緊跟的是 指針變量里面的值。
P#DB1.DBX0.0 INT 1 INT 表示 X 是 字 Word (字)
例如 在數據塊DB1 中定義了 數組變量
P# DB1.DBX0.0 INT 1
DB1.DBX0.0 INT 1 實際就是 DB1數據塊里面定義的數組Press[1]
在上圖1 中的輸入以后 就變為 P# DB1.DBX0.0 INT 1
知識點2
P#DB1.DBX0.0 INT 4
表示的是 DBW0~DBW6
實際上就 DBW0 DBW2 DBW4 DBW 6
知識點3
BLKMOV 的輸入參數 SRCBLK 和輸出參數 DSTBLK 的數據類型必須 一致。
輸入是字節類型, 輸出也必須是字節類型
輸入是字類型, 輸出也必須是字類型
練習1
將MW2 里面的值 寫入數組 DB1.Press 里面的全部數組元素
例如MW2 是1 執行以后 DB1.Press[1]=1
DB1.Press[2]=1
DB1.Press[3]=1
……
DB1.Press[100]=1
練習 2 寫入數組中的某一個元素 (重要)
寫入第1個元素
注意:此時的 P#DB1.DBX7.0 INT 1
表示的是 DB1.DBW7 INT 表示尋址的是字 WORD 1 表示 只尋址一個字
DBW7=DB1.Byte[7]+DB1.Byte[8]
假設我把 MW2設為30 對應於十六進制的0X001E
也就是說 byte[7]是 0X00 BYTE[8]對應的是0X1E
仿真
可以知道 地址為8.0 的高字節 寫入的是0X1E 所以Press[5]是0X1E00=十進制7680
地址為6.0的低字節 寫入的是0X00
假設MW2寫入十進制 對應16進制012C
則Prress [4] 為 0X0001 對應十進制 1
Press[5]對應OX2C00 對應十進制 11264
如果剛好P#DB1.DBX4.0 int 1
DBW4=BYTE4 +BYTE 5 與 DB1.DBW4 重合 等於 Press[3 ]
仿真 MW2 寫入520
注意:程序在修好了以后 必須先保存 再下載 才生效。
練習3
寫入數組中的某幾個連續的元素
例如 連續寫進press[6 press[7 press[8 press[9 ess[10
5個整形
執行完以后 只有preSS [6] 被成功賦值。
如果需要賦予 5個值日 。 則輸入必須是統一類型的5個數據 改正程序為
輸入的參數 改正為 P#2.0 INT 4 表示的是 MW2 MW4 MW6 MW 8
執行結果
在共享數據塊DB1 查詢值的變化
練習 4 將DB1數據塊中的DBW4 DB1.DBW4 復制到MW10 中去