2.3 PLC程序设计
2.3.1 PLC编程语言
PLC常用的编程语言有梯形图、指令表、逻辑功能图、顺序功能图等,用于大型、复杂控制的PLC有时也可采用BASIC、Pascal、C等高级编程语言。数控系统所使用的PLC以开关量逻辑控制为主,大多采用梯形图编程。
(1)梯形图
梯形图(ladder diagram,简称LAD)是一种沿用了继电器的触点、线圈、连线等图形符号的图形编程语言,在PLC中最为常用。梯形图语言不但编程容易,程序通俗易懂,而且还可通过数控装置或编程器进行图2.3.1所示的动态监控,直观形象地反映触点、线圈、线路的通断情况。
图2.3.1 梯形图程序及动态监控
利用梯形图编程时,程序的主要特点如下。
①程序清晰,阅读容易。采用梯形图编程时,逻辑运算指令的操作数可用触点、线圈等图形符号代替;逻辑运算指令“与”“或”“非”,可用触点的串、并联连接及“常闭”触点表示;逻辑运算结果用“线圈”表示。程序的表现形式与传统的继电-接触器电路十分相似,阅读与理解非常容易。此外,即使对于不同厂家生产的PLC,其程序也只有地址、符号表示方法上的区别,程序转换方便、通用性强。
例如,对于图2.3.1所示的梯形图程序,PLC输入信号I0.1、I0.2、I0.3的状态分别用触点I0.1、I0.2、I0.3代表,常开触点表示直接以信号输入状态做指令操作数,常闭触点表示输入信号需要进行逻辑“非”运算。PLC输出信号Q0.1、Q0.2及内部继电器M0.1、M0.2的状态分别用线圈Q0.1、Q0.2及M0.1、M0.2代表,输出信号需要作为指令操作数时,同样用常开触点表示直接使用输出信号的状态,用常闭触点表示输出信号的逻辑“非”运算等。
②功能实用,编程方便。梯形图程序不仅可用触点、线圈、连接线来表示普通逻辑运算指令,而且还可通过线圈置位复位、边沿检测、多位逻辑处理、定时计数控制、重复线圈等简单指令,实现继电器控制电路难以实现的功能,并通过循环扫描功能避免线路竞争,其功能比继电器控制电路更强,编程更方便,可靠性更高。
③显示明了,监控直观。梯形图程序可通过数控装置或编程器的显示器,动态、实时监控程序的执行情况,并且可利用线条的粗细、不同色彩来表示线路的通断、区分编程元件,从而清晰地反映编程元件的状态及程序的执行情况,程序检查与维修十分方便。
但是,由于梯形图程序严格按照从上至下的顺序执行指令,因此,继电器控制电路的桥接支路、线圈后置触点等控制电路,无法通过梯形图程序实现。此外,PLC程序只是一种软件处理功能,不满足机电设备紧急分断控制的强制执行条件,因此,也不能直接利用PLC程序来控制设备的紧急分断。
(2)指令表
指令表(statement list,简称STL或LIST)是一种使用助记符、类似计算机汇编语言的PLC编程语言。指令表是应用最早、最基本的PLC编程语言;梯形图、逻辑功能图、顺序功能图实际上只是指令表的不同呈现形式,它们最终都需要编译成指令表程序,才能由CPU进行处理,因此,当其他编程语言程序出现无法修改的错误时,需要将其转换成指令表程序,才能进行编辑与修改。
指令表是所有PLC编程语言中功能最强的编程语言,它可用于任何PLC指令的编程,利用梯形图、逻辑功能图、顺序功能图无法实现的程序,同样可通过指令表进行编程。此外,指令表程序可通过简单的数码显示、操作键进行输入、编辑与显示,对编程器的要求低。因此,尽管指令表程序编程较复杂、显示与监控不够形象直观,但是,在PLC编程中,目前仍离不开指令表。
指令表程序的每条指令由“操作码”和“操作数”两部分组成,举例如下:
指令中的操作码又称指令代码,它用来指定CPU需要执行的操作;操作数用来指定操作对象;通俗地说,操作码告诉CPU需要做什么,而操作数则告诉CPU由谁来做。操作码与操作数的表示方法,在不同的PLC上有所不同。
PLC指令的操作码一般以英文助记符表示。例如,PLC常用的状态读入操作通常用LD、RD等操作码(指令代码)表示;状态输出操作通常以“=”、WRT、OUT等操作码(指令代码);逻辑“与”“与非”“或”“或非”运算操作,则通常用A、AN、O、ON或AND、AND.NOT、OR、OR.NOT等操作码(指令代码)表示。
PLC指令的操作数一般以“字母+编号”的形式表示,字母用来表示操作数类别,编号用来区分同类操作数。例如,PLC的输入信号常用字母I、X表示,PLC的输出信号常用字母Q、Y表示,PLC的内部继电器信号常用字母M、R表示。PLC的操作数实际上只是计算机的存储器状态,每一开关量信号占用一个二进制存储位(bit),因此,其编号通常以“字节.位”的形式表示,如I0.5代表第1字节(Byte0)、第6位(bit5)输入信号,Q2.1代表第3字节(Byte2)、第2位(bit1)输出信号。
因此,图2.3.1所示的梯形图程序转换为指令表后,在SIEMENS等公司的PLC上的程序形式如图2.3.2,程序中的Network1、2为SIEMENS的PLC程序段标记,称为“网络”,在其他公司的PLC上可能不使用。
图2.3.2 PLC程序形式
(3)逻辑功能图
逻辑功能图又称功能块图(function block diagram,简称FBD)或控制系统框图(control system flowchart,简称CSF),这是一种用逻辑门电路、触发器等数字电路功能图表示的图形编程语言,属于德国DIN 40700标准编程语言。
采用逻辑功能图编程时,PLC程序中的“与”、“或”、“非”、置/复位、数据比较等操作,可用数字电路的“与门”“或门”“非门”“RS触发器”“数据比较器”等图形符号表示,程序形式如图2.3.3所示,程序与数字线路十分相似。
图2.3.3 逻辑功能图程序
逻辑功能图同样具有直观、形象的特点,其图形简洁、功能清晰,程序结构紧凑、显示容易,特别便于从事数字电路设计的技术人员编程、阅读与理解。此外,逻辑功能图还可用触发器、计数器、比较器等数字电路符号,形象地表示梯形图及其他图形编程语言无法表示的PLC功能指令;在表示多触点串联等复杂逻辑运算时,同样的显示页面可显示比梯形图更多的指令。因此,在可以使用逻辑功能图编程语言的PLC上,采用逻辑功能图编程往往比梯形图更加简单、方便。
(4)顺序功能图
顺序功能图(sequential function chart,简称SFC)是一种按工艺流程图进行编程的图形编程语言,比较适合非电气专业的技术人员使用。
顺序功能图的设计思想类似于子程序调用。设计者首先按控制要求将控制对象的动作划分为若干工步(简称步),并通过特殊的编程元件(称为状态元件或步进继电器),对每一步都赋予独立的标记。程序编制时,只需要明确每一步需要执行的动作及条件,并对相应的状态元件进行“置位”或“复位”,便在程序中选择需要执行的动作。
SFC编程总体是一种基于工艺流程的编程语言,但在不同公司生产的PLC上,其编程方法有所不同,例如,三菱等公司称为“步进梯形图”,其程序形式如图2.3.4所示。
图2.3.4 SFC程序示例
采用SFC编程时,程序设计者只需要确定输出元件和动作条件,然后利用分支控制指令进行工步的组织与管理,便可完成程序设计,而无需考虑动作互锁要求,因此,比较适合非电气技术人员编程。
除以上常用编程语言外,用于大型复杂控制的PLC,有时还可使用计算机程序设计用的BASIC、Pascal、C等高级语言编程。采用高级语言编程的PLC程序专业性较强,适合软件设计人员使用,在数控系统集成或配套的PLC上很少使用,本书不再对此进行介绍。
2.3.2 梯形图指令与符号
开关量逻辑顺序控制是PLC最主要的功能,由于其程序简单、编程容易,为了便于阅读、检查,人们普遍采用梯形图编程。
梯形图程序指令的用触点、线圈、连线等基本符号(亦称编程元件)表示,程序类似传统的继电器控制电路,因此,掌握触点、线圈、连线等基本符号的使用方法,是程序设计的基础。
(1)基本符号
采用梯形图编程时,程序中的PLC输入、输出、内部继电器等编程元件以及取反、置位、复位等简单逻辑处理,可用表2.3.1所示的符号表示。
表2.3.1 梯形图程序常用符号表
触点用来表示逻辑运算的操作数及状态。当指令需要以编程元件的状态作为逻辑运算操作数时,应使用常开触点;如果需要将编程元件的状态取反后作为操作数,应使用常闭触点。线圈用来保存指令的逻辑运算结果,如编程元件以RS触发器的形式保存指令的逻辑运算结果,一般在线圈内加复位、置位标记R、S。
在不同公司生产的PLC上,梯形图的触点、线圈等基本符号类似,但特殊符号有所不同,例如,在SIEMENS公司生产的PLC上,还可使用表2.3.1所示的结果取反、中间结果存储(中间线圈)、取反输出(取反线圈)、边沿检测触点等特殊符号。
(2)触点与连线
梯形图中的触点与连线用来表示逻辑运算对象与逻辑运算次序,它与继电器控制电路的触点、连接有所区别,编程时需要注意以下几点。
①触点。触点用来表示开关量信号的状态,常开触点表示直接以开关量信号状态作为操作数;常闭触点表示将开关量信号状态取反后作为操作数。
梯形图程序中的触点与实际继电器触点的主要区别有两点:第一,梯形图中的所有触点都不像实际继电器那样有数量的限制,它们在程序中可以无限次使用;第二,PLC的输入信号通过“输入采样”一次性读入,因此,梯形图中的输入触点在任何时刻都只有唯一的状态,无需考虑实际继电器电路可能出现的常开、常闭触点同时接通故障,但PLC输出、内部继电器等编程元件的状态由梯形图中的线圈设置,因此,在输出线圈指令的前后位置,PLC输出、内部继电器的触点状态可能存在不同。
②连线。连线用来表示指令的逻辑运算顺序,它不能像继电器电路那样控制电流流动,因此,梯形图中的逻辑运算必须在结果输出前完成,而不能像继电器电路那样使用图2.3.5所示的后置触点、桥接支路连接。
图2.3.5 梯形图不能使用的连接
(3)线圈
线圈用来表示逻辑运算的结果,其本质是对PLC存储器的二进制数据位进行的状态设置,线圈接通表示将指定数据位状态设置为“1”;线圈断开表示将数据位的状态设置为“0”。梯形图线圈与实际继电器线圈的区别如下。
①通常可以重复编程。由于PLC存储器的数据位可多次设置,而梯形图则严格按照从上至下、从左至右的次序执行,因此,如果需要,梯形图中的线圈实际上也可多次编程(称为重复线圈)。使用重复线圈的梯形图程序,在语法检查时可能会产生错误提示,但它通常不会影响程序的正常运行,重复线圈的最终结果将取决于最后一次输出的状态。
例如,对于图2.3.6所示的梯形图程序,内部继电器M0.1被重复编程,虽然其最终状态取决于输入I0.2,但是,在执行第3行指令前,M0.1的状态可利用输入I0.1控制,只要I0.1为“1”,Q0.0仍可输出“1”。
图2.3.6 重复线圈编程
②状态与编程位置有关。如果梯形图程序中不使用重复线圈,在线圈输出指令以前的程序中,PLC输出、内部继电器等编程元件的触点状态,就是上一PLC循环执行完成后的编程元件线圈状态,而在线圈输出指令执行以后的程序中,PLC输出、内部继电器等编程元件的触点状态,将成为本循环输出指令执行后的编程元件线圈状态。因此,当同样的控制程序编制在梯形图的不同位置,其执行结果可能不同。
例如,对于图2.3.7(a)所示的梯形图程序,虽然,输出Q0.0、Q0.1同样都是由内部继电器M0.1进行控制,但其实际状态输出却存在如图2.3.7(b)所示的区别,原因如下。
图2.3.7 编程位置与输出状态
在输入I0.1为0时,程序的执行结果是M0.1及Q0.0、Q0.1均为“0”。当输入I0.1为“1”时,PLC第一次执行循环时,指令第1行(Network1)的M0.1为上一循环的执行结果“0”,故输出Q0.0仍为“0”;但是,在执行第2行指令(Network2)后,M0.1将成为“1”,因此,执行第3行指令(Network3)将使输出Q0.1为“1”;这样,在执行I0.1为“1”的第1个循环时,输出Q0.0、Q0.1将具有不同的状态。同样,当输入I0.1为“0”时,PLC第一次执行循环时,指令第1行(Network1)的M0.1为上一循环的执行结果“1”,故输出Q0.0仍为“1”;但是,在执行第2行指令(Network2)后,M0.1将成为“0”,因此,执行第3行指令(Network3)将使输出Q0.1为“0”,从而使得PLC在执行I0.1为“0”的第1个循环时,输出Q0.0、Q0.1也具有不同的状态。
(4)特殊符号
特殊符号用来实现继电器电路无法实现的功能,它们在不同PLC上的表示方法有所不同,以SIEMENS公司生产的PLC为例,特殊符号的功能简要说明如下。
①结果取反。加NOT标记的常开触点(以下简称NOT触点)的作用是执行逻辑运算结果存储器的“取反”操作。
例如,对于图2.3.8所示的“同或”程序,当I0.0和I0.1的状态相同时,逻辑运算结果为“1”,但经过NOT触点取反后,逻辑运算结果将为“0”,故M0.1的输出状态为“0”;反之,如I0.0和I0.1的状态不同,逻辑运算结果为“0”,但经过NOT触点取反后,逻辑运算结果将为“1”,故M0.1的输出状态为“1”等。
图2.3.8 结果取反
②中间线圈。中间线圈是用来保存逻辑运算中间结果的存储单元,中间线圈之后还可添加其他触点、线圈;中间线圈只能是内部继电器,不能为PLC输出。
例如,对于图2.3.9所示的程序,中间线圈M0.0可用来保存I0.1、I0.2的“同或”运算结果,当I0.1和I0.2的状态相同时,中间线圈M0.0的状态为“1”;而当I0.1和I0.2的状态不同时,中间线圈M0.0的状态将为“0”。中间线圈M0.0可像其他线圈一样,在程序中使用其常开、常闭触点。
图2.3.9 中间线圈
③取反线圈。取反线圈的作用是将逻辑运算结果取反后,保存到指定的线圈上,其性质相当于线圈前增加一个NOT触点。
④边沿检测触点。边沿检测触点可在逻辑运算结果发生变化的时刻,产生一个持续时间为1个PLC循环的脉冲信号。逻辑运算结果由“0”变为“1”的变化,可通过上升沿触点P产生;逻辑运算结果由“1”变为“0”的变化,可通过下降沿触点N产生;如果直接在输入触点之后增加上升沿触点P或下降沿触点N,便可获得PLC输入的上升沿或下降沿。边沿检测触点的使用方法如图2.3.10所示。
图2.3.10 边沿检测触点
2.3.3 基本梯形图程序
尽管PLC的控制要求多种多样,但大多数动作都可通过基本逻辑功能的组合实现,因此,熟练掌握基本逻辑功能程序的编制方法,是提高编程效率与程序可靠性的有效措施。PLC常用的基本逻辑功能程序(以下简称基本程序)如下。
(1)恒0和恒1信号生成
PLC程序设计时,经常需要使用状态固定为“0”或“1”的信号,以便对无需逻辑处理的电源指示灯等输出或功能指令的条件进行直接赋值。
状态固定为“0”及“1”的内部继电器等输出线圈,可通过图2.3.11所示的梯形图程序段生成。在图2.3.11(a)上,输出M0.0为信号M0.2和的“与”运算的结果,状态恒为0;图2.3.11(b)中,M0.1为信号M0.2和的“或”运算的结果,状态恒为1。
图2.3.11 恒0和恒1信号的生成
(2)状态保持程序
线圈的状态保持功能可通过梯形图程序的自锁电路、置位/复位指令、RS触发器等方式实现,并可根据需要选择“断开优先”和“启动优先”两种。
断开优先的状态保持程序如图2.3.12所示,图中的I0.1为启动信号,I0.2为断开信号。
图2.3.12 断开优先状态保持程序
在图2.3.12的程序中,当断开信号I0.2为“0”时,3种方式均可通过启动信号I0.1的“1”状态,使输出Q0.1成为“1”并保持。但是,如果断开信号I0.2为“1”,则不论启动信号I0.1是否为“1”,Q0.1总是输出“0”,故称断开优先或复位优先。
启动优先的状态保持程序如图2.3.13所示。
图2.3.13 启动优先状态保持程序
图2.3.13的程序在断开信号I0.2为“0”时,同样可通过启动信号I0.1的“1”状态,使输出Q0.1为“1”并保持。而且只要启动信号为“1”,不论断开信号I0.2的状态是否为“0”,Q0.1总是可以输出“1”状态,故称启动优先或置位优先。
(3)边沿检测程序
边沿检测程序可在指定信号状态发生变化时,产生一个宽度为1个PLC循环周期的脉冲信号,其功能与PLC的边沿检测触点相同,程序如图2.3.14所示。
图2.3.14 边沿信号生成程序
在图2.3.14所示的程序中,当I0.1由“0”变为“1”时,PLC执行首次循环,由于M0.1的状态为上一循环的执行结果“0”,执行指令Network1可使M0.0输出“1”;接着,由指令Network2使M0.1成为“1”,因此,首次循环的执行结果为M0.0、M0.1同时为“1”。但是,在后续的循环中,只要I0.1保持“1”,M0.1也将保持“1”,M0.0将始终为“0”。这样便可在I0.1为“1”的瞬间,在M0.0上得到一个宽度为1个PLC循环的上升沿脉冲。
如果将程序中的I0.1常开触点改为常闭触点,便可在输入I0.1由“1”变为“0”时,在M0.0上得到一个宽度为1个PLC循环的上下降沿脉冲。
(4)“异或”“同或”程序
“异或”“同或”是两种标准逻辑操作。所谓“异或”就是在两个信号具有不同状态时,输出“1”信号,所谓“同或”就是在两个信号状态相同时,输出“1”信号。实现“异或”“同或”操作的程序如图2.3.15所示。
图2.3.15 异或、同或程序
(5)状态检测程序
状态检测程序可实现类似输入采样的功能,它可通过采样信号的“1”状态来获取指定信号的当前状态,并将保存到指定编程元件的操作。实现这一功能的梯形图程序如图2.3.16(a)所示,程序中的M0.1为采样信号,I0.1为被测信号,Q0.1为状态保存元件;程序的第1行控制条件用来检测I0.1状态,第2行控制条件用来保持被测状态;程序的执行时序如图2.3.16(b)所示。
图2.3.16 状态检测程序
在图2.3.16(a)的程序中,如果采样信号M0.1的状态为“1”,第2行的控制条件将被断开;这时,如被测信号I0.1的状态为“1”,程序可通过第1行控制条件,使状态保存元件Q0.1的状态成为“1”。Q0.1一旦为“1”,即使M0.1变为“0”,Q0.1也可通过第2行控制条件保持“1”状态。
同样,如果在M0.1为“1”时,被测信号I0.1的状态为“0”,其第1行控制条件的执行结果将为“0”,第2行控制条件被断开,因此,Q0.1的状态将为“0”。Q0.1一旦为“0”,第2行的控制条件也将断开,此时,即使M0.1成为“0”,Q0.1也将保持“0”状态。
通过以上程序,便可在Q0.1上得到采样信号M0.1为“1”时的被测信号状态,并将这一状态一直保持到采样信号M0.1再次为“1”状态的时刻。
2.3.4 程序设计示例
(1)控制要求
PLC梯形图程序设计并没有规定的方法和绝对的衡量标准,只要能够满足控制要求,并且动作可靠、程序清晰、易于阅读理解,便是好程序,至于程序形式、指令与编程元件的数量能简则简,但如果因此而增加了阅读理解的难度,也没有必要勉强。因此,灵活应用基本程序,组合出满足不同控制要求的各种程序,不仅设计容易、可靠性高,而且可为程序检查、阅读理解带来极大的方便。
以下将以机电设备常用的交替通断控制为例,介绍利用基本程序实现同样控制要求的几种梯形图程序设计方法,以供参考。
所谓交替通断控制是利用同一信号的重复输入,使执行元件的输出状态进行通、断交替变化的控制。例如,利用一个按钮的重复操作,控制电磁阀通断、指示灯开关;或者,产生一个脉冲频率为输入信号1/2的脉冲信号(二分频控制)等。
交替通断的控制要求与应用示例如图2.3.17所示。图中,假设交替通断的控制信号为PLC按钮输入I0.1,执行元件为PLC的指示灯输出Q0.1,其控制要求为:如果输出Q0.1的当前状态为“0”,输入I0.1为“1”时,Q0.1的状态应成为“1”并保持;反之,如果输出Q0.1的当前状态为“1”,输入I0.1为“1”时,Q0.1的状态应成为“0”并保持;这样,便可利用按钮等无状态保持功能的控制器件来控制执行元件的开关动作,从而起到开关控制同样的作用。
图2.3.17 交替通断控制要求与应用
利用前述梯形图基本程序实现交替通断控制的一般方法有以下几种。
(2)利用状态保持功能实现
利用状态保持功能实现的交替通断控制程序如图2.3.18(a)所示,程序由边沿检测、状态保持2个PLC基本程序以及启动、停止信号生成程序段组合而成,其执行时序如图2.3.18(b)所示,工作原理如下。
图2.3.18 交替通断控制程序1
Network1/2:边沿检测基本程序,利用这一程序段,可在内部继电器M0.0上获得输入I0.1的上升沿脉冲,M0.0用来产生状态保持程序的启动、停止信号。
Network3/4:启动、停止信号生成程序段,用来产生状态保持程序的启动、停止信号。如果输出Q0.1的当前状态为“0”,边沿信号M0.0被转换为状态保持程序的启动信号M0.2;如果Q0.1的当前状态为“1”,边沿信号M0.0被转换为状态保持程序的停止信号M0.3。
Network5:状态保持基本程序,如Q0.1的当前状态为“0”,则可通过启动信号M0.2,将Q0.1置为“1”;如果Q0.1的当前状态为“1”,则可通过停止信号M0.3,将Q0.1置为“0”。由于边沿信号M0.0只保持1个PLC循环,因此,在以后的PLC循环中,将不会再产生启动信号M0.2、停止信号M0.3,而Q0.1的状态也将保持不变。
以上程序的动作清晰、理解容易,但需要所有4个内部继电器和5个程序段,结构较为松散,因此,实际程序中也经常采用后述的程序。
(3)利用状态检测功能实现
利用状态检测功能实现的交替通断控制程序如图2.3.19(a)所示,程序由边沿检测、状态检测2个基本程序组合而成,其执行时序如图2.3.19(b)所示,工作原理如下。
图2.3.19 交替通断控制程序2
Network1/2:边沿检测基本程序,利用这一程序段,可在内部继电器M0.0上获得输入I0.1的上升沿脉冲,M0.0用来作为状态检测基本程序的采样脉冲信号。
Network3:状态检测基本程序,这一程序段直接以取反后的Q0.1当前状态(上一循环的执行结果)作为被测信号,因此,程序段执行后,Q0.1可改变状态。同样,由于采样信号M0.0仅在I0.1的上升沿产生,在第二次及以后的PLC循环中,M0.0始终为“0”,因此,Q0.1可保持首次循环所改变的状态不变。
以上程序只需要使用2个内部继电器和3个程序段,程序较图2.3.18简洁,但阅读状态检测基本程序必须对PLC的循环扫描工作原理有清晰的了解。
(4)利用2次状态检测功能实现
利用2次状态检测功能实现的交替通断控制程序如图2.3.20(a)所示,程序由2个状态检测基本程序组合而成,其执行时序如图2.3.20(b)所示,工作原理如下。
图2.3.20 交替通断控制程序3
Network1:状态检测基本程序1,程序段以输入I0.1作为采样信号,以取反后的状态检测程序2的输出M0.1作为被测信号,因此,其输出Q0.1可保存I0.1状态为“1”时的M0.1取反信号。
Network2:状态检测基本程序2,程序段以取反后的输入I0.1作为采样信号,以状态检测程序1的输出Q0.1作为被测信号,因此,其输出M0.1可保存I0.1状态为“0”时的Q0.1信号。
以上2个状态检测基本程序的工作过程如下。
假设起始状态为I0.1=0、Q0.1=0、M0.1=0,此时,对于状态检测程序1,虽被测信号M0.1取反后的状态为“1”,但由于采样信号I0.1的状态为“0”,因此,Q0.1仍将保持起始状态“0”不变;而在状态检测程序2上,由于采样信号为I0.1取反后的状态“1”,因此,输出M0.1将成为被测信号Q0.1的状态“0”。
当输入I0.1为“1”时,状态检测程序1的采样信号I0.1为“1”,输出信号Q0.1将变为被测信号M0.1取反后的状态为“1”;而对于状态检测程序2,由于采样信号为I0.1取反后的状态“0”,因此,M0.1将保持状态“0”不变。
此时,如果I0.1由“1”恢复为“0”,对于状态检测程序1,由于采样信号I0.1的状态为“0”,因此,Q0.1仍将保持当前状态“1”不变;而在状态检测程序2上,由于采样信号为I0.1取反后的状态“1”,因此,输出M0.1将成为被测信号Q0.1的状态“1”。M0.1一旦成为“1”,状态检测程序1的被测信号也将变为“0”,从而为Q0.1的状态翻转做好了准备。
接着,如果I0.1再次由“0”变为“1”,状态检测程序1的采样信号I0.1为“1”,输出信号Q0.1将变为被测信号M0.1取反后的状态为“0”;而对于状态检测程序2,由于采样信号为I0.1取反后的状态“0”,因此,M0.1将保持状态“1”不变。
此时,如果I0.1再次由“1”恢复为“0”,对于状态检测程序1,由于采样信号I0.1的状态为“0”,因此,Q0.1仍将保持当前状态“0”不变;而在状态检测程序2上,由于采样信号为I0.1取反后的状态“1”,因此,输出M0.1将成为被测信号Q0.1的状态“0”。M0.1一旦成为“0”,状态检测程序1的被测信号又将变为“1”,从而为Q0.1状态的再次翻转做好了准备。
通过以上过程的不断重复,实现了交替通断控制的要求。图2.3.20所示的程序充分利用了PLC的循环扫描特点,程序只占用1个内部继电器和2个程序段,设计非常简洁,因此,它是目前有经验的PLC设计人员广为使用的典型程序。