移位寄存器指令SHRB是將DATA數值移入移位寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的長度和移位方向(移位加 = N,移位減 = -N)。移位寄存器的最大長度是64位的,可以正也可以負。我們要注意的是SHRB指令移出的每個位是被放置在溢出內存位(SM1.1)中的。
下面便以以下的程序來講解指令的使用,用I0.2的上升沿來執行移位寄存器指令,那么就是一個掃描周期移一位的,指令中V100.0是移位寄存器的最低位,I0.3里面存的是0或1的數值,指令指定是移位加的,移位寄存器的長度是4。我們結合下面的時序圖和移位的圖來看,若V100為0000 0101,因為移位寄存器的長度是4,那么只有0101,當I0.3為1時,執行第一次移位,把1移到移位寄存器的最低位,把移出的位的值0放置到SM1.1中,那么SM1.1為0,當I0.3為0時,執行第二次移位,把0移到移位寄存器的最低位,把移出的位的值1放置到SM1.1中,那么SM1.1為1。
在順序控制或步進控制中,應用移位寄存器編程是很方便的,移位寄存器指令如圖所示。
1)移位寄存器有3個數據輸入端:
DATA:移位寄存器的數據輸入端,數據類型為BOOL(位)。
S_BIT:組成移位寄存器的最低位,數據類型為BOOL(位)。
N:移位寄存器的長度和移位方向,-64≤N≤64,當N 》0時為正向移位(從移位寄存器的最低位移入,由最高位移出),當N 《0時為反向移位(從移位寄存器的最高位移入,由最低位移出)。
2)移位寄存器的特點:
·移位寄存器的數據類型無字節型、字型、雙字型之分,移位寄存器的長度N由程序指定。
·移位寄存器的組成:
最低位為:S_BIT;
最高位的計算方法為:MSB=S_BIT+(|N|-1)/8。S7-200的編址均為8進制,相加時要字節和字節相加,位和位相加,并且逢8進1;例如:
S_BIT= V23.4,N=15,則MSB= V23.4+(15-1)/8=
移位寄存器的組成:V23.4~V23.7、V24.0~V24.7、V25.0、V25.1、V25.2,共15位。
·移位寄存器指令的功能是:當允許輸入端EN有效時,如果N》0,則將移位數據DATA填入移位寄存器的最低位(S_BIT);如果N《0,則填入到移位寄存器的最高位,移位寄存器的其他位按照N指定的方向(正向或反向),依次串行移位。
·移位寄存器的移出端與SM1.1(溢出)連接。
移位寄存器指令影響的特殊繼電器:SM1.0(零),SM1.1(溢出)。當移位操作結果為0時,SM1.0自動置位;SM1.1的狀態由每次移出位的狀態決定。
影響允許輸出ENO正常工作的出錯條件為:SM4.3(運行時間)、0006(間接尋址),0091(操作數超界),0092(計數區錯誤)。
【例】 移位寄存器指令的應用如圖所示。
下面再看一個程序案例,更深入地來學習一下這個移位寄存器指令。
1、產品檢測分揀機,輸送帶上的產品經過一臺檢測裝置時,檢測裝置輸出檢測結果到I0.0,有產品時為1。I0.1檢測產品的好壞,若I0.1為0則產品是好的,若I0.1為1則產品是壞的。在第4個產品位置有一個推產品的氣缸Q0.0。若檢測的產品為壞時,到達第4個產品位置時,Q0.0輸出,氣缸動作,產品被推出,1s后氣缸退回,傳送帶繼續工作,進行產品的檢測。
下面就分析一下程序,檢測裝置檢測到有產品時I0.0為1,I0.1檢測產品的好壞,產品壞為1,指定移位寄存器的最低位為M0.0,移位寄存器的長度為4。因為在第4個產品位置有一個氣缸Q0.0,若I0.1為1時,到達第4個產品位置時,那么就用M0.3驅動氣缸動作,推出產品,同時做了一個定時器定時1s,1s后復位M0.3,氣缸退回。
移位寄存器位指令的形式
指令的功能:
移位寄存器位( SHRB)指令將DATA數值移入移位寄存器。S_BIT指定移位寄存器的最低位。N指定移位寄存器的長度和移位方向(當N是正的,從低位移到高位,當N是負數,就從高位移到低位)。SHRB指令移出的每個位被放置在溢出內存位(SM1.1)中。該指令由最低位(S_BIT)和長度(N)指定的位數定義。
注:已知最低位,計算最高位的方法:MSB.b=[(S_BIT字節)+([N]-1+(S_BIT位))/8]·[被8除的余數]
例如:如果S_BIT的字節和位分別是V33和4,N是14,以下計算顯示MSB.b是V35.1。
MSB.b= V33+([14]-1+4)/8
= V33+17/8
= V33+2,余數為1
= V35.1