河北西門子PLC模塊代理
西門子S7-300/400 PLC STL中的邏輯塊調(diào)用指令CALL
塊調(diào)用指令( CALL)用來調(diào)用功能塊(FB)、功能(FC)、系統(tǒng)功能塊(SFB)或系統(tǒng)功能( SFC),或調(diào)用西門子預(yù)先編好的其他標(biāo)準(zhǔn)塊。
在CALL指令中,FC、SFC、FB和SFB是作為地址輸入的,邏輯塊的地址可以是地址或符號地址。CALL指令與RLO和其他任何條件無關(guān)。在調(diào)用FB和SFB時,應(yīng)提供與它們配套的背景數(shù)據(jù)塊(Instance DB)。而調(diào)用FC和SFC時,則不需要背景數(shù)據(jù)塊。處理完被調(diào)用的塊后,調(diào)用它的程序繼續(xù)其邏輯處理。在調(diào)用SFB和SFC后,寄存器的內(nèi)容被?;謴?fù)。
使用CALL指令時,應(yīng)將實參(Actual Parameter)賦給被調(diào)用的功能塊中的形參(Formal Parameter),并保證實參與形參的數(shù)據(jù)類型*。
使用語句表編程時,CALL指令中被調(diào)用的塊應(yīng)是已經(jīng)存在的塊,其符號名也應(yīng)該是已經(jīng)定義過的。
在調(diào)用塊時可以通過變量表交換參數(shù),用編程軟件編寫語句表程序時,如果被調(diào)用的邏輯塊的變量聲明表中有IN、OUT和IN_OUT類型的變量,則輸入CALL指令后編程軟件會自動地打開變量表,只需對各形參填寫對應(yīng)的實參即可。
在調(diào)用FC和SFC時,必須為所有的形參實參。調(diào)用FB和SFB時,只需上次調(diào)用后必須改變的實參。由于FB被處理后,實參儲存在背景數(shù)據(jù)塊中。如果實參是數(shù)據(jù)塊中的地址,必須完整的地址,如DB1. DBW2。
邏輯塊的IN(輸入)參數(shù)可以為常數(shù)、地址或符號地址。OUT(輸出)和IN_OUT(輸入_輸出)參數(shù)必須為地址或符號地址。
CALL指令保存被停止執(zhí)行的塊的編號和返回地址及當(dāng)時打開的數(shù)據(jù)塊的編號。此外,CALL指令關(guān)閉MCR區(qū),生成被調(diào)用的塊的局域數(shù)據(jù)區(qū)。
①CALL塊調(diào)用指令:CALL<邏輯塊標(biāo)識符>。使用該指令,可以調(diào)用功能(FC)或功能塊( SFB)、系統(tǒng)功能(SFC)或系統(tǒng)功能塊(SFB),或調(diào)用由西門子公司提供的標(biāo)準(zhǔn)預(yù)編程塊。使用CALL塊指令,可以調(diào)用作為地址輸入的FC和SFC或FB和SFB,與RLO或其他條件無關(guān)。如果使用該指令調(diào)用一個FB或SFB,必須提供具有相關(guān)背景數(shù)據(jù)塊的程序塊。在被調(diào)用塊處理完后,調(diào)用塊程序繼續(xù)邏輯處理。邏輯塊的地址可以,也可相對。在SFB、SFC調(diào)用后,保存寄存器的內(nèi)容。
調(diào)用塊可通過一個變量表與被調(diào)用塊交換參數(shù)。
如果調(diào)用一個功能塊(FB)、系統(tǒng)功能塊(SFB)、功能(FC)或系統(tǒng)功能(SFC),并且被調(diào)用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為一個形式參數(shù)表被添加到調(diào)用塊中。如果調(diào)用的是一個功能(FC)和系統(tǒng)功能(SFC),則必須在調(diào)用邏輯塊中為聲明的形式參數(shù)賦予實際參數(shù)。
如果調(diào)用的是功能塊( FB)和系統(tǒng)功能塊(SFB),只需定義與以前調(diào)用相比必須進(jìn)行修改的實際參數(shù)。在處理完功能塊后,實際參數(shù)保存在背景數(shù)據(jù)塊中。如果實際參數(shù)是一個數(shù)據(jù)塊,則必須完整的地址,如DB1、KBW2。
IN參數(shù)可作為常數(shù)、地址或符號地址定義。OUT和IN_OUT參數(shù)必須作為地址或符號地址定義。必須保證所有地址和常數(shù)與要傳送的數(shù)據(jù)類型相符。
調(diào)用指令可將返回地址(選擇符和相對地址)、兩個當(dāng)前數(shù)據(jù)塊的選擇符及MA位保存在B(塊)堆棧中。此外,調(diào)用指令還可去激活MCR的相關(guān)性,然后生成被調(diào)用塊的本地數(shù)據(jù)范圍。
編程示例1:為FC6調(diào)用賦值參數(shù)
CALL FC6
形式參數(shù) 實際參數(shù)
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
ERROR :=Q100.0
編程示例2:無參數(shù)調(diào)用一個系統(tǒng)功能( SFC)
CALL SFC43 說明:調(diào)用SFC43,重新觸發(fā)看門狗定時器(無參數(shù))
編程示例3:使用背景數(shù)據(jù)塊DB1調(diào)用FB99
CALL FB99.DB1
形式參數(shù) 實際參數(shù)
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_ POWER :=#POWER1
MAX_TEMP :=#TEMP1
每一次功能塊(FB)或系統(tǒng)功能塊(SFB)調(diào)用都必須有一個背景數(shù)據(jù)塊。在上述舉例中,數(shù)據(jù)塊DB1必須在調(diào)用之前已存在。
②調(diào)用功能塊指令:CALL FB nl、DB nl。使用該指令,可調(diào)用用戶定義的功能塊(FB)。調(diào)用指令能夠調(diào)用作為地址輸入的功能塊,與RLO或其他條件無關(guān)。如果使用調(diào)用指令調(diào)用一個功能塊,必須為它提供一個背景數(shù)據(jù)塊。在處理完被調(diào)用塊后,調(diào)用塊程序繼續(xù)處理。邏輯塊的地址可以是地址,也可以是符號地址。
調(diào)用塊可通過一個變量表與被調(diào)用的塊交換參數(shù)。
如果調(diào)用一個功能,并且調(diào)用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為一個形式參數(shù)表被添加到用于調(diào)用塊的程序中。
由于在功能塊處理完之后,實際參數(shù)保存在背景數(shù)據(jù)塊中,當(dāng)調(diào)用功能塊時,只需定義與以前調(diào)用相比必須修改的實際參數(shù)。如果實際參數(shù)是一個數(shù)據(jù)塊,則必須完整的地址,如DB1、DBW2。
IN參數(shù)可作為常數(shù)、地址或符號地址定義。OUT和IN_OUT參數(shù)必須作為地址或符號地址定義。必須保證所有地址和常數(shù)與要傳送的數(shù)據(jù)類型相符。
調(diào)用指令可將返回地址(選擇符和相對地址)、兩個當(dāng)前數(shù)據(jù)塊的選擇符及MA位保存在B(塊)堆棧中。此外,調(diào)用指令還可去激活MCR的相關(guān)性,然后生成被調(diào)用塊的本地數(shù)據(jù)范圍。
編程示例:使用背景數(shù)據(jù)塊DB1調(diào)用FB99
CALL FB99,DB1
形式參數(shù) 實際參數(shù)
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_POWER :=#POWER1
MAX_TEMP :=#TEMP1
每一次功能塊( FB)調(diào)用都必須有一個背景數(shù)據(jù)塊。在上述舉例中,數(shù)據(jù)塊DB1必須在調(diào)用之前已存在。
③調(diào)用功能指令:CALL FCn。如果使用的是語句表編輯器(STL Editor),則n必須指向現(xiàn)有有效塊。在使用之前,還必須定義符號名。
使用該指令,可調(diào)用功能( FC)。調(diào)用指令能夠調(diào)用作為地址輸入的功能(FC),與RLO或其他條件無關(guān)。在處理完被調(diào)用塊后,調(diào)用塊程序繼續(xù)處理。邏輯塊的地址可以,也可相對。
調(diào)用塊可通過一個變量表與被調(diào)用的塊交換參數(shù)。
如果調(diào)用一個功能,并且調(diào)用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為一個形式參數(shù)表被添加到用于調(diào)用塊的程序中。
在調(diào)用功能時,必須在調(diào)用邏輯塊中為聲明的形式參數(shù)賦予實際參數(shù)。
IN參數(shù)可作為常數(shù)、地址或符號地址定義。OUT和IN_OUT參數(shù)必須作為地址或符號地址定義。必須保證所有地址和常數(shù)與要傳送的數(shù)據(jù)類型相符。
調(diào)用指令可將返回地址(選擇符和相對地址)、兩個當(dāng)前數(shù)據(jù)塊的選擇符及MA位保存在B(塊)堆棧中。除此之外,調(diào)用指令還可去激活MCR的相關(guān)性,然后生成被調(diào)用塊的本地數(shù)據(jù)范圍。
編程示例:為FC6調(diào)用賦值參數(shù)
CALL FC6
形式參數(shù) 實際參數(shù)
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
FRROR :=Q100.0
④調(diào)用多背景塊指令:CALL#變量名。通過使用一個功能塊的數(shù)據(jù)類型聲明一個靜態(tài)變量,可以生成一個多背景塊。在程序元素目錄中只包含已聲明的多背景塊。
⑤條件調(diào)用指令:CC<邏輯塊標(biāo)識符>。使用該指令,可以在RLO =1時調(diào)用一個邏輯塊。該指令用于無參數(shù)調(diào)用FC或FB類型的邏輯塊。除了不能使用調(diào)用程序傳送參數(shù)之外,CC指令與CALL指令的用法相同。該指令可將返回地址(選擇符和相對地址)、兩個當(dāng)前數(shù)據(jù)塊的選擇符及MA位保存在B(塊)堆棧中,去激活MCR相關(guān)性,生成被調(diào)用塊的本地數(shù)據(jù)范圍,并開始執(zhí)行調(diào)用的程序代碼。
邏輯塊的地址可以,也可相對。
編程示例1:
A I 2.0 說明:檢查輸入I2.0的信號狀態(tài)
CC FC6 如果I2.0為“1”,調(diào)用功能FC6
A M 3.0 如果I2.0=1,從調(diào)用功能返回處執(zhí)行;如果I2.0=0,直接在A I2.0語句后執(zhí)行
如果CALL指令調(diào)用的是一個功能塊(FB)或一個系統(tǒng)功能塊(SFB),必須在語句中一個背景數(shù)據(jù)塊(數(shù)據(jù)塊號)。對于使用CC指令的調(diào)用,不能將一個數(shù)據(jù)塊分配給語句中的地址。
根據(jù)所使用的程序段,程序編輯器( Program Editor)可以在從梯形邏輯編程語言轉(zhuǎn)換為語句表編程語言過程中,生成UC指令或CC指令。
編程示例2(功能塊FB1的背景數(shù)據(jù)塊是DB1,“:=”前面是用符號地址表示的形參,“:=”后面是實參):
CALL FB1,DB1
Switch_On :=I20.0 說明:將實參I20.0賦給形參Switch_On
Switch_Off :=I20.1
Failure :=I20.2
ActuaLSpeed :=MW2
Engine_On :=Q5.0
Preset_Speed_Reached:=Q5.1
CALL SFC43 調(diào)用SFC43,重新觸發(fā)監(jiān)控定時器(無參數(shù))
每一個FB和SFB都必須有一個背景數(shù)據(jù)塊,上例中在調(diào)用FB1之前,FB1和背景數(shù)據(jù)塊DB1必須是已經(jīng)存在的。
⑥無條件調(diào)用指令UC( Unconditional Block Call)和條件調(diào)用指令CC( Conditional Block Call)。用于調(diào)用沒有參數(shù)的FC和SFC。其使用方法與CALL指令相同,只是在調(diào)用時不能傳遞參數(shù)。CC指令在邏輯運(yùn)算結(jié)果RLO =1時才調(diào)用塊。用CC指令和UC指令調(diào)用塊時,不能使用背景數(shù)據(jù)塊。下面是使用CC指令和UC指令的例子。
A I0.1 說明:刷新RLO
CC FC6 如果RLO=1,調(diào)用沒有參數(shù)的功能FC6
L IW4 從FC6返回后執(zhí)行,或在I0.1=0時不調(diào)用FC6,直接執(zhí)行本指令
UC FC2 無條件調(diào)用沒有參數(shù)的功能FC2
在CALL指令中,FC、FB、SFC和SFB是作為地址輸入的,其地址可以是地址,或者是符號地址。在調(diào)用FB和SFB時,必須提供與之相對應(yīng)的背景數(shù)據(jù)塊;而調(diào)用FC和SFC時,不需調(diào)用背景數(shù)據(jù)塊。
在調(diào)用時,應(yīng)將實參賦予被調(diào)用功能中的形參,并確保實參和形參數(shù)據(jù)類型相同,并且在FC和SFC的調(diào)用中,必須為所有形參實參,而調(diào)用FB和SFB,則只需上次調(diào)用后必須改變的實參。
FB功能塊的具體調(diào)用(指令表程序)如下。
CALL FB1,DB1 說明:調(diào)用FB1,其背景數(shù)據(jù)塊為DB1
MAX :=MW10 MAX為FB1定義的參數(shù),將MW10的值賦予MAX
MIN :=MW20 將MW20的值賦予FB1參數(shù)MIN
POWER_ON :=I 0.0 將I0.0賦予FB1參數(shù)POWER_ON
POWER_OFF:=I 0.1 將I0.1賦予FB1參數(shù)POWER_OFF
程序中調(diào)用了背景數(shù)據(jù)塊DB1,并將實參(“;=”之后的變量)賦予形參(“;”之前的變量)。
河北西門子PLC模塊代理