博途的間接定址和S7-300/400大不一樣。博途中的間接定址主要用peek/poke指令,peek/poke指令不能用於最佳化的資料塊。最佳化資料塊可以用陣列類定址。這次的控制任務是模擬類的批次處理,s7-300/400模擬量批次處理很繁瑣。
控制任務把數量不定的模擬量轉換成工程量,然後儲存到指定的資料塊中。這裡我們為了測試,不讀取PIW中的模擬值,而用MW代替。
象這樣的控制任務,我們一般用SCL來寫會比較方便。請看下面的程式。
控制程式

程式簡單說明一下:
LOWER_BOUND 讀取 resultArray的下限 UPPER_BOUND讀取resultArray的上限lenOfEmtpyArray是陣列除去offsetArray偏移量後還剩的空餘長度,如果這個長度小於模擬量的數量,則退出。另外如果arrayLowerBound小於下限,也退出。第19行,SCL 中的迴圈要注意,開始和結尾都是閉區間,和c語言等高階語言不一致。第20行,PEEK_WORD 就是讀取M區的模擬量。具體用法可以參看手冊。第25行,對陣列的讀寫,也是間接定址,在scl中沒有這種說法了。間接定址等概念都是彙編下的,高階語言沒有這種叫法。最後,模擬量轉化為工程量後為100.0 和 54.0,存入資料塊。
最新評論