循環(huán)程序用來完成大量的重復(fù)的操作。西門子s7-1200plc沒有像西門子s7-300plc的loop那樣的循環(huán)程序?qū)S玫闹噶睿瑸榱司帉懷h(huán)程序,可以用fieldread指令實(shí)現(xiàn)間接尋址,用普通指令來編寫循環(huán)程序。
生成一個名為“循環(huán)程序”的項(xiàng)目。首先生成全局?jǐn)?shù)據(jù)塊db1,在db1中生成有10個字節(jié)元素的數(shù)組,設(shè)置各數(shù)組元素的初始值。
生成一個功能塊fb1,定義它的輸入?yún)?shù)“字節(jié)數(shù)”(int)、“初始下標(biāo)”(dint)、“數(shù)組”(array)和輸出參數(shù)“異或結(jié)果”(byte)。
在fb1的程序段1用move指令將“異或結(jié)果”清零(見圖1)。
程序段2的跳轉(zhuǎn)標(biāo)簽back表示循環(huán)的開始。指令fieldread用來實(shí)現(xiàn)間接尋址,其參數(shù)index是要讀寫的數(shù)組元素的下標(biāo),其數(shù)據(jù)類型為dint(雙整數(shù))。參數(shù)member的實(shí)參必須是該數(shù)組的第一個元素,參數(shù)value是讀取的數(shù)組元素的值。
讀取數(shù)組元素值后,將它與輸出變量“異或結(jié)果”作異或運(yùn)算,將地址指針“起始下標(biāo)”加1,它指向下一個數(shù)組元素。將作為循環(huán)次數(shù)計(jì)數(shù)器的輸入變量“字節(jié)數(shù)”減1。減1后如果非0則返回標(biāo)簽back處,開始下一次循環(huán)的操作。
800)this.width=800>
圖1
在ob1中調(diào)用fb1(見圖2),求db1中的數(shù)組1從下標(biāo)為2的元素開始的3個數(shù)組元素的異或值,異或的結(jié)果用mb4保存。
將程序下載到cpu,將cpu切換到run模式。搬動i0.2對應(yīng)的小開關(guān),在i0.2的上升沿調(diào)用fb1。用監(jiān)視表監(jiān)視mb4中的運(yùn)算結(jié)果,驗(yàn)證了程序的正確性。
800)this.width=800>
圖2