一.你们一想到双手启动程序会怎么做?
1.用一个输入点,然后两个按钮串联?
2.两个输入点,然后输入点串联?
3.两个输入点,输入点串联,再延时?
那么这样写程序真的安全吗?
二.今天我给大家推荐另外一个思路
硬件环境:S7-1215DCDCDC
软件环境:TIA V16
1.我们首先新建一个FB块,我这里命名为 “双手启动安全继电器” ,然后创建相应的接口变量:
4个Input接口为:
输入1:bool 获取外部按钮1
输入2:bool 获取外部按钮2
有效检测时间: Time 用来设置有效检测时间,并给默认值500ms
允许误差:Time 用来设置允许按下时间的误差值,并给默认值100ms
1个Output接口为
安全输出:bool 将运算结果传给外部

接口及静态变量
2.我们用梯形图写程序如图效果

程序解读:
第一行程序:检测 输入1的状态 ,如果接通我们延时,进行有效检测
第二行程序: 检测输入2的状态,如果接通我们延时,进行有效检测
第三行程序:检测两个按钮有没有同时按下?如果有,取上升沿,检测按下瞬间他们的时序差了多少?也就是两个值相减,但是结果有可能为负值,那么我们取其绝对值,获得时序正差值。
第四行程序:当两个按钮都检测有效,按键时序差绝对值是否小于我们允许的误差值,并且有效检测时间大于允许误差,进行非法数据验证,如果都满足我们输出安全。
3.我们添加测试变量,并调用这个FB块。

输入1 M0.0:用来模拟第一个按钮
输入2 M0.1:用来模拟第二个按钮
安全 M1.0:用来模拟运算结果
模拟同时输入字节 MB0 :用来模拟同时按下

调用FB块
由于我这里的时间已经有默认值,在不需要改时间的情况下就不用改了。
4.我们下载程序,并转到在线调试

下载程序
5.我们添加监控表用来调试:


6.测试,为了直观有效,我用动画模拟:

分析一下,我首先模拟按钮1输入,再模拟按钮2输入,由于我一个一个操作肯定有时间差。
可以看到,由于实际时间差值的绝对值大于允许的误差值,所以没有输出安全信号。
当我给MB0赋值16#03的时候,也就是2#11,由于实际时间差值的绝对值是0,小于允许的误差,安全信号就输出了。
攻城狮们,老铁们,如果有更好的想法可以优化,并且封装为库,重复调用还是很香的。
其实,这个原理,是借鉴于安全继电器检测按键过程的原理,关注的是时序上是否真正同时按下,我们平时写程序更多的关注结果,没有关注过程。不知道有没有朋友想过?有些对安全稍微高点的场景又没使用安全继电器。当有人把另外一个传感器短接,屏蔽,或者按钮机械故障卡住,没有弹开。作业人员单手操作设备,万一夹到手那是我们不愿看到的,比如注塑机冲压机的双按钮启动,如果没有很好的防护,模具容易夹到手,造成人员伤亡。
#电气自动化# #PLC# #电工# #安全# #安全继电器#
end
专注.NET上位机C#(winform、wpf)、主流PLC、电气、机器视觉、物联网、STM32、自动化 选型开发、终身学习欢迎交流
如果对您有帮助,欢迎关注转发点赞。