当我们在设计程序时,碰到具有相同的控制要求,如需要实现对多台电机进行控制,而这些电机的控制方式是相同的,或实现对某种重复的算法,如模拟量换算。基于这种情况,我们在设计程序时,往往会考虑编写带参数的子程序,然后通过重复调用这子程序,给该子程序的形参赋予不同的实参,这样可提高编程的效率和程序的可移植性。然后受到S7-200系列PLC本身性能的问题,有一些功能并不能进行参数化,如沿脉冲指令,定时器指令和计数器指令,当使用到这些指令时你会发现无法进行参数化,这样在子程序中使用这些指令后,在一个扫描周期内多次执行时就会出现问题。那么如何处理呢?当子程序中无法使用沿脉冲指令时,我们可以根据沿脉冲指令的原则自行通过了逻辑关系的搭建方式去编写沿脉冲指令。上升沿的含义:本次的状态与上一次的状态进度对比,若上一次的状态为0,而本次的状态为1,则说明产生上升沿,那么可以把上一次的状态取反,然后与本次的状态进行“与”运算,运算完后把本次的状态再赋值给上一次的状态,则“与”运算的结果就是一个上升沿的输出。下降沿的含义:本次的状态与上一次的状态进行对比,若上一次的状态为0,本次的状态为1,则说明产生下降沿,那么可以把本次的状态取反,然后与上一次的状态进行“与”运算,运算完后把本次的状态再赋值给上一次的状态,则“与”运算的结果就是一个下降沿的输出。基于这些含义,可以不用调用上升沿和下降沿指令就可编写出上升沿和下降沿的功能,这样当在带参数子程序中应用到上升沿和下降沿时就不会受到限制。如下为相应的变量表和对应的程序:对于定时器的处理可以使用沿脉冲配合指令BGN_ITIME和CAL_ITIME指令以一起可实现计算时间间隔差。通过这个时间间隔差可替代定时器的功能,这样在子程序中可以不用使用定时器指令来做定时功能,可避免定时器指令无法参数化的情况实现。BGN_ITIME指令:捕获开始时间间隔指令,可以读取内置1毫秒计数器的当前值,并将该值存储在 OUT 中。CAL_ITIME指令:捕获间隔时间指令,计算间隔时间指令计算当前时间与 IN 中提供的时间的时间差,然后将差值存储在 OUT 中。注:程序中的定时时间以ms为单位,如程序中的定时设定值为:10000ms。
来源:PLC发烧友,作者:技成-曾鑫 ,转载请注明出处!评论处大家可以补充文章解释不对或欠缺的部分,这样下一个看到的人会学到更多,你知道的正是大家需要的。。。