對于 FC的使用,另一個的常見的錯誤是對輸出的錯誤處理:導(dǎo)致這個錯誤的原因還是對FC認(rèn)識的不清楚。
再次強(qiáng)調(diào):相比較于 FB,FC是一個沒有存儲空間的邏輯塊。
如果沒有數(shù)據(jù)被寫至 FC 的 OUT參數(shù),F(xiàn)C將會輸出一個隨機(jī)值!對于 FB, 因為其可以使用背景數(shù)據(jù)塊來存儲 OUT參數(shù)的數(shù)值,即使某次調(diào)用沒有對 OUT參數(shù)進(jìn)行寫操作,OUT參數(shù)依然可以輸出上一次的舊值。
下面的程序?qū)⒄f明這一點:程序原本目的:
在 OB1中調(diào)兩次 FC22,將 MW0,MW2作為輸入?yún)?shù),DB1.DBX0.0,DB1.DBX0.1分別作為輸出參數(shù)賦給 FC22
FC22檢測當(dāng)輸入大于 10時,置位輸出為 1FC22檢測當(dāng)輸入小于-10時,復(fù)位輸出為 0 FC22的輸出的動作死區(qū)為-10至 10
此程序乍看是沒有錯誤的,但是,如果 OB1中調(diào)用了兩次 FC22,而且 MW2位于死區(qū)(-10 至10)之間時,MW0的數(shù)值改變將不僅僅改變 DB1.DBX0.0的狀態(tài),同時會影響輸出 DB1.DBX0.1的數(shù)值。
故障分析:在上面的例子,OB1中調(diào)用了兩次 FC22,而且 MW2位于死區(qū)(-10至 10)之間時,其輸出在FC22沒有被賦值,DB1.DBX0.1正常情況下不應(yīng)當(dāng)改變數(shù)值。
本例中,MW0的數(shù)值改變將不僅僅改變DB1.DBX0.0的狀態(tài),同時會影響輸出 DB1.DBX0.1的數(shù)值。如下圖。
對于 FC的輸出變量,必須要在每次執(zhí)行 FC時賦給一個確定的值,否則輸出有可能會輸出一個隨機(jī)值。下列用法都是錯誤的:
將輸出變量用于上升/下降沿指令
將輸出變量用于自保持邏輯
輸出變量未在所在程序段中賦值
警告:不要因為在 FC編程中遇到?jīng)]有對輸出賦值,而程序執(zhí)行正確,就忽略了對 FC輸出編程的注意事項,否則將承擔(dān)這個錯誤有可能帶來的風(fēng)險。
建議:
用 IN/OUT 變量代替 OUTPUT 變量
不論何時調(diào)用塊,F(xiàn)C中的OUT參數(shù)都必須被賦值。
審核編輯:劉清
-
MFC編程
+關(guān)注
關(guān)注
0文章
8瀏覽量
6316
原文標(biāo)題:FC 輸出處理
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
嵌入式編程錯誤處理機(jī)制設(shè)計

Rust語言中錯誤處理的機(jī)制
嵌入式C編程常用的異常錯誤處理
labviEW錯誤處理的問題
LabVIEW錯誤處理問題
LabVIEW中的錯誤處理
Spring Boot框架錯誤處理
嵌入式系統(tǒng)C語言編程中的錯誤處理資料總結(jié)
Rust代碼啟發(fā)之返回值異常錯誤處理

評論