程序没写好手被机器压,你的程序安全吗?

一.你们一想到双手启动程序会怎么做?

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、自动化 选型开发、终身学习欢迎交流

如果对您有帮助,欢迎关注转发点赞。