编写示例—窗帘一键开关或开停关停控制

[复制链接]
crodigy 发表于 2018-12-24 12:08:43 | 显示全部楼层 |阅读模式
本帖最后由 crodigy 于 2019-3-4 13:55 编辑

一、无状态反馈窗帘电机,一按键控制窗帘电机的开关停


需求分析:因为没有反馈,所以无法准确的确定窗帘电机当前的状态和开合度;如直接通过一个按键以:开、停、关、停的循环方式控制窗帘的运行状态,则会出现如果只是单纯的想控制窗帘关时,需要连续按2-4次的情况。
解决措施:由于窗帘最大行程是固定的,窗帘电机运行到行程上限时会自动停下,所以为减少连续多按情况的发生,现设定一个每次开或关操作15s内再次按下时是停动作,超出15s则没有停。

二、程序编写思路


1、以上的15s需求设定一个计时,那么这个计时还必须有复位的功能。因为如果没有复位功能,在15s内如果连续多次按下按键,上一个15s计时没完成,下一个计时过来是有冲突的。以上情形决定这个计时函数用“oneshot”。
2、在15s之外,需要一键开关。那么就需要使用“digital step”这个循环函数。
3、15s内是第二次按下就是停,那么正好使用“oneshot”的计时状态作为通道判断开关,结合“buffer”做通道处理。

三、编程实现

1、
cl1.png

2、
cl2.png

为什么信号要经过“delay”延时,是因为信号是有脉冲宽度的,如果不延时,面板按键按下时,如果15s内外的状态会立即反转,此时15s内的动作和15s外的动作都会同时执行。这个延时最好在“1-1.5”之间。太长了也不好。

3、以上的“cl_open”、"cl_close"、“cl_stop”去触发对应的窗帘控制就OK了。
4、如需复制到其它窗帘电机的控制,只需要将“cl”批量替换掉区分就可以了。
5、15s的时间不合适可以在“oneshot”中直接修改。

四、缺点分析

1、以上的逻辑不能完全避免需要按2-3次的情况。因为第一次按下的开或关动作可能不是用户想要的动作。如果想要明确区分出开、关还是用两个键控制吧。
2、上面的15s延时对窗帘本来就快到行程上限的位置来讲,时间有点太长。
3、重要缺陷:一键控制的这个按键按下的频率不能太快,两次按下的时间间隔需大于1.5s。


五、附件
示例程序见附件

六:说明

以上纯属交流沟通。如有错误的地方,请批评点正;如有更好的方式方法请不吝赐教。



窗帘示例程序.zip

3.85 KB, 下载次数: 1208

13228751750 发表于 2019-2-12 12:57:02 | 显示全部楼层

感谢楼主分享,辛苦了!!!
回复

使用道具 举报

13228751750 发表于 2019-2-12 13:10:43 | 显示全部楼层
嘻嘻嘻嘻嘻嘻嘻
回复

使用道具 举报

小叮当 发表于 2019-2-22 08:49:25 | 显示全部楼层
拓展了窗帘控制方式
回复

使用道具 举报

小叮当 发表于 2019-2-28 11:27:35 | 显示全部楼层
不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则