wingwf2000
級別: 探索解密
|
間接訪問就是用指定存儲器的地址或索引或ID來讀寫存儲器的內容,這里是使用索引的方式,因為輸入的數據不是存儲器的實際地址,西門子的存儲器地址比較復雜,按類區別,一般得不到存儲器的地址,但存儲器的索引也就是存儲器的號則經常使用,一般情況下在S7-300、400中需要用STL指令寫,梯形圖是不支持的,但STL不容易學,也容易出錯,所以用SCL寫了這個庫,然后在梯形圖中使用,方便了程序的編寫。 其中S7-300_1中是編譯過的庫,S7-300_4中的是SCL源代碼,由于高級語言的結構性太強,所以編譯后的代碼肯定沒STL直接寫的那么高效,但高級語言出錯機會小,另外就是編譯后的庫不太好監控,因為編譯后變成了STL格式。 注意:字MW0的索引是0,字MW1的索引是1,雖然一般不會這樣用,因為字的邊界或起點一般定在偶數,所以參數里的索引事實上指字的起點地址,對于雙字也是一樣的;對于Q、DB、I區的字和雙字也是這樣的;所以若是循環使用連續的字或雙字時,要注意字的索引和雙字的索引的增量分別是2和4,如果增量是1的話,就會導致前后的操作發生數據重疊。 [ 此帖被wingwf2000在2019-07-26 00:19重新編輯 ] |
---|---|
|
wingwf2000
級別: 探索解密
|
在編譯SCL時可以關閉地址溢出的檢查選項,會減小編譯后的STL代碼量,但可能傳入的參數超范圍時導致錯誤,建議還是打開地址檢查選項,使程序更健壯 |
---|---|
|
wingwf2000
級別: 探索解密
|
程序分為對I區、Q區、M區和DB區的位、字節、字、雙字的讀、寫,其中對位的讀寫又分兩種,一種是給出位所在字節的地址和位的位號,另一種是直接給出位的編號,也就是字節地址*8+位號,這樣便于在循環時自動修改位地址 |
---|---|
|
wingwf2000
級別: 探索解密
|
呵呵,西門子的I區也是可以寫的哦,只是下個周期時新數據會覆蓋上次修改的數據,但有時可能會用到修改I區數據的功能 |
---|---|
|