PLC在工作时采用顺序循环扫描的工作方式来执行081(包括子程序,如FC,FB等)中的用户程序,在一个扫描周期的开始CPU对所有的输入端子上的信号进行集中采集,BTB06-600S并将采集结果保存在过程映像输入寄存器(I),在程序执行期间不再考虑输入端子上信号的变化,而程序执行过程中所产生的中间结果则直接保存在存储器(M)或过程映像输出寄存器(Q)中,并不立即送到输出端子,只有在当前扫描周期结束前才将程序执行的最终结果集中送到输出端子,对输出端子进行刷新。如果对这种扫描方式理解不清楚,在编程时就会出现意想不到的结果。请看下面的分析:
根据本项目的要求,第1次按按钮时只有第1台电动机工作,在这之前两台电动机都处于停机状态,由此可编写出图4-9中如Network 1所示的逻辑程序段;第2次按按钮时第1台电动机停车,第2台电动机工作,在这之前第1台电动机工作,第2台电动机停车,由此可编写出图4-9中如Network 2所示的逻辑程序段;第3次按按钮时两台电动机同时停车,在这之前第1台电动机停车,第2台电动机工作,由此可编写出图4-9中如Network 3所示的逻辑程序段。
图4-9所示的程序看起来逻辑关系非常清晰,应该能够实现项目所要求的功能,但仔细分析后发现:由于程序按编写顺序进行扫描工作,第1次操作按钮后的一个扫描周期内,KM1和KM2的映像寄存器都为O(两台电动机都处于停车状态),MO.0、MO.1及MO.2都为1(SB1上升沿使MO.O,MO.1及MO.2保持一个周期的高电平)。CPU首先扫描第1个逻辑段(Network l),此时由于KM1和KM2的常闭触点闭合(KM1和KM2的映像寄存器都为O),所以使KM1的映像寄存器为1;CPU扫描到第2个逻辑段(Network 2)时,由于KM1的映像寄存器已经变为1(其常开触点闭合),而KM2的常闭触点还处于闭合状态,所以KM2的映像
寄存器就舍变为1,同时KM1的映像寄存器变为0;CPU扫描到第3个逻辑段(Network 3)时,由于KM1的映像寄存器已经变为(其常开触点断开),KM2的映像寄存器已经变为1(其常开触点闭合),所以KM1和KM2的映像寄存器均变为O,因此程序扫描的最终结果为KM1的映像寄存器为O,KM2的映像寄存器为O,在程序刷新阶段将使第1台电动机停车,第2台电动机停机。以后再操作按钮KM1和KM2,都将保持这种状态不变。
解决问题的办法:采用本项目控制方案1所示的方法,为每一个状态设置一个标志位,不直接用逻辑串驱动输出,这样就可以避免一个扫描周期内输出映像寄存器被多次刷新。
|
||||||
|
||||||