PLC通电后,需要对硬件和软件作一些初始化工作。为了使PLC的输出及时地响应各种输入信号,初始化后PLC要反复不停地分阶段处理各种不同的任务(见图 1-13),这种周而复始的循环工作方式称为扫描工作方式。
在PLC的存储器中,设置了一片区域来存放输入信号和输出信号的状态,它们分别称为输入过程映像寄存器和输出过程映像寄存器。
图 1-13 扫描过程
在读取输入阶段,PLC把所有外部数字量输入电路的I/O状态(或称ON/OFF状态)读入输入过程映像寄存器。外接的输入电路闭合时,对应的输入过程映像寄存器为 1 状态,梯形图中对应的输入点的动合触点接通,动断触点断开。外接的输入电路断开时,对应的输入过程映像寄存器为 0 状态,梯形图中对应的输入点的动合触点断开,动断触点接通。
PLC的用户程序由若干条指令组成,指令在存储器中按顺序排列。在RUN模式的程序执行阶段,如果没有跳转指令,CPU从第一条指令开始,逐条顺序地执行用户程序。
在执行指令时,从I/O映像寄存器或别的位元件的映像寄存器读出其 0/1 状态,并根据指令的要求执行相应的逻辑运算,运算的结果写入到相应的映像寄存器中,因此,各映像寄存器(只读的输入过程映像寄存器除外)的内容随着程序的执行而变化。
在程序执行阶段,即使外部输入信号的状态发生了变化,输入过程映像寄存器的状态也不会随之改变,输入信号变化了的状态只能在下一个扫描周期的读取输入阶段被读入。执行程序时,对输入/输出的存取通常是通过映像寄存器,而不是实际的I/O点,这样做有以下好处:
(1)在整个程序执行阶段,各输入点的状态是固定不变的,程序执行完后再用输出过程映像寄存器的值更新输出点,使系统的运行稳定。
(2)用户程序读写I/O映像寄存器比读写I/O点快得多,这样可以提高程序的执行速度。
在处理通信请求阶段,CPU处理从通信接口和智能模块接收到的信息,例如读取智能模块的信息并存放在缓冲区中,在适当的时候将信息传送给通信请求方。
自诊断测试包括定期检查CPU模块的操作和扩展模块的状态是否正常,将监控定时器复位,以及完成一些别的内部工作。
CPU执行完用户程序后,将输出过程映像寄存器的 0/1 状态传送到输出模块并锁存起来。梯形图中某一输出位的线圈“通电”时,对应的输出过程映像寄存器为 1 状态。信号经输出模块隔离和功率放大后,继电器型输出模块中对应的硬件继电器的线圈通电,其动合触点闭合,使外部负载通电工作。若梯形图中输出点的线圈“断电”,对应的输出过程映像寄存器中存放的二进制数为 0,将它送到继电器型输出模块,对应的硬件继电器的线圈断电,其动合触点断开,外部负载断电,停止工作。
当CPU的操作模式从RUN变为STOP时,数字量输出被置为系统块中的输出表定义的状态,或保持当时的状态,默认的设置是将所有的数字量输出清零。
如果在程序中使用了中断,中断事件发生时,CPU停止正常的扫描工作方式,立即执行中断程序,中断功能可以提高PLC对某些事件的响应速度。
在程序执行过程中使用立即I/O指令可以直接存取I/O点。用立即I/O指令读输入点的值时,相应的输入过程映像寄存器的值未被更新。用立即I/O指令来改写输出点时,相应的输出过程映像寄存器的值被更新。
下面用一个简单的例子来进一步说明PLC的扫描工作过程。如图 1-14 所示,启动按钮SB l 和停止按钮SB 2 的动合触点分别接在编号为 0.1 和 0.2 的输入端,接触器KM的线圈接在编号为 0.0 的输出端。如果热继电器FR动作(其动断触点断开)后需要手动复位,可以将FR的动断触点与接触器KM的线圈串联,这样可以少用一个PLC的输入点。
图 1-14 梯形图中的I0.1 与I0.2 是输入变量,Q0.0 是输出变量,它们都是梯形图中的编程元件。I0.1 与接在输入端 0.1 上的SB 1 的动合触点和输入过程映像寄存器I0.1相对应,Q0.0 与接在输出端 0.0 上的PLC内的输出电路和输出过程映像寄存器Q0.0 相对应。
梯形图以指令的形式储存在PLC的用户程序存储器中,图 1-14 中的梯形图与下面的 4 条指令相对应,“//”之后是该指令的注释。
图 1-14 PLC外部接线图与梯形图
LD I0.1 //接在左侧“电源线”上的I0.1 的动合触点
O Q0.0 //与I0.1 的动合触点并联的Q0.0 的动合触点
AN I0.2 //与并联电路串联的I0.2 的动断触点
= Q0.0 //Q0.0 的线圈
在读取输入阶段,CPU将SB l 和SB 2 的动合触点的接通/断开状态读入相应的输入过程映像寄存器,外部触点接通时将二进制数 1 存入寄存器;反之则存入 0。
执行第一条指令时,从输入过程映像寄存器I0.1 中取出二进制数,并存入堆栈的栈顶,堆栈是存储器中的一片特殊的区域。
执行第二条指令时,从输出过程映像寄存器Q0.0 中取出二进制数,并与栈顶中的二进制数相“或”(触点的并联对应“或”运算),运算结果存入栈顶。运算结束后只保留运算结果,不保留参与运算的数据。
执行第三条指令时,因为是动断触点,取出输入过程映像寄存器I0.2 中的二进制数后,将它取反(如果是 0 则变为 1,如果是 1 则变为 0),取反后与前面的运算结果相“与”(电路的串联对应“与”运算),然后存入栈顶。
执行第四条指令时,将栈顶中的二进制数传送到Q0.0 的输出过程映像寄存器。
在修改输出阶段,CPU将各输出过程映像寄存器中的二进制数传送给输出模块并锁存起来,如果输出过程映像寄存器Q0.0 中存放的是二进制数 1,外接的KM线圈将通电,反之将断电。
I0.1、I0.2 和Q0.0 的波形中的高电平表示按下按钮或KM线圈通电,当 t < t 1 时,读入输入过程映像寄存器I0.1 和I0.2 的均为二进制数 0,此时输出过程映像寄存器Q0.0中存放的亦为 0。在程序执行阶段,经过上述逻辑运算过程之后,运算结果仍为Q0.0=0,所以KM的线圈处于断电状态。在 t < t 1 区间,虽然输入/输出信号的状态没有变化,用户程序仍一直反复不停地执行着。 t = t 1 时,按下启动按钮SB l ,I0.1 变为 1 状态,经逻辑运算后Q0.0 也变为 1 状态,在输出处理阶段,将Q0.0 对应的输出过程映像寄存器中的数据 1 送到输出模块,输出模块中与Q0.0 对应的物理继电器的动合触点接通,接触器KM的线圈通电。