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