本帖最后由 yonko 于 2018-7-15 11:33 编辑
文 ❤沙鸥 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时,表示总的清洗时间到,清洗机停机。
以上的程序方法就实现了本文需求的两种水液可变运行时间交替冲洗的目的。如有不足,欢迎指正。
欢迎关注微信公众号:永珂在线
|