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