文 ❤沙鷗 2018-7-15 成都
最近因為一個清洗機設備控制器電路板開發項目(業務QQ 2531263726)的需要,要用兩種水液(水液1和水2)交替沖洗,如水液1清洗X分鐘,水2清洗Y分鐘,到達總時間Z后停止沖洗,兩種水液共用一個水泵,用電磁閥V1和V2分別控制兩種水液的通斷。
圖 1 沖洗順序控制邏輯
最初客戶的需求和設計是水液1和水液2清洗的時間固定,分別是3分鐘和5分鐘,總時間也是固定為15分鐘。這樣就很好做,定義一個總運行時間變量T,在定時器中斷里對T自增加操作進行系統總運行時間計時,首先判斷當T在0-3分鐘內時水液1清洗3分鐘,3-8分鐘水液2清洗5分鐘,8-11水液1清洗3分鐘,11-15分鐘水液2清洗4分鐘,這樣就達到15分鐘停機,順序控制的邏輯是固定不變的,只需要按照這個邏輯切換閥門和控制水泵啟停即可。
可是后來,客戶有新的要求,需要水液1清洗時間X,水液2清洗時間Y和總時間Z能夠用戶自定義設置,這樣就增加了編程的難度,圖 1的時間控制曲線將變得不再唯一而有多種的變化,看起來難辦的樣子,筆者花了十幾分鐘幾經周折冥思苦想,終于想到了一個可行的辦法,編程思路如下:
1) 在定義了水液1清洗時間X, 水液2清洗時間Y和總時間Z, 總運行時間變量T時間的基礎上,還需要定義一個分段運行時間變量T2,T2也表示運行時間,在定時器中斷中自增加計時,不過只是標識沖洗某種特定水液的運行時間,當從水液1切換到水液2,或者從水液2切換到水液1的時候,T2會清零。
還需要定義一個標志位W1_W2,當W1_W2==1時表示水液1正在沖洗,當W1_W2=2時表示水液2正在沖洗。
2) 變量X,Y,Z是用戶可以自己設置的,如通過按鍵設置。
3) 程序運行邏輯可以是這樣的:
① 初始化:將W1_W2賦值到馬上要沖洗的標志位,本處以馬上要沖洗水液1為例,就需要令W1_W2=1;
將分段運行時間T2清零,T2=0;
② 當T2<X并且W1_W2=1時,控制閥門和水泵用水液1沖洗,T2計時;
當T2=X時,將W1_W2賦值為即將沖洗水液的標志位,例如即將用水液2沖洗,令W1_W2=2。
將分段運行時間T2清零,T2=0;
③ 當T2<Y并且W1_W2=2時,控制閥門和水泵用水液2沖洗,T2計時;
當T2=Y時,將W1_W2賦值為即將沖洗水液的標志位,例如即將用水液1沖洗,令W1_W2=1。
將分段運行時間T2清零,T2=0;
如此②-③步驟就進入了交替循環的模式,依次X時間水液1、Y時間水液2,再回到X時間水液1沖洗的循環。
④ 當總運行時間變量T=Z時,表示總的清洗時間到,清洗機停機。
以上的程序方法就實現了本文需求的兩種水液可變運行時間交替沖洗的目的。如有不足,歡迎指正。
歡迎關注微信公眾號:永珂在線
|