西门子 PLC 程序采用循环扫描的方式运行,运行时,程序按照输入采样,程序执行,输出刷新的顺序循环执行,这样的一个循环称之为程序的一个扫描周期,PLC 一般扫描周期为 30mS 左右,有些大型 PLC 或者高端型号,扫描周期可能只有 10ms 左右。
按照这个原理,我们按钮按下,一般都是几百毫秒,程序已经执行了多个扫描周期。所以要使用单个按钮来进行程序控制,其核心是要求我们在按下按钮时,输入信号只能在一个周期内执行程序,所以不论采用哪种方法,都必须要用到 I P I 取上升沿指令,这个指令的特点是信号由 0 变为 1 是,只执行一个扫描周期。
下面根据这个原理,有以下几种单个按钮控制启动/停止的方法:
方法一:
第一行程序,当第一次按下启动按钮(灯 Q0.0 为 0 说明第一次)M0.0 时,M0.0 的上升沿为 1,Q0.0 的常闭也为 1,逻辑结果为 1,置位亮灯辅助 M100.0 的指令被执行,M100.0
被置位 1;
第二行程序,当第一次按下启动按钮(灯 Q0.0 为 0 说明第一次)M0.0 时,M0.0 的上升沿为 1,Q0.0 的常开为 0,逻辑结果为 0,复位亮灯辅助 M100.0 的程序不会被执行,M100.0的值不会因为本段程序被改变;
第三段程序,由于 M100.0 被置位 1,所以 Q0.0 输出结果为 1;之后的程序扫描周期,只要 M0.0 没有被再次接通,结果都保持不变;
当我们再次按下 M0.0 时,这个时候 Q0.0 是为 1 的;
第一行,M0.0 上升沿为 1,Q0.0 常闭为 0,逻辑结果为0,M100.0 置位不被执行;
第二行,M0.0 上升沿为 1,Q0.0 常开为 1,逻辑结果为1,M100.0 复位被执行,M100.0 变为 0;
第三段程序,由于 M100.0 被复位为 0,所以 Q0.0 输出结果为 0;
之后的程序扫描周期,只要 M0.0 没有被再次接通,结果都保持不变;
方法二:
以上这种方法,当我们第一次按下 M1.0 按钮时,第一行按钮辅助 M110.0 在第一个程序周期输出结果为 1,
第二行的逻辑结果:M110.0 为 1,Q0.1 的常闭触点也为 1,所以他两进行与运算,逻辑结果也为 1;
第三行,M110.0 常闭触点动作,结果为 0,Q0.1 的常开触点当前也为 0,与运算结果为 0;
Q0.0 结果为第二行和第三行的或运算,由于第二行为 1,所以结果为 1;
第二个程序扫描周期,由于 M1.0 按钮没有被再次按下,不管当前状态是否松开,都不会执行,所以 M110.0 结果为 0;
第二行,M110.0 为 0,Q0.1 的常闭触点受上一次程序执行的影响,也为 0,与运算逻辑结果为 0;
第三行 M110.0 的常闭为 1,Q0.1 已经动作,所以也为 1,与运算逻辑结果为 1;
Q0.1 的结果是第二行和第三行的或运算,所以结果仍然为 1,就这样,程序实现了第一次按下按钮,Q0.1 输出结果始终保持为 1;
当我们再次按下按钮 M1.0 时,M100.0 再次为 1 一个扫描周期;
第二行 M100.0 为 1,Q0.1 由于已经为 1,所以常闭触点为 0,逻辑结果为 0;
第三行 M100.0 的常闭变为 0,Q0.1 的常开为 1,逻辑结果也为0;
Q0.1 的值是第二行 0 和第三行 0 的或运算结果,也为 0,所以Q0.1 的值变为 0,恢复到初始状态;
Q0.1 的状态始终保持为 0,等待下一次按钮被按下,重复上面的程序逻辑。
方法三:
第三种方法和第一中方法类似,利用 RS 置位优先指令(或者 SR 复位优先指令也可以),指令左边的两条指令执行完成后,统一输出;
第一次按下 M2.0 按钮时,R 复位条件不满足;S1 置位条件满足,逻辑结果为置位,所以 Q0.2 被置位;
第二次按下时,由于之前 Q0.2 已经被置位,所以复位 R条件满足,置位 S1 条件不满足,所以 Q0.2 被复位;
这种用法,逻辑统一处理完成后,统一输出,程序结构较为简单,逻辑清晰;
方法四:
在 PLC 变量表中建立灯的一个变量;
在 HMI 中添加一个按钮,在属性-事件-单击中添加函数
当按钮单击时,取放灯 Q0.0 的值,如果之前为 0,则改变输出为 1;如果之前为 1,则改变输出为 0;
总结:当个按钮控制启停,这样的程序在实际应用中有会用到,但是更多的目的,是希望能够参考几种方法,加深对 PLC 程序执行逻辑的理解。