7. ——(SE)(擴展脈衝定時器線圈)
——(SE)
如果RLO狀態有一個上升沿,“——(SE)”(擴展脈衝定時器線圈)將以指定的啟動指定的定時器。定時器繼續運行指定的時間間隔,即使定時器達到指定時間前RLO變為“0”。隻要定時器運行,計數器的信號狀態就為“1”。如果在定時器運行期間RLO從“0”變為“1”,則將以指定的時間值重新啟動定時器(重新觸發)。
【例9-5】擴展脈衝定時器應用——電動機延時自動關閉控製。
控製要求:按動啟動按鈕S1(I0.3),電動機M(Q4.0)立即啟動,延時6min以後自動關閉。啟動後按動停止按鈕S2(I0.1),電動機立即停機。
8.——(SD)(接通延時定時器線圈)
〈T編號〉
——(SD)
〈時間值〉
如果RLO狀態有一個上升沿,“——(SD)”(接通延時定時器線圈)將以該〈時間值〉啟動指定的定時器。如果達到該〈時間值〉而沒有出錯,且RLO仍為“1”,則定時器的信號狀態為“1”。如果在定時器運行期間RLO從“1”變為“0”,則定時器複位。這種情況下,對於“1”的掃描始終產生結果“0”。
【例9-6】小車控製程序的設計。
小車初始狀態為停在左側,且左限位開關SQ1的常開觸點閉合。要求按下右行啟動按鈕SB2時,小車右行,走到右限位開關SQ2處停止運動;延時10s後開始左行,回到左限位開關SQ1處時停止運動。
在控製右行的Q4.0的線圈回路中串聯了I0.4的常閉觸點,小車走到右限位開關SQ2處時,I0.4的常閉觸點斷開,使Q4.0的線圈斷電,小車停止右行。同時I0.4的常開觸點閉合,T0的線圈通電,開始定時。10s後定時時間到,T0的常開觸點閉合,使Q4.1的線圈通電並自保持,小車開始左行。離開限位開關SQ2後,I0.4的常開觸點斷開,T0的常開觸點因為其線圈斷電而斷開。小車運行到左邊的起始點時,左限位開關SQ1的常開觸點閉合,I0.3的常閉觸點斷開,使Q4.1的線圈子斷電,小車停止運動。
9.——(SS)(保持接通延時定時器線圈)
〈T編號〉
——(SS)
〈時間值〉
如果RLO狀態有一個上升沿,“——(SS)”(保持接通延時定時器線圈)將啟動指定的定時器。如果達到時間值,定時器的信號狀態為“1”。隻有明確進行複位,定時器才可能重新啟動。隻有複位才能將定時器的信號狀態設為“0”。
【例9-7】電動機順序啟停控製。
控製要求:某傳輸線由兩個傳送帶組成,按物流要求,當按動啟動按鈕S1時,皮帶電機M2首先啟動,延時10s後,皮帶電機M1自動啟動;如果按動停止按鈕S2,則M1立即停機,延時20s後,M2自動停機。
10.——(SF)(斷開延時定時器線圈)
〈T編號〉
——(SF)
〈時間值〉
如果RLO狀態有一個下降沿,“——(SF)”(斷開延時定時器線圈)將啟動指定的定時器。當RLO為“1”時或隻要定時器在〈時間值〉時間間隔內運行,定時器就為“1”。如果在定時器運行期間RLO從“0”變為“1”,則定時器複位。隻要RLO從“1”變為“0”,定時器即會重新啟動。
【例9-8】設計電機-△降壓啟動電路。-△切換時間是8s,電動機具有常規的保護環節。三相異步電動機-△減壓啟動控製電路及PLC外部I/O接線原理圖。
二、計數器指令
S7有三種計數器:加計數器、減計數器、加減計數器可供選擇。在CPU的存儲區中為計數器保留有特定存儲區,該存儲區為每一個計數器地址保留一個16位的字,梯形邏輯指令集支持256個計數器。
1.S_CUD(雙向計數器)
如果輸入S有上升沿,則S_CUD(雙向計數器)預置為輸入PV的值。如果輸入R為“1”,則計數器複位,並將計數值設置為零。 如果輸入CU的信號狀態從“0”切換為“1”,並且計數器的值小於999,則計數器的值增1。如果輸入CD有上升沿,並且計數器的值大於“0”,則計數器的值減1。如果兩個計數輸入都有上升沿,則執行兩個指令,並且計數值保持不變。
如果已設置計數器並且輸入CU/CD為RLO=1,則即使沒有從上升沿到下降沿或下降沿到上升沿的變化,計數器也會在下一個掃描周期進行相應的計數。
如果計數值大於0,則輸出Q的信號狀態為“1”;如果計數值等於0,則輸出Q的信號狀態為“0”。
如果I0.2從“0”改變為“1”,則計數器預置為MW10的值;如果I0.0的信號狀態從“0”改變為“1”,則計數器C10的值將增加1(C10的值等於999時除外);如果I0.1從“0”改變為“1”,則C10減少1,但當C10的值為“0”時除外;如果C10不等於0,則Q4.0為“1”。
2. S_CU(加計數器)
加計數器指令中的輸入端(S)出現上升沿時,則S_CU(升值計數器)預置為輸入PV的值。如果輸入R為“1”,則計數器複位,並將計數器的計數值清零。如果輸入端CU出現上升沿並且計數器的值小於999,則計數器加1。當計數大於0時,輸出端Q為“1”;當計數等於0時,輸出端Q為“0”。
如果已設置計數器並且輸入CU為RLO=1,則即使沒有從上升沿到下降沿或下降沿到上升沿的變化,計數器也會在下一個掃描周期進行相應的計數。
輸入I0.1信號狀態從“0”變為“1”時,計數器C1預置二-十進製數值“5”;如果輸入I0.0的信號狀態從“0”變為“1”,且C1的值不等於999,則計數器C1的值加1;如果I0.2從“0”變為“1”時,C1值清為“0”;如果C1不等於“0”,則輸出Q0.0的信號狀態就為“1”。
3.S_CD(減計數器)
如果輸入S有上升沿,則S_CD(降值計數器)設置為輸入PV的值。如果輸入R為“1”,則計數器複位,並將計數值設置為“0”。當計數器值大於0且CD出現上升沿時,則將計數器的計數值減1。當計數值大於0時,輸出端Q為“1”;當計數值等於0時,輸出端Q為“0”。
如果已設置計數器並且輸入CD為RLO=1,則即使沒有從上升沿到下降沿或下降沿到上升沿的變化,計數器也會在下一個掃描周期進行相應的計數。
輸入I0.1信號狀態從“0”變為“1”,計數器C1預置二-十進製數值“6”;如果輸入I0.0的信號狀態從“0”變為“1”,且計數器C1不等於0的話,則計數器C1的值減1;如果計數器C1不等於0,則輸出Q4.0信號狀態為“1”;如果I0.2從“0”改變為“1”,C1值清為“0”。
4.——(SC)(設置計數器值)
〈C編號〉
——(SC)
〈預設值〉
僅在RLO中有上升沿時,“——(SC)”(設置計數器值)才會執行。此時,預設值被傳送至指定的計數器。
5.——(CU)(升值計數器線圈)
〈C編號〉
——(CU)
其中〈C編號〉為存儲區計數器標識號,其範圍依賴於CPU,數據類型為COUNTER,存儲區為C。
功能:如在RLO中有上升沿,並且計數器的值小於999,則“——(CU)”(升值計數器線圈)將指定計數器的值加1。如果RLO中沒有上升沿,或者計數器的值已經是999,則計數器值不變。
6.——(CD)(降值計數器線圈)
〈C編號〉
——(CD)
其中〈C編號〉為存儲區計數器標識號,其範圍取決於CPU,數據類型為COUNTER,存儲區為C。
功能:如果RLO狀態中有上升沿,並且計數器的值大於0,則“——(CD)”(降值計數器線圈)將指定計數器的值減1。如果RLO中沒有上升沿,或者計數器的值已經是0,則計數器值不變。
第四節數據處理功能指令
一、數據傳送指令
MOVE指令將在輸入端IN的給定值傳輸到輸出端OUT上的指定地址中,因此可以用來給某一變量賦予特定的值。MOVE隻能複製BYTE、WORD或DWORD數據對象。用戶自定義數據類型(如數組或結構)必須使用係統功能“BLKMOVE”(SFC 20)來複製。MOVE指令說明如下:
(1)MOVE指令標題,用來聲明指令的類型。即說明該指令為傳送指令。
(2)EN使能信號的輸入端,用來控製MOVE指令是否工作。當它接收的信號為高電位“1”時,MOVE指令才工作。存儲區域為I、Q、M、D、L。
(3)ENO使能信號的輸出端。當MOVE指令工作時,它可以輸出高電位信號“1”,用來驅動下麵的工作端口。即ENO與EN的邏輯狀態相同。存儲區域為I、Q、M、D、L。
(4)IN輸入端,用來輸入要傳送的數據或者指明需要傳輸的數據所在的位置。存儲區域為I、Q、M、D、L或常數。
(5)OUT輸出端,用來存儲輸入端傳輸來的數據。存儲區域為I、Q、M、D、L。
MOVE方塊賦予值指令能夠適用於長度為8位、16位、32位的所有數據類型,但輸入端IN與輸出端OUT的數據類型必須匹配。當輸入端的數據比輸出端的數據長時,例如輸入端是字類型數據,輸出端是字節類型數據,這時隻將與輸出端長度相當且位置相同的輸入數據傳送過去;即把輸入端的低8位傳送到輸出端口。當輸入端的數據比輸出端的數據短時,例如輸入端是字節類型數據,輸出端是字類型數據,這時采用右對齊的方式傳送到輸出端;即把輸入端的8位數據放在輸出端的低8位上,然後在輸出的高8位補充為“0”。
下麵通過一段程序來介紹MOVE指令的執行過程。若輸入端I0.0的信號狀態為“1”,第一個MOVE指令開始執行,將MW10中的值傳送到MW12中,並且在該MOVE指令執行時,使能輸出端輸出高電位“1”,用於驅動第二個MOVE指令執行;第二個MOVE指令將常值“W#16#AB10”傳送到MW16中,同時使輸出端為高電位,使輸出端Q4.0狀態為“1”。
【例9-9】物品分選係統設計。
原理與控製說明:傳送帶的主動輪由一台交流電動機M拖動,該電動機的通斷由接觸器KM控製;從動輪上裝有脈衝發生器LS,每傳送一個物品,LS發出一個脈衝,作為物品發送的檢測信號。次品檢測在傳送帶的0號位進行,由光電檢測裝置PH1檢測;當次品在傳送帶上繼續往前走,到4號位置時,應使電磁鐵YV通電,電磁鐵向前推,次品落下;當光電開關PH2檢測到次品落下時,給出信號,讓電磁鐵YV斷電,電磁鐵縮回。正品則到第9號位置時裝入箱中,光電開關PH3為正品裝箱計數檢測用。
二、比較指令
比較指令用於比較累加器1和累加器2中的數據大小,被比較的兩個數的數據類型應該相同,數據類型可以為整數、雙整數或浮點數(即實數)。如果比較的條件滿足,則RLO為“1”,否則為“0”。
1.整數比較
整數比較指令的使用方法與標準觸點類似,它可位於任何可放置標準觸點的位置。可根據用戶選擇的比較類型比較IN1和IN2,如果比較結果為真,則此函數的邏輯操作結果(RLO)為“1”,否則為“0”。IN1和IN2均為整數。如果以串聯方式使用該框,則使用“與”運算將其鏈接至整個梯級程序段的RLO;如果以並聯方式使用該框,則使用“或”運算將其鏈接至整個梯級程序段的RLO。
2.雙整數比較
雙整數比較指令是基於32位的雙整數比較,該指令的使用方法與標準觸點類似,它可位於任何可放置標準觸點的位置。可根據用戶選擇的比較類型比較IN1和IN2,如果比較結果為真,則此函數的RLO為“1”,反之為“0”。IN1和IN2均為雙整數。如果以串聯方式使用比較單元,則使用“與”運算將其鏈接至梯級程序段的RLO;如果以並聯方式使用該框,則使用“或”運算將其鏈接至梯級程序段的RLO。
3.浮點數比較
浮點數比較指令執行浮點數比較操作,其使用方法類似標準觸點,它可位於任何可放置標準觸點的位置。可根據用戶選擇的比較類型比較IN1和IN2,如果比較結果為真,則此函數的RLO為“1”。浮點數比較指令也可以使用立即尋址方式,以常數作為輸入。如果以串聯方式使用該框,則使用“與”運算將其鏈接至整個梯級程序段的RLO;如果以並聯方式使用該框,則使用“或”運算將其鏈接至整個梯級程序段的RLO。
【例9-10】試用“計數器”、“比較器”指令設計:要求按鈕I0.0閉合10次之後,輸出Q4.0為“1”;按鈕I0.0閉合20次之後,輸出Q4.1為“1”;按鈕I0.0閉合30次之後,計數器及所有輸出自動複位。
I0.0每閉合1次, 加計數器C1的輸入端CU就會出現一次上升沿, 則計數器加1。 計數器當前值存儲到MW10中,當MW10中的數值>=10時,比較器1使Q4.0輸出為“1”;MW10中的數值>=20時,比較器2使Q4.1輸出為“1”;當MW10中的數值>=30時,比較器3使M0.0輸出為“1”,由於M0.0連在計數器C1的複位端, 因此計數器複位,並將計數器的計數值清零。 I0.1為手動複位按鈕0。
【例9-11】顯示了具有兩個傳送帶且在傳送帶之間有臨時存儲區域的係統。傳送帶1將包裹傳送到存儲區域,存儲區域附近的傳送帶1末端的光電傳感器確定向存儲區域傳送的包裹數量;傳送帶2會將包裹從臨時存儲區域傳輸到裝載碼頭,而卡車在此將包裹發送給客戶,存儲區域附近的傳送帶2末端的光電傳感器確定離開存儲區域而轉向裝載碼頭的包裹數量。帶五個指示燈的顯示麵板將指示臨時存儲區域的填充量。編寫顯示麵板指示燈程序。
三、移位指令
STEP7可使用移位指令逐位左移或右移累加器1中低字的內容或整個累加器的內容。左移n位相當於將累加器的內容乘以2的n次冪(2 n);右移n位相當於將累加器的內容除以2的n次冪(2 n)。例如,將以二進製格式表示的十進製數3左移3位時,在累加器中出現相當於十進製數24的二進製編碼;將以二進製格式表示的十進製數16右移2位時,在累加器中出現相當於十進製數4的二進製編碼。
移位指令後的數字或在累加器2的低字中的數值表示要移位的數目。由零或符號位的信號狀態(0代表正數、1代表負數)填充移位指令空出的位。將最後一個移出的位裝載到狀態字的CC1位中。複位狀態字的CC0和OV位為0。可使用跳轉指令來判斷CC1位。移位運算是無條件的,即它們的執行不需要任何特殊的條件,且不影響邏輯運算的結果。
1. SHR_I(整數右移)
SHR_I(整數右移)指令是有符號的整數右移指令,它通過使能(EN)輸入端上的邏輯“1”信號來激活。SHR_I指令用於將輸入IN的0~15位逐位向右移動,16~31位不受影響。輸入N用於指定移位的位數,如果N大於16,則按照N等於16的情況執行操作。移位指令空出位由位15的邏輯狀態(整數的符號位)填充,也就是說,當該整數為正時,這些位將被賦值“0”,而當該整數為負時,則被賦值為“1”。可在輸出OUT位置掃描移位指令的結果。如果N不等於0,則SHR_I會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
下麵舉一個具體例子說明。SHR_I框由I0.0位置上的邏輯“1”激活;MW0所對應的有符號整數右移2位,並將移位後的結果放在MW4中,置位Q4.0。設MW0所對應的數為10101000、10100111,則移位後的結果為11101010,00101001。如果移位結果要送回原地址,應在I0.0的常開觸點和移位指令之間增加一個上升沿檢測元件,否則在I0.0為“1”的每個掃描周期都要移位一次。
2.SHR_DI(右移長整數)
SHR_DI (右移長整數)指令通過使能(EN)輸入位置上的邏輯“1”來激活。SHR_DI指令用於將輸入IN的0~31位逐位向右移動。輸入N用於指定移位的位數,如果N大於32,則按照N等於32的情況執行。移位空出位的位置將被賦予位31的邏輯狀態(整數的符號位),這意味著,當該整數為正時,這些位將被賦值“0”;而當該整數為負時,則被賦值為“1”。可在輸出OUT位置掃描移位指令的結果。如果N不等於0,則SHR_DI會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
3.SHL_W(字左移)
SHL_W (字左移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。SHL_W指令用於將輸入IN的0~15位逐位向左移動,16~31位不受影響。輸入N用於指定移位的位數,若N大於16,此命令會在輸出OUT位置上寫入“0”,並將狀態字中的CC0位和OV位設置為“0”。將自右移入N個零,用以補上空出位的位置。可在輸出OUT位置掃描移位指令的結果。如果N不等於0,則SHL_W會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
【例9-12】把DB10的2號字內容左移兩位後,與MW100做加法運算,運算結果送到DB12的10號字中。
4.SHR_W(字右移)
SHR_W (字右移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。SHR_W指令用於將輸入IN的0~15位逐位向右移動,16~31位不受影響。輸入N用於指定移位的位數,若N大於16,此命令會在輸出OUT位置上寫入“0”,並將狀態字中的CC0位和OV位設置為“0”。將自左移入N個零,用以補上移位空出位的位置。可在輸出OUT位置掃描移位指令的結果。如果N不等於0,則SHR_W會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
5.SHR_DW(雙字右移)
SHR_DW (雙字右移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。SHR_DW指令用於將輸入IN的0~31位逐位向右移動。輸入N用於指定移位的位數,若N大於32,此命令會在輸出OUT位置上寫入“0”,並將狀態字中的CC0位和OV位設置為“0”。將自左移入N個零,用以補上空出位的位置。可在輸出OUT位置掃描雙字移位指令的結果。如果N不等於0,則SHR_DW會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
6.SHL_DW(雙字左移)
SHL_DW (雙字左移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。SHL_DW指令用於將輸入IN的0~31位逐位向左移動。輸入N用於指定移位的位數,若N大於32,此命令會在輸出OUT位置上寫入“0”,並將狀態字中的CC0位和OV位設置為“0”。將自右移入N個零,用以補上空出位的位置。可在輸出OUT位置掃描雙字移位指令的結果。如果N不等於0,則SHL_DW會將CC0位和OV位設為“0”。
使能輸出ENO與使能輸入EN具有相同的信號狀態。
EN、ENO、IN、N、OUT的存儲區可以為I、Q、M、L、D。
四、循環移位指令
循環移位指令與移位指令的區別在於:循環移位指令的操作數沿著一個閉合的圓進行移位操作,不需要額外補0和1;而移位指令則沿著直線進行,缺失位補0或1。
可使用循環移位指令逐位左移或右移累加器1的整個內容。循環移位指令觸發與移位指令相似的功能。然而,它使用累加器中移出的位的信號狀態填充空出的位。循環指令後的數字或在累加器2的低字中的數值表示要循環移位的數目。有些循環移位指令也可以通過狀態字的CC1位進行。複位狀態字的CC0位為“0”。
S7-300可以使用的循環移位指令有以下幾種。
1. ROL_DW(雙字循環左移)
ROL_DW (雙字循環左移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。ROL_DW指令用於將輸入IN的全部內容逐位向左循環移位。輸入N用於指定循環移位的位數。如果N大於32,則雙字IN將被循環移位[(N-1)對32求模,所得的餘數]+1位。自右移入的位位置將被賦予向左循環移出的各個位的邏輯狀態。可在輸出OUT位置掃描雙字循環指令的結果。如果N不等於0,則ROL_DW會將CC0位和OV位設為“0”。
ENO與EN具有相同的信號狀態。
ROL_DW框由I0.0位置上的邏輯“1”激活,對MD0所對應的雙字進行循環左移位操作,循環移位3位,並將結果送入MD10中。移位過程為:每左移移位,最高位入最低位,如此按循環數進行循環。設MD0所對應的數為11000011101011000011111000001110,若移位3位,則移後的結果為00011101011000011111000001110110。
2.ROR_DW(雙字循環右移)
ROR_DW (雙字循環右移)指令通過使能(EN)輸入位置上的邏輯“1”來激活。ROR_DW指令用於將輸入IN的全部內容逐位向右循環移位。輸入N用於指定循環移位的位數。如果N大於32,則雙字IN將被循環移位[(N-1)對32求模,所得的餘數]+1位。自左移入的位位置將被賦予向右循環移出的各個位的邏輯狀態。可在輸出OUT位置掃描雙字循環指令的結果。如果N不等於0,則ROR_DW會將CC 0位和OV位置為“0”。
ENO與EN具有相同的信號狀態。
五、轉換指令
轉換指令將累加器1中的數據進行類型轉換,轉換的結果仍在累加器1中。能夠實現的轉換操作有:BCD碼和整數及長整數間的轉換;實數和長整數間的轉換;數的取反、取負;字節擴展等。
在STEP7中,整數和長整數是以補碼的形式表示的。BCD碼數值有兩種:一種是字(16位)格式的BCD碼數,其數值範圍-999~+999;另一種是雙字(32位)格式的BCD碼數,範圍 -9999999~+9999999。
(一)BCD和整數間的轉換
梯形圖符號如下:圖中EN為使能(轉換允許)輸入端,ENO為使能輸出端;IN為被轉換數的輸入端,OUT為轉換結果輸出端。
下麵通過一段梯形圖程序來說明轉換指令的用法。如果I0.0為“1”,則MW2的內容以16位整數形式裝入累加器1的低字,並將其轉換為32位的雙整型,結果存儲在MD12中;如果轉換成功執行(ENO = EN ),則輸出Q4.0的狀態為“1”。
(二)浮點數和長整數間的轉換
因為浮點數的數值範圍遠大於32 位整數,所以有的浮點數不能成功地轉換為32位整數。如果用戶的浮點數格式非法或超出了32 位整數的表示範圍,則在累加器1中得不到有效結果,而且狀態字中的OV和OS被置“1”。
上麵的指令都是將累加器1中的實數化整為32為整數,因化整的規則不同,所以在累加器1中得到的結果也不一致。
輸入端IN是要轉換的浮點值,轉換結果由參數OUT輸出;如果產生溢出,輸出使能ENO的狀態為“0”。各參數的存儲區均為I、Q、M、L、D。
如果I0.0的狀態為“1”,則將MD10中的內容以浮點數讀取,並將其轉換為最接近的長整數;函數“取整為最接近值”的結果存儲在MD12中;如果產生溢出或未執行指令(I0.0=0),則輸出Q4.0的狀態為“1”。
(三)數的取反取負
EN為使能輸入端(轉換允許輸入端),ENO為使能輸出端;IN為被轉換數的輸入端,OUT為轉換結果輸出端。對於INV_I、INV_DI和NEG_R指令,ENO始終與EN的信號狀態相同;對於NEG_I和NEG_DI指令,如果EN的信號狀態 = 1並產生溢出,則ENO的信號狀態=0,其它情況下,ENO始終與EN的信號狀態相同。各參數的存儲區均為I、Q、M、L、D。