打印

在单片机程序开发中可调时间模式切换的一个编程思路-四...

[复制链接]
968|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yonko|  楼主 | 2018-7-15 09:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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时,表示总的清洗时间到,清洗机停机。
以上的程序方法就实现了本文需求的两种水液可变运行时间交替冲洗的目的。如有不足,欢迎指正。
欢迎关注微信公众号:永珂在线







相关帖子

沙发
cjseng| | 2018-7-15 11:08 | 只看该作者
本帖最后由 cjseng 于 2018-7-15 11:38 编辑

以后,如果客户又改变了需求,比如,某个时刻要求两种水液同时冲洗,你又要改一次程序我来做的话,定义一个变量Step,定义两个数组Out[],Time[];
数组长度有最大动作步序决定,比如8;
Out[]存放每一个动作的输出状态,用位来表示每一路输出状态,可以自定义,也可以const;
Time[]存放每一个动作的持续时间;
初始Step=0,启动后加一,之后每过一个Time定义的时间,Step++,直到Step大于最大的步序,Step=0;
查表Out[Step]就是输出状态。
。。。。。。
这样,客户需求再变,也不用改程序了。


使用特权

评论回复
板凳
sosbbc| | 2018-7-15 11:19 | 只看该作者
点赞点赞

使用特权

评论回复
地板
filmhog| | 2018-7-17 11:45 | 只看该作者
重点是,客户的需求, 尤其是数字, 尽可能不要放进程序的逻辑中, 而是放进数据中。 程序逻辑就是用来处理数据。

使用特权

评论回复
5
filmhog| | 2018-7-17 11:45 | 只看该作者
重点是,客户的需求, 尤其是数字, 尽可能不要放进程序的逻辑中, 而是放进数据中。 程序逻辑就是用来处理数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

116

主题

229

帖子

0

粉丝