塊調用指令( CALL)用來調用功能塊(FB)、功能(FC)、係統功能塊(SFB)或係統功能( SFC),或調用西門子預先編好的其他標準塊。
在CALL指令中,FC、SFC、FB和SFB是作為(wei) 地址輸入的,邏輯塊的地址可以是絕對地址或符號地址。CALL指令與(yu) RLO和其他任何條件無關(guan) 。在調用FB和SFB時,應提供與(yu) 它們(men) 配套的背景數據塊(Instance DB)。而調用FC和SFC時,則不需要背景數據塊。處理完被調用的塊後,調用它的程序繼續其邏輯處理。在調用SFB和SFC後,寄存器的內(nei) 容被。恢複。
使用CALL指令時,應將實參(Actual Parameter)賦給被調用的功能塊中的形參(Formal Parameter),並保證實參與(yu) 形參的數據類型一致。
使用語句表編程時,CALL指令中被調用的塊應是已經存在的塊,其符號名也應該是已經定義(yi) 過的。
在調用塊時可以通過變量表交換參數,用編程軟件編寫(xie) 語句表程序時,如果被調用的邏輯塊的變量聲明表中有IN、OUT和IN_OUT類型的變量,則輸入CALL指令後編程軟件會(hui) 自動地打開變量表,隻需對各形參填寫(xie) 對應的實參即可。
在調用FC和SFC時,必須為(wei) 所有的形參指定實參。調用FB和SFB時,隻需指定上次調用後必須改變的實參。由於(yu) FB被處理後,實參儲(chu) 存在背景數據塊中。如果實參是數據塊中的地址,必須指定完整的絕對地址,如DB1. DBW2。
邏輯塊的IN(輸入)參數可以指定為(wei) 常數、絕對地址或符號地址。OUT(輸出)和IN_OUT(輸入_輸出)參數必須指定為(wei) 絕對地址或符號地址。
CALL指令保存被停止執行的塊的編號和返回地址及當時打開的數據塊的編號。此外,CALL指令關(guan) 閉MCR區,生成被調用的塊的局域數據區。
①CALL塊調用指令:CALL<邏輯塊標識符>。使用該指令,可以調用功能(FC)或功能塊( SFB)、係統功能(SFC)或係統功能塊(SFB),或調用由西門子公司提供的標準預編程塊。使用CALL塊指令,可以調用作為(wei) 地址輸入的FC和SFC或FB和SFB,與(yu) RLO或其他條件無關(guan) 。如果使用該指令調用一個(ge) FB或SFB,必須提供具有相關(guan) 背景數據塊的程序塊。在被調用塊處理完後,調用塊程序繼續邏輯處理。邏輯塊的地址可以絕對指定,也可相對指定。在SFB、SFC調用後,保存寄存器的內(nei) 容。
調用塊可通過一個(ge) 變量表與(yu) 被調用塊交換參數。
如果調用一個(ge) 功能塊(FB)、係統功能塊(SFB)、功能(FC)或係統功能(SFC),並且被調用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為(wei) 一個(ge) 形式參數表被添加到調用塊中。如果調用的是一個(ge) 功能(FC)和係統功能(SFC),則必須在調用邏輯塊中為(wei) 聲明的形式參數賦予實際參數。
如果調用的是功能塊( FB)和係統功能塊(SFB),隻需定義(yi) 與(yu) 以前調用相比必須進行修改的實際參數。在處理完功能塊後,實際參數保存在背景數據塊中。如果實際參數是一個(ge) 數據塊,則必須指定完整的絕對地址,如DB1、KBW2。
IN參數可作為(wei) 常數、絕對地址或符號地址定義(yi) 。OUT和IN_OUT參數必須作為(wei) 絕對地址或符號地址定義(yi) 。必須保證所有地址和常數與(yu) 要傳(chuan) 送的數據類型相符。
調用指令可將返回地址(選擇符和相對地址)、兩(liang) 個(ge) 當前數據塊的選擇符及MA位保存在B(塊)堆棧中。此外,調用指令還可去激活MCR的相關(guan) 性,然後生成被調用塊的本地數據範圍。
編程示例1:為(wei) FC6調用賦值參數
CALL FC6
形式參數 實際參數
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
ERROR :=Q100.0
編程示例2:無參數調用一個(ge) 係統功能( SFC)
CALL SFC43 說明:調用SFC43,重新觸發看門狗定時器(無參數)
編程示例3:使用背景數據塊DB1調用FB99
CALL FB99.DB1
形式參數 實際參數
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_ POWER :=#POWER1
MAX_TEMP :=#TEMP1
每一次功能塊(FB)或係統功能塊(SFB)調用都必須有一個(ge) 背景數據塊。在上述舉(ju) 例中,數據塊DB1必須在調用之前已存在。
②調用功能塊指令:CALL FB nl、DB nl。使用該指令,可調用用戶定義(yi) 的功能塊(FB)。調用指令能夠調用作為(wei) 地址輸入的功能塊,與(yu) RLO或其他條件無關(guan) 。如果使用調用指令調用一個(ge) 功能塊,必須為(wei) 它提供一個(ge) 背景數據塊。在處理完被調用塊後,調用塊程序繼續處理。邏輯塊的地址可以是絕對地址,也可以是符號地址。
調用塊可通過一個(ge) 變量表與(yu) 被調用的塊交換參數。
如果調用一個(ge) 功能,並且調用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為(wei) 一個(ge) 形式參數表被添加到用於(yu) 調用塊的程序中。
由於(yu) 在功能塊處理完之後,實際參數保存在背景數據塊中,當調用功能塊時,隻需定義(yi) 與(yu) 以前調用相比必須修改的實際參數。如果實際參數是一個(ge) 數據塊,則必須指定完整的絕對地址,如DB1、DBW2。
IN參數可作為(wei) 常數、絕對地址或符號地址定義(yi) 。OUT和IN_OUT參數必須作為(wei) 絕對地址或符號地址定義(yi) 。必須保證所有地址和常數與(yu) 要傳(chuan) 送的數據類型相符。
調用指令可將返回地址(選擇符和相對地址)、兩(liang) 個(ge) 當前數據塊的選擇符及MA位保存在B(塊)堆棧中。此外,調用指令還可去激活MCR的相關(guan) 性,然後生成被調用塊的本地數據範圍。
編程示例:使用背景數據塊DB1調用FB99
CALL FB99,DB1
形式參數 實際參數
MAX_RPM :=#RPM1_MAX
MIN_RPM :=#RPM1
MAX_POWER :=#POWER1
MAX_TEMP :=#TEMP1
每一次功能塊( FB)調用都必須有一個(ge) 背景數據塊。在上述舉(ju) 例中,數據塊DB1必須在調用之前已存在。
③調用功能指令:CALL FCn。如果使用的是語句表編輯器(STL Editor),則n必須指向現有有效塊。在使用之前,還必須定義(yi) 符號名。
使用該指令,可調用功能( FC)。調用指令能夠調用作為(wei) 地址輸入的功能(FC),與(yu) RLO或其他條件無關(guan) 。在處理完被調用塊後,調用塊程序繼續處理。邏輯塊的地址可以絕對指定,也可相對指定。
調用塊可通過一個(ge) 變量表與(yu) 被調用的塊交換參數。
如果調用一個(ge) 功能,並且調用塊的變量聲明表中有IN、OUT和IN_OUT聲明,則這些變量作為(wei) 一個(ge) 形式參數表被添加到用於(yu) 調用塊的程序中。
在調用功能時,必須在調用邏輯塊中為(wei) 聲明的形式參數賦予實際參數。
IN參數可作為(wei) 常數、絕對地址或符號地址定義(yi) 。OUT和IN_OUT參數必須作為(wei) 絕對地址或符號地址定義(yi) 。必須保證所有地址和常數與(yu) 要傳(chuan) 送的數據類型相符。
調用指令可將返回地址(選擇符和相對地址)、兩(liang) 個(ge) 當前數據塊的選擇符及MA位保存在B(塊)堆棧中。除此之外,調用指令還可去激活MCR的相關(guan) 性,然後生成被調用塊的本地數據範圍。
編程示例:為(wei) FC6調用賦值參數
CALL FC6
形式參數 實際參數
NO OF TOOL :=MW100
TIMEOUT :=MW110
FOUND :=Q0.1
FRROR :=Q100.0
④調用多背景塊指令:CALL#變量名。通過使用一個(ge) 功能塊的數據類型聲明一個(ge) 靜態變量,可以生成一個(ge) 多背景塊。在程序元素目錄中隻包含已聲明的多背景塊。
⑤條件調用指令:CC<邏輯塊標識符>。使用該指令,可以在RLO =1時調用一個(ge) 邏輯塊。該指令用於(yu) 無參數調用FC或FB類型的邏輯塊。除了不能使用調用程序傳(chuan) 送參數之外,CC指令與(yu) CALL指令的用法相同。該指令可將返回地址(選擇符和相對地址)、兩(liang) 個(ge) 當前數據塊的選擇符及MA位保存在B(塊)堆棧中,去激活MCR相關(guan) 性,生成被調用塊的本地數據範圍,並開始執行調用的程序代碼。
邏輯塊的地址可以絕對指定,也可相對指定。
編程示例1:
A I 2.0 說明:檢查輸入I2.0的信號狀態
CC FC6 如果I2.0為(wei) “1”,調用功能FC6
A M 3.0 如果I2.0=1,從(cong) 調用功能返回處執行;如果I2.0=0,直接在A I2.0語句後執行
如果CALL指令調用的是一個(ge) 功能塊(FB)或一個(ge) 係統功能塊(SFB),必須在語句中指定一個(ge) 背景數據塊(數據塊號)。對於(yu) 使用CC指令的調用,不能將一個(ge) 數據塊分配給語句中的地址。
根據所使用的程序段,程序編輯器( Program Editor)可以在從(cong) 梯形邏輯編程語言轉換為(wei) 語句表編程語言過程中,生成UC指令或CC指令。
編程示例2(功能塊FB1的背景數據塊是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 調用SFC43,重新觸發監控定時器(無參數)
每一個(ge) FB和SFB都必須有一個(ge) 背景數據塊,上例中在調用FB1之前,FB1和背景數據塊DB1必須是已經存在的。
⑥無條件調用指令UC( Unconditional Block Call)和條件調用指令CC( Conditional Block Call)。用於(yu) 調用沒有參數的FC和SFC。其使用方法與(yu) CALL指令相同,隻是在調用時不能傳(chuan) 遞參數。CC指令在邏輯運算結果RLO =1時才調用塊。用CC指令和UC指令調用塊時,不能使用背景數據塊。下麵是使用CC指令和UC指令的例子。
A I0.1 說明:刷新RLO
CC FC6 如果RLO=1,調用沒有參數的功能FC6
L IW4 從(cong) FC6返回後執行,或在I0.1=0時不調用FC6,直接執行本指令
UC FC2 無條件調用沒有參數的功能FC2
在CALL指令中,FC、FB、SFC和SFB是作為(wei) 地址輸入的,其地址可以是絕對地址,或者是符號地址。在調用FB和SFB時,必須提供與(yu) 之相對應的背景數據塊;而調用FC和SFC時,不需調用背景數據塊。
在調用時,應將實參賦予被調用功能中的形參,並確保實參和形參數據類型相同,並且在FC和SFC的調用中,必須為(wei) 所有形參指定實參,而調用FB和SFB,則隻需指定上次調用後必須改變的實參。
FB功能塊的具體(ti) 調用(指令表程序)如下。
CALL FB1,DB1 說明:調用FB1,其背景數據塊為(wei) DB1
MAX :=MW10 MAX為(wei) FB1定義(yi) 的參數,將MW10的值賦予MAX
MIN :=MW20 將MW20的值賦予FB1參數MIN
POWER_ON :=I 0.0 將I0.0賦予FB1參數POWER_ON
POWER_OFF:=I 0.1 將I0.1賦予FB1參數POWER_OFF
程序中調用了背景數據塊DB1,並將實參(“;=”之後的變量)賦予形參(“;”之前的變量)。