我試了在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變量來轉移,這個不可取。