徐春鹏,王 海(通讯作者),邸寒旭
(沈阳理工大学 辽宁 沈阳 110159)
S7-1200在以太网及PROFINET方面和编程的灵活性等方面的优点,正在取代S7-200。学校的教材及实验内容及时调整,引进了S7-1200。在用S7-1200的程序替代原S7-200中的程序,看似简单的移植工作,出现问题,程序出现了异常,这无法解释。程序涉及的指令并不多,主要是定时器,问题应该出现在对定时器特性的认识。为使问题简化,将程序提炼如图1所示,自复位定时器产生脉冲程序[1]。
图1 S7-200中的原程序
M10.0为启动信号,闭合后定时器开始计时,当计时到设定值5s后执行记数器加1,在下一个扫描周期T37线圈断电,重新计时。即5s发1个脉冲给计数器。移植后的程序如图2所示,定时器时间到后,观察较长时间并不计数。
S7 PLC的定时器在什么时刻更新是问题所在。首先,明确S7-200的更新过程,S7-200中10 ms分辨率的定时器按以下规律刷新:定时器位和当前值在每个程序扫描周期的开始刷新。定时器位和当前值在整个扫描周期过程中为常数。在每个扫描周期的开始会将一个扫描累计的时间间隔加到定时器的当前值上[2]。
根据实际情况分析,对定时器的更新没有发生在由程序1到程序2的中间阶段。不妨将两句程序互换位置,如图2所示,长时间反复观察,计数器计数正常无误。为说明清楚问题,如图3所示,将PLC的扫描过程分为如下四个阶段:A是在程序段1之前和程序段2之后的时间片,这里包括了可能的I/O刷新和通讯处理等;B阶段为处理程序段1的时间;C为程序段1和程序段2之间的时间片,由于之间没有内容,这里暂时无;D处理程序段2的时间。一个扫描周期由A、B、C、D四段组成。
此例说明定时器的状态是在AUB阶段,而不是CUD阶段(当前程序行处理时)更新的。否则先复位定时器,不能计数。
为观测清楚更新是否相对于扫描阶段是随机的,加大两句程序的执行间隔,即在C阶段插入尽量大的运算时间[3],定义为FC,如果定时器是随机更新,一定会有正在执行两句程序之间(C阶段)触发定时器的时候,即计数值会缺少。
图2 S7-1200中的实验程序
图3 程序执行的阶段
将上述的FC块,插入在两句程序之间,目的是增加图中C阶段的时间片比例。经过长时间观察,发现计数器的值有明显的丢失,说明有在C阶段更新的可能。
问题很清楚,定时器是独立于用户程序,独自更新的。T.Q被随时改写。重复出现T.Q则引起程序的不确定性。为了安全必须使用统一规范,提出处理方法T.Q接到输出上,如图4所示。独立于用户程序的异步功能,以线圈的输出为标志,将其关联到扫描周期,再使用其触点触发计数器。
图4 改进的处理
S7-1200定时器的使用存在陷阱,当两次访问触点时,会出现不确定性,必须接输出,才可达到与S7-200相同的效果和可靠执行。在此例中,PLCSIM与连接实际PLC的结果不符合,由其忽略了自诊断通信等时间(阶段A)造成的,提醒读者注意。相信该工作为工程技术人员在实际工作中遇到的奇怪异常情况提供解释,避免错误的发生。