西門子PLC功能和功能塊的區(qū)別,西門子plc的FB和FC均為用戶編寫的子程序,局部數(shù)據(jù)均有IN、OUT、IN_OUT、TEMP,臨時(shí)變量TEMP儲(chǔ)存在局部數(shù)據(jù)堆棧中。
1)FC的返回值RET_VAL實(shí)際上輸出參數(shù),因此有無動(dòng)態(tài)變量(STAT)是二者的局部變量的本質(zhì)區(qū)別,功能塊的靜態(tài)變量用北京數(shù)據(jù)塊來保存,如果功能有執(zhí)行完后需要保存的數(shù)據(jù),只能存放在全局變量(I/O、PI/PO、M、T、共享數(shù)據(jù)塊DB中),但是這樣會(huì)影響功能的可移植性,如果功能或功能塊的內(nèi)部不使用全局變量,只使用局部變量,不需要做任何修改,就可以將塊移植到其他項(xiàng)目,如果塊使用了全局變量,在移植時(shí)需要重新統(tǒng)一分配它們的內(nèi)部使用的全局變量地址,以保證不會(huì)出現(xiàn)地址沖突,當(dāng)程序復(fù)雜,子程序和中斷程序很多時(shí),這種重新分配全局變量地址的工作量非常大,也容易出錯(cuò)。如果邏輯塊有執(zhí)行完成需要保存的數(shù)據(jù),顯然應(yīng)使用功能塊,而不是功能。
2)功能塊的輸出參數(shù)不僅與來自外部的輸入?yún)?shù)有關(guān),還與用靜態(tài)變量保存的內(nèi)部狀態(tài)數(shù)據(jù)有關(guān),功能因?yàn)闆]有靜態(tài)變量,相同的輸入?yún)?shù)產(chǎn)生的執(zhí)行結(jié)果是相同。
3)功能塊有背景數(shù)據(jù)塊DB,功能沒有背景數(shù)據(jù)塊,只能在功能內(nèi)部訪問功能的局部變量,其他邏輯塊與人機(jī)界面可以訪問相應(yīng)背景數(shù)據(jù)塊中的變量。
4)不能給功能的局部比啊娘設(shè)置初始值,可以給功能塊的局部變量(不包含TEMP)設(shè)置初始值,在調(diào)用功能塊時(shí)如果沒有設(shè)置某些輸入?yún)?shù)的實(shí)參,將使用背景數(shù)據(jù)塊中的初始值,或上一次執(zhí)行后的值,調(diào)用功能時(shí)應(yīng)給所有的形參指定實(shí)參。
舉例說明:
1、生成功能
打開SIMATIC管理器執(zhí)行【插入】-【S7塊】-【功能】
2、生成局部數(shù)據(jù)
雙擊打開FC1,如下圖,將分隔條向下拉,分隔條上面是功能的變量聲明表,下面為程序編寫區(qū),
在變量聲明表中定義局部變量,(局部變量只能在所在的功能中使用),
1)IN:由調(diào)用它的塊提供的輸入?yún)?shù)
2)OUT:返回給調(diào)用它的塊的輸出參數(shù)
3)IN_OUT:初值由調(diào)用它的塊提供,塊執(zhí)行后返回給調(diào)用它的塊。
4)TEMP:暫時(shí)保存在局部數(shù)據(jù)堆棧中的數(shù)據(jù),只是在執(zhí)行塊時(shí)使用臨時(shí)數(shù)據(jù),執(zhí)行完后,不再保存臨時(shí)數(shù)據(jù)的數(shù)值,它可能被別的數(shù)據(jù)覆蓋。
5)RETURN中的RET_VAL屬于輸出參數(shù)。
本例IN和OUT參數(shù)如下圖
3、生成功能中的程序
STEP7自動(dòng)在局部變量的前面加#號(hào),如#start。
4、調(diào)用功能
在OB1導(dǎo)入FC1