太復(fù)雜了,寫(xiě)軟件特別是在進(jìn)行塊封裝、FB之類(lèi)的模塊化編程的時(shí)候,一定不能想著把所有功能都塞到一個(gè)組件里面搞定,軟件開(kāi)發(fā)的基本原則就是高內(nèi)聚低耦合,只有強(qiáng)相關(guān)的功能才可以封裝到一起。
當(dāng)然,這都是理論,實(shí)際操作的時(shí)候,怎么舒服怎么來(lái)~
舉例:
我自己用的單線(xiàn)圈電磁閥氣缸控制,輸入只有使能(Enable)、輸入(InPut),原點(diǎn)(SensorA)終點(diǎn)(SensorB),時(shí)間脈沖(TP),超時(shí)(TimeRange),復(fù)位(Reset)
輸出點(diǎn)只有 輸出(OutPut)、報(bào)警(Alarm)
塊內(nèi)的邏輯只有電磁閥輸出,原點(diǎn)終點(diǎn)和超時(shí)報(bào)警邏輯,其他沒(méi)了,這就已經(jīng)很復(fù)雜了
至于說(shuō)1L提出的那些復(fù)雜功能,不好意思,都不是氣缸控制塊應(yīng)該管的事情,氣缸控制就只管氣缸控制
急停應(yīng)該是狀態(tài)管理的任務(wù),濾波應(yīng)該是輸入模塊的任務(wù)(我自己的程序會(huì)再寫(xiě)一遍輸入,從X點(diǎn)過(guò)渡到M點(diǎn)或者其他什么內(nèi)部軟元件,且在整個(gè)程序最前面),至于輸出互鎖,特殊邏輯之類(lèi)的,也都是M點(diǎn)內(nèi)部運(yùn)算完成以后再輸出到Y(jié)點(diǎn)
簡(jiǎn)單來(lái)說(shuō),不能動(dòng)的條件全部串到Enable前面,Enable沒(méi)了氣缸塊自己保持自己的狀態(tài),要做自動(dòng)撤回就在輸出上再串上enable,包括1L提到的什么屏蔽,無(wú)非不給使能嘛;要求動(dòng)的條件全部并到InPut前面,手動(dòng)也是動(dòng),自動(dòng)也是動(dòng),手自動(dòng)共享塊提供的基本功能和超時(shí)保護(hù),至于點(diǎn)動(dòng)也好,連續(xù)也好,控制一下輸入不就行了,另外寫(xiě)程序去搞定,如果頻繁使用也可以封裝~