1. 程式人生 > 其它 >西門子FC FB中關於Temp變數的使用、OUT線圈的使用說明

西門子FC FB中關於Temp變數的使用、OUT線圈的使用說明

我試了在FC中用塊介面OUT變數來驅動別的OUT變數,會警告,但是先賦值線圈後使用觸點還是可以正常使用的,如果先使用觸點後賦值線圈不能正常使用.可是在FB中同樣用塊介面OUT變數來驅動別的OUT變數,不用管先後順序都能正常使用,為什麼?

第二個問題,為什麼在IF表示式中,CASE狀態中,REGION裡使用塊介面的OUT變數有警告,提示引數無法初始化是什麼意思.

第三個問題,CASE語句中上一個狀態轉移到下一個狀態,如果當前狀態不定義會保持上一狀態的輸入輸出對嗎

這個東西說起來有點繞,記住這麼用就行了。FC執行後沒有東西儲存上次執行的資料,

FB執行後有東西儲存的資料(Temp不儲存);

FC中的out型別沒有儲存資料,執行時的初始狀態也不知道

,西門子不建議根據它的狀態去控制其他邏輯,你要用也禁止,風險由你把控。

你的第三個問題,分幾種情況如果被賦值的變數是全域性變數會保持,是Temp的變數就未知了。

1、FC沒有背景DB塊,所有的介面引數都是臨時變數,在下一個以掃描週期值將清零,所以不賦值的話就一直是零!FB有背景DB塊,變數值可以儲存到下一個掃描週期!
2、OUT變數是隻寫引數,所以無法獲取它介面上連線變數的狀態,只能獲取DB塊中OUT的狀態!
3、SCL的賦值相當於置位、復位所以會保持的!

說明:FC中使用 OUT 全域性變數可以正常使用,資料塊靜態變數不能正常使用,先使用觸點再使用線圈不正常

使用SET指令時觸點、線圈使用正常

===================================================

別用temp型別的中間變數
FC的話,可以把這個中間變數改成INOUT型別
FB的話,可以使用stat靜態型別的變數可以實現

中間變數必須先讀後寫,你這種起保停還有沿指令不要用temp型別的變數

===================================================

temp變數必須是先賦值,後使用的原則,看似你的程式能夠滿足這個需求。但是,作為典型的起、保、停控制迴路,這個線圈變數的地址又必須具有雙重特性,即即要有輸出特性,又要有輸入特性。而且且temp這個變數沒有輸入特性而言,因為當該函式掃描完成後,temp是無法保持原有的運算結果(是一個隨機數),這個從你的圖示上就能夠反映這個情況。
如果你採用置位、復位方式,那這個程式就沒有問題。
另外,程式編輯提倡簡潔、明瞭,而你的程式這個為什麼不直接做輸出,而多一個temp變數來轉移,這個不可取。