电气工程基础第8章.docx
《电气工程基础第8章.docx》由会员分享,可在线阅读,更多相关《电气工程基础第8章.docx(51页珍藏版)》请在冰豆网上搜索。
电气工程基础第8章
第8章可编程控制器的编程
8.1可编程控制器的编程语言
PC是以程序的形式进行工作的,所以必须把控制要求变换成PC能接受并执行的程序,编制程序应用编程语言。
而PC又是专为在工业控制而设计的,PC产品的主要使用对象是工厂的广大电气技术人员,为了满足他们的传统习惯和掌握能力,PC常采用以下几种编程语言:
梯形图语言、助记符语言、逻辑功能图语言和某些高级语言,但目前使用最多最普遍的是梯形图语言及助记符语言,他们主要是由传统继电控制线路变换而来的。
一、梯形图编程语言
梯形图是一种图形语言,它沿用继电器的触点、线圈、串并联等术语和图形符号,并增加了一些继电器接触控制中没有的符号,因此梯形图与继电器接触控制图的形式及符号有许多相同或相仿的地方(见图8-1-1)。
但PC的梯形图使用的是内部继电器、定时器、计数器等,都是由软件实现的,使用方便,修改灵活,是电气控制的继电器梯形图的硬连线无法比拟的。
梯形图按自上而下,从左到右的顺序排列,最左边的竖线称为起始母线也叫左母线,然后按一定的控制要求和规则连接各处触点,最后以继电器线圈结束,称为一逻辑行或叫一“梯级”,一般在最右边还加上一竖线,这一竖线称为右母线。
通常一个梯形图中有若干逻辑行(梯级),形似梯子,如图8-1-1所示,梯形图由此而得名。
梯形图比较形象直观,容易掌握,用得很多,堪称用户第一编程语言。
梯形图中接点(触点)只有常开和常闭接点,它可以是PC输入点接的外部开关(塌动按钮、行程开关等)接点,但通常是PC内部继电器接点或内部寄存器、计数器等的状态。
梯形图中的继电器线圈不全是实际继电器线圈,它包括输出继电器、辅助继电器线圈等,其逻辑动作只有线圈接通之后,才能使对应的常开或常闭接点动作。
梯形中触点可以任意串联或并联,但继电器线圈只能并联而不能串联。
内部继电器、计数器、移位寄存器等均不能直接控制外部负载,只能做中间结果供PC内部使用。
PC是按循环扫描方式工作沿梯形图的先后顺序执行程序的,在同一扫描周期中的结果保留在输出状态暂存器中,所有输出点的值在用户程序中可以当作条件使用。
程序结束时要有结束标志END。
二、助记符编程语言
助记符语言就是用表示PC各种功能的助记功能缩写符号和相应的器件编号组成的程序表达方式,也称为指令语句,例如LDX400。
像这样的每句助记符编程语言就是一条指令或程序。
助记符语言比微机中使用的汇编语言直观易懂,编程简单。
但不同厂家制造的PC所使用的助记符不尽相同,所以对于同一个梯形图来说,写成对应的程序(语句表)也不尽相同,要将梯形图语言转换成助记符语言,必须先弄清楚所用PC的型号及内部各种器件的编号、使用范围以及每条助记符使用方法。
三、逻辑功能图
逻辑功能图也是PC的一种编程语言,也称为流程图语言,这种编程方式基本沿用了半导体逻辑电路的逻辑框图来表达,是一种控制功能是说明语言。
一般用一个运算框图表示一种功能,框图内的符号表达了该框内的运算功能。
框的左边画输入,右边画输出。
使用这种语言编程,控制功能直观,条件清晰,编程方便,不易出错。
但这种语言对编程器的要求比较高,目前已出现了直接输入流程图语言的产品。
四、高级语言
在大型PC中为了完成比较复杂的控制,有的也采用BASIC等计算机高级语言,这样PC的功能就更强。
目前各种类型的PC,一般都具备两种或两种以上的编程语言,而且大多数都能同时使用梯形图语言和助记符语言。
虽然不同厂家和类型的PC的梯形图、指令系统和使用符号有些差异,但编程的基本原理和方法是相同或相仿的。
本书主要结合日本日本OMRON公司C系列P型PC介绍使用梯形图编程语言和助记符编程语言。
(本书主要结合日本三菱公司F1系列PC,介绍使用梯形图编程语言和助记符编程语言。
)
8.2C系列P型PC基本指令
C系列P型PC的指令系统共有37条指令,其中基本指令12条,应用指令25条。
由于采用的编程器不同,程序送入PC内存的语言也不同。
当采用图形编程器时,可以用梯形图直接编程。
如果采用简易编程器,必须把梯形图转换成指令表,把指令表送入PC内存才能执行。
指令由三段组成:
序号、指令字符和数据。
序号是指令在内存中存放的顺序代号,用四位十进制数字表示,通常用0000表示第一条语句。
有的书又称为步号(step)和地址(Address)编号。
指令字符是指令的助记符号,常用英文单词的缩写字母表示,由2至4个字母组成,又可简称为指令。
数据则是执行该指令所选用的继电器号,或通道号,或定时器/计数器设定值,或一些常数。
我们在讲指令时,仅讲后两部分;在讲程序时,因为有指令顺序问题,才在编码表中给出完整格式。
P型PC的指令中有10条没有数据段。
P型PC中的基本指令可用简易编程器上相对应得指令键输入PC。
在简易编程器上的指令键有:
LD、AND、OR、NOT、OUT、CNT、TIM、TR、HR、SFT。
1、取指令
指令符:
LD
数据:
触点号。
除了数据通道外,PC的其余继电器号都可以。
功能:
读入逻辑行(又称为支路)的第一个常开触点。
或者称常开触点与左(分支)母线连接指令
指令格式:
LD、触点号(相应的数字键)
2、取反指令
指令符:
LDNOT
数据:
同LD指令。
功能:
读入逻辑行的第一个常闭触点。
或者称常闭触点与左(分支)母线连接指令
指令格式:
LDNOT触点号。
在梯形图中,每一逻辑行必须以触点开始,所以必须使用LD或LDNOT指令。
此外,这两条指令还用于每一支路的开始,或分支点后分支电路的起始,并与其它一些指令配合使用。
3、与指令
指令符:
AND
数据:
触点号。
除了暂存继电器触点外,其余继电器触点都可以。
功能:
逻辑与操作,即串联一个常开触点。
指令格式:
AND触点号。
4、与非指令
指令符:
ANDNOT
数据:
触点号,同AND指令。
功能:
逻辑与非操作,即串联一个常闭触点。
指令格式:
ANDNOT触点号。
5、或指令
指令符:
OR
数据:
触点号。
范围同AND指令。
功能:
逻辑或操作,即并联一个常开触点。
指令格式:
OR触点号。
6、或非指令
指令符:
ORNOT
数据:
触点号。
范围同AND指令。
功能:
逻辑或非操作,即并联一个常闭触点。
指令格式:
ORNOT触点号。
7、输出指令
指令符:
OUT
数据:
继电器线圈号。
范围是0500~1807、HR000~HR915、TR0~TR7
功能:
将逻辑行的运算结果输出。
指令格式:
OUT继电器号。
8、求反输出指令
指令符:
OUTNOT
数据:
继电器号。
范围同OUT指令。
功能:
将逻辑行的运算结果取反后输出。
指令格式:
OUTNOT继电器号。
例1:
电动机起动/停止电路的编程
在时序图中,0003的波形是指接于0003输入端的开关常开触点对0003输入继电器线圈的控制。
当该输入开关未闭合时,0003输入继电器线圈不通,对应的常闭触点是接通的。
例2:
指令应用举例2
在程序中如果有几个分支输出,并且分支后还有触点串联时,要用暂存继电器TR来暂时保存分支点状态。
TR必须与LDOUT指令配合使用
例3:
TR指令应用举例
在同一逻辑行中,若有几个分支点时,要用不同号的TR,且TR不得超过8个,在不同逻辑行中,允许用重号的暂存继电器,见图8-2-4
在程序中要将两个程序段(又叫电路块)连接起来时,需要用电路块连接指令。
每个电路块都是以LD或LDNOT指令开始。
这类指令有下列两条。
9、电路块与指令
指令符:
ANDLD
数据:
无
功能:
将两个电路块串联起来。
指令格式:
ANDLD
例4:
两个电路块的串联编程举例。
从图8-2-5可以看出,电路块的每一分支都是以LD或LDNOT指令开始。
当串联电路块多于两个时,电路块连接方法有两种,一种是逐块相连,另一种是所有电路块的编码列出后进行总连接,见下例。
例5:
多个电路块串联时,ANDLD指令的两种编码举例。
方法1是电路块逐块相连,方法2是电路块编程后进行总连接,两种编码方法的指令条数相同。
但在使用方法2时,要注意两点:
总连接时,使用ANDLD指令的条数要与电路块的实际数目相对应,即比电路块数少1。
连续使用ANDLD指令数≤8,即最多只能9个电路块相连,而方法1则没有这个限制。
10、电路块或指令
指令符:
ORLD
数据:
无
功能:
将两个电路块并联起来。
指令格式:
ORLD
例6:
两个串联电路块(支路)的并联举例。
当并联的电路块数≥3时,也有两种编码方法,见下例。
例7:
多电路块并联
编码放法2的注意点同ANDLD。
上例中编码表缺少地址段,不是标准编码表。
11、定时器指令
指令符:
TIM
数据:
占两行。
第一行跟在指令后,是两位数字00~47,为选定的定时器号;第二行数据与第一行数据在编码表中位置上下对齐,是定时器的设定值,用4位十进制数表示。
定时基本单位为0.1秒,所以最低位是十分位。
例如定时5秒的设定值是0050。
定时范围是0.1~999.9秒。
功能:
定时时间到接通定时器触点。
指令格式:
TIM定时器号设定值。
定时器是减1定时器。
当输入条件为ON时,开始减1定时,每经过0.1秒,定时器的当前值减1,定时时间一到,定时器的当前值为0000,定时器触点接通并保持。
当输入条件为OFF时,不管定时器当前处于什么状态都复位,当前值恢复到设定值,相应的常开触点断开。
定时器相当于时间继电器,在电源掉电时,定时器复位。
例8:
定时器指令的应用。
计数器指令
指令符:
CNT
数据:
占两行。
第一行是计数器号00~47;下一行是计数设定值,用4位十进制数表示,计数范围是0001~9999。
功能:
计数到时,接通计数器动合接点,相当于硬件计数器。
指令格式:
CNT计数器号计数设定值。
该指令在梯形图中有两逻辑输入行(见图8-2-10)。
接CP端的行,是计数信号输入行;接R端的行是计数器复位输入行,又称为置0行。
在设计编码表时,该指令需要3步才能完成。
第一步是计数输入行,第二步是计数复位行,最后才是计数器指令。
计数器是减1计数器。
在计数脉冲的上升沿,计数器的当前值减1,当计数器值减为0时,计数器的常开触点接通。
当复位输入为ON时,计数器复位,常开触点断开。
电源掉点时,计数器的当前值保持不变。
当置0信号和计数信号同时来到时,置0信号优先。
例9:
计数器指令编程
利用计数器的掉电保持功能,可以将专用继电器1900~1902与计数器相结合组成具有掉电保持功能的定时器,见例10。
例10:
用计数器构成15秒定时器。
定时器和计数器的设定值,还可以由通道内容给定。
如果用输入通道内容提供时,就可以用外部器件如拨码盘输入,这时要占用一个通道的16位。
要注意的是预置值是十进制数,外部器件必须用BCD码输入。
编程操作时,输完器件号后按CLR键,再输入通道号作设定值,按WRITE键写入PC。
00~17CH(通道)、HR0~HR9这28个通道可以作设定值通道。
以上是P型PC的12条基本指令。
8.3功能指令
功能指令又称为应用指令。
这类指令在简易编程器上一般没有对应的指令键(SFT指令除外),指令的输入是用功能键FUN与两个数字键组合完成。
1、空操作指令
指令符:
NOP(00)
数据:
无
编程操作:
FUN00
功能:
NOP是与元件号无关的指令。
CPU执行这条指令不完成任何逻辑操作,只是占用一个步序和2~3μs时间。
NOP指令通常可以用于以下几种情况:
①在编程过程中,预先在程序中插入NOP指令,指定某些步序号为空,留作以后插入或修改程序用,还可用于扫描时间的微调。
在清除用户区内存时。
就是用NOP(00)指令填满用户RAM空间。
②短接电路中某些触点,如图8-3-1(a)所示。
③删除电路中某些触点,如图8-3-1(b)所示。
结束指令
指令符:
END(01)
数据:
无
编程操作:
FUN、0、1
功能:
是程序最后一条指令,表示程序到此结束。
END是一个与元件号无关的指令。
常用END指令表示程序的结束,或在调试程序时,把程序分为若干段,将END指令插入各段程序之后,这样可以逐段调试程序,在该段程序调试完毕后可删去END,再进行下段程序的调试,直到程序调试完为止。
这给程序调试带来很大方便。
PC只执行0000地址开始至END结束的用户程序,PC执行到END指令就停止执行程序阶段,转入输出刷新阶段,如果程序中遗漏这条指令,在检查程序时编码器上将显示:
“NOKENDINSET”;在运行时报警指示灯闪烁。
插入END指令后,PC才能正常运行。
2、互锁指令
指令符:
IL(02)
数据:
无
编程操作:
FUN、0、2
功能:
用于公共串联触点的连接,形成分支电路,总与LD指令连用。
互锁指令也称主控开始指令。
3、互锁清除指令
指令符:
ILC(03)
数据:
无
编程操作:
FUN、0、3
功能:
表示互锁程序段的结束。
也称主控返回指令,用于IL指令的复位指令,即主控结束时返回母线。
IL指令与原来的母线相连,其作用也就是产生一新的母线。
IL指令相当于将原来的母线移到新的母线上,而ILC指令则使后面各支路起点回到原来的母线上。
IL和ILC指令通常总是配合使用。
当互锁条件满足时(ON),顺序执行后续指令,如同IL、ILC指令不存在一样。
当互锁条件不满足时(OFF),IL与ILC之间的输出线圈均OFF,定时器复位,计数器、移位寄存器及锁存继电器的状态不变。
例1:
互锁指令的应用
在图8-3-2中,当外接0002端的输入开关闭合时,0002输入继电器接通,它的常开触点闭合,互锁条件满足,指令顺序执行。
当输入开关断开时,对应的输入继电器不通,0002的内部常开触点断开,互锁条件不满足,输出继电器0504、0505、0506全部OFF。
因为IL(02)指令后面紧跟LD指令,所以可以把它当作线圈类指令对待,将电路重排,见图8-15。
通常IL和ILC是成对使用的,如果一行有多个分支点时,也可以不成对使用,组成IL-IL-ILC形式,即多个IL与一个ILC配合使用,见例12。
要注意的是此时检查程序,编程上会显示出错信息:
“IL-IL-ERR”,这只是告诉用户没有成对使用IL、ILC指令,并不影响PC程序的正常运行。
例12:
IL-IL-ILC的应用。
IL-ILC不成对使用时,电路的操作如下:
1、如果第一个IL的条件(0002)OFF时,输出继电器0500、0501、0502都OFF。
2、如果第一个IL的条件(0002)ON,第二个IL的条件(0003)OFF,只有0502根据当时的条件(0006状态)可能是ON,也可能是OFF,0500、0501都是OFF。
3、如果两个IL的条件(0002和0003)都是ON,电路就象没有IL和ILC指令一样正常操作。
对于上述电路不仅可用IL/ILC指令编程,还可用TR编程,见下图8-17,仔细分析两图,找出异同点。
互锁指令组是一对功能很强,非常有用的指令,特别适用于一台设备加工同类多规格产品的场合。
利用IL-ILC把程序分段,各段相当于一个子程序,见图8-3-6。
见图8-3-6中独立程序段的数量根据产品规格数来定。
程序段的选择由硬件方式即PC的外部输入信号0000、0001的闭合、断开状态决定。
当接于0000、0001端子上的外接开关闭合时,执行程序1,加工某一产品;当0000OFF、0001ON时,执行程序2,加工另一种产品。
现接两个输入开关,可以有4种不同的状态,因此最多可有4个程序段。
如果各规格产品的结束部分进行相同的控制,把这相同部分设计成结尾程序,各产品共用。
如果各规格产品没有相同的结果部分,图中结尾程序去掉,各程序段完全独立。
利用互锁指令,也能完成控制系统工作方式如手动、自动的选择,原理同前,见图8-3-7,当只有两种工作方式要选择时,只需外接一个输入信号如0000端,利用它的ON或OFF就能实现。
5.跳转指令
指令符:
JMP(04)
数据:
无
编程操作:
FUN、0、4
功能:
程序转移。
6。
转结束指令
指令符:
JME(05)
数据:
无
编程操作:
FUN、0、5
功能:
程序转移结束。
跳转指令组是根据JMP前的条件,来决定JMP和JME之间的程序段是否执行。
若条件位OFF,就不执行其间的指令,在它们之间的所有线圈都保持原来的状态;若条件位ON,即顺序执行程序,如同JMP、JME指令不存在一样。
该指令组在功能上与条件转移指令有相似之处,又有不同的地方。
应用举例见例13。
例13:
JMP-JME指令的编程
注意:
JMP指令之后开始的指令必须是LD,可以把它当作线圈指令对待,将梯形图重画,见图8-21
JMP、JME可成对使用,也可以多个JMP与一个JME指令组合使用,见图8-3-10。
在后一种情况下进行程序检查时,编程器上会出现“JMPJMEERR”,提示没有成对使用,但这不影响程序的正常执行。
图8-22中,当第一个JMP条件不满足即接于0002的输入开关OFF时,产生程序转移,0500、0501、0502均保持原来的状态,CNT10保持当前计数值。
当第一个JMP条件满足(接于0002的输入开关)ON而第二个JMP条件(0005的输入开关)OFF时,由此开始至JME的程序不执行,0501、0502、
CNT10均保持原来的状态,而0500根据0003、0004的状态可能ON,也可能OFF。
当两个JMP的条件都是ON时,电路中就象不存在JMP-JME指令一样,程序顺序执行。
在同一起点的程序段中,最多允许使用8次JMP、JME,若超过8次则出现“JMP-OVER”,PC停止执行程序。
跳转指令组也是一组功能很强的指令,可用于工作方式的选择。
7.锁存指令
指令符:
KEEP(11)
数据:
0500~1807,HR000~HR915。
编程操作:
FUN、1、5、继电器号
功能:
相当于锁存器,当其置位(ON)后,将一直保持,直至复位为止。
锁存指令有两个输入行,SET为置位输入行,RES为复位输入行。
当置位输入为ON,复位输入为OFF时,锁存继电器动作并保持,即使输入再变为OFF仍保持。
当复位输入为ON,置位输入为OFF时,锁存继电器释放。
当两输入端同为ON时,复位输入优先。
波形见图8-23。
在写编码表时,先写置位行,然后是复位行,最后是锁存指令,见例14。
例14:
KEEP指令的编程
自锁电路能用KEEP指令代替,见图8-25
若将图8-3-13(a)所示电路用在互锁程序段(IL与ILC之间)中,当IL条件为OFF时,自锁电路中0500OFF;图(b)所示电路用于互锁程序段中时,0500状态则保持不变。
如果把保持继电器作为锁存继电器使用,在电源出故障时,数据将保持到置位或复位输入信号到来之前,示例见图8-26
图8-3-14
8.前沿微分指令
指令符:
DIFU(13)
数据:
0500~1807,HR000~HR915。
功能:
在输入脉冲的前沿,使指定的继电器接通一个扫描周期后又释放,即把输入状态的前沿微分输出到指定的继电器。
编程操作:
FUN、1、3、继电器号
例15:
前沿微分指令的编程
例中,当接于0003的输入开关断开时,与它对应的输入继电器OFF,在内部电路中的0003常闭接点ON,接于0002的开关,由OFF→ON时,0500闭合一个扫描周期后又释放,定时波形见图8-28。
9.后沿微分指令
指令符:
DIFD(14)
数据:
同DIFU(13)
功能:
把输入信号的后沿(ON→OFF)微分,输出给指定继电器。
编程操作:
FUN、1、4、继电器号。
CPU在连续两次扫描中,发现输入状态从ON→OFF时执行本指令。
这两条微分指令都是在输入状态发生变化时才起作用。
在程序运行中,一直接通的输入条件不会引起DIFU的执行;一直处于断开的输入不会引起DIFU的执行,见例16。
例16:
微分指令的编程
在一个程序中,最多允许48个DIFU和DIFD指令。
若多于此数,编程器上显示“DIFOVER”,表示微分指令溢出,并将第49个微分指令作废,即当作NOP指令执行。
微分指令通常用在一次输入只需作一次处理的情况下,这种情况是经常会遇到的。
10.逐位移位指令
指令符:
SET(10)
数据:
以通道为单位。
05~07、HR0~HR9、DM00~DM31。
功能:
相当于一个串行输入移位寄存器。
编程操作:
FUN、1、0、首通道号、末通道号。
移位寄存器必须按照输入(IN)、时钟(CP)、复位(R)和SFT指令的顺序编程。
当移位时钟由OFF→ON时,将一个或几个通道的内容,按照从低位到高位的顺序移动,最高位溢出丢失,最低位由输入数据填充。
当复位输入ON时,参加移位的所有位全部复位,即都为OFF,例17是一个通道的移位举例。
例17:
一个通道的逐位移位
若把此例中最后一行改为1015控制0500输出时,可把移位寄存器16位的内容一位一位地输出,当0005ON时,10通道内容变为0000H。
如果需要多于16位的数据移位,可以把几个通道串联起来移位。
例18是三个通道的移位,这些位是从1000到1215,共48位。
例18:
三个通道的逐位移位。
移位指令使用时,需注意:
起始通道和结束通道,必须在同类继电器中,即同一种器件才能组成移位寄存器使用。
起始通道号≤结束通道号。
移位指令应用广泛。
因为生产中许多装置的操作,如传送带、自动流水线、顺序控制等的移动是单方向的,工作过程是一步接一步的,这时用SFT指令特别方便。
只需要赋予起始数据为1(最低位),其余为0,并把每一步的结束信号(时间或工序完成信号)接到CP端,将移位寄存器相应位送输出继电器,就能实行顺序控制。
11.通道移位指令
指令符:
WSET(16)
数据:
以通道为单位。
05~07、HR0~HR9、DM00~DM31。
功能:
以通道为单位的串行移位。
编程操作:
FUN、1、6、首通道号、末通道号。
通道移位指令执行时,当移位条件为ON,进行移位,末通道的16位内容全部移出丢失,原首通道16位全部复位(即为00H)。
例19:
3个通道的通道移位
图中,接于0002端的输入开关由OFF→ON时,1000继电器接通一个扫描周期,移位条件成立,进行移位。
原12CH的内容溢出丢失,原11CH的内容移到12CH,10CH的内容移到11CH,而起始通道10CH的16位全部复位。
因为程序中有微分指令,所以移位只在0002由OFF→ON时执行一次。
若不用微分控制,那么移位结果会是什么呢?
请读者想一想。
注意:
首通道和末通道必须是同类器件。
首通道号≤末通道号。
当移位指令ON时,CPU每扫描一次程序,就执行一次移位指令。
如果只想执行一次,应该使用微分指令。
12.高速定时器指令
指令符:
TIMH(15)
数据:
占两行。
一行为定时器号00~47,另一行为设定值。
设定值指定定时时间