第3章 编程语言与指令系统
3.1 编程语言
3.1.1 PLC编程语言的国际标准
PLC是专为工业控制而开发的装置,其主要使用者是工厂广大电气技术人员,为适应他们的传统习惯和掌握能力,通常PLC不采用微机的编程语言,而常常采用面向控制过程、面向问题的“自然语言”编程。目前因PLC生产厂家较多,且编程方法多样,针对于此,国际电工委员会(IEC)在标准IEC61131-3《可编程序控制器语言标准》中推荐了5种编程语言。目前已有越来越多的生产厂家提供符合IEC61131-3标准的产品。下面对常用的几种编程语言作简要介绍:梯形图(Ladder Diagram,LD)、功能块图(Function Block Dia-gram,FBD)、顺序功能图(Sequential Function Chart,SFC)。文本化编程语言包括:指令表(Instruction List,IL)和结构化文本(Structured Text,ST)。
1.梯形图
梯形图是使用得最多的图形编程语言,被称为PLC的第一编程语言。梯形图的编程方式与传统的继电器-接触器控制系统电路图非常相似,直观形象,很容易被熟悉继电器控制的电气人员所掌握,特别适用于开关量逻辑控制,不同点是它的特定的元件和构图规则。这种表达方式特别适用于比较简单的控制功能的编程。例如图3-1a所示的继电器控制电路,图3-1b所示的用PLC完成其功能的梯形图。
图3-1 接触-继电系统图和PLC梯形图
a)接触-继电系统图 b)PLC梯形图
梯形图是由触点、线圈和应用指令等组成。触点代表逻辑输入条件,比如按钮、行程开关、接近开关和内部条件等。线圈代表逻辑输出结果,用来控制外部的指示灯、交流接触器和内部的输出标志位等。
梯形图的编程方法的要点:梯形图按自上而下、从左到右的顺序排列。每个继电器线圈为一个逻辑行,即一层阶梯。每一逻辑行起于左母线,然后是触点的各种连接,最后终止于继电器线圈,右母线有无均可。整个图形呈阶梯状。梯形图是形象化的编程手段。梯形图的左右母线是不接任何电源的,因而梯形图中没有真实的物理电流,而只有“概念”电流。“概念”电流只能从左到右流动,层次的改变只能先上后下。
2.功能块图
功能模块图语言是与数字逻辑电路类似的一种PLC编程语言,有数字电路基础的人很容易掌握。功能块图的编程方法与数字电路中的门电路的逻辑运算相似,采用功能模块图的形式来表示模块所具有的功能,不同的功能模块有不同的功能。图3-2所示为西门子S7-300系列PLC的三种编程语言,图3-2a是逻辑功能图、图3-2b梯形图、图3-2c指令表。
图3-2 同一种逻辑关系的表示法
a)逻辑功能图 b)梯形图 c)指令表
3.顺序功能图
是一种根据系统工作的动作过程进行编程的语言。编程时将顺序流程动作的过程分成步和转换条件,根据转移条件对控制系统的功能流程顺序进行分配,一步一步地按照顺序动作。每一步代表一个控制功能任务,用方框表示。在方框内含有用于完成相应控制功能任务的梯形图逻辑。在顺序功能图中可以用别的语言嵌套编程。步、转换和动作是顺序功能图中的三种主要元件,如图3-3所示。这种编程语言使程序结构清晰,易于阅读及维护,大大减轻编程的工作量,缩短编程和调试时间。用于系统规模较大,程序关系较复杂的场合。
图3-3 顺序功能图
SFC编程方法的优点:在程序中可以很直观地看到设备的动作顺序。不同的人员都比较容易理解其他人利用SFC方法编写的程序,因为程序是按照设备的动作顺序进行编写的;在设备故障时,编程人员能够很容易地查找出故障所处在的工序,从而不用检查整个冗长的梯形图程序;不需要复杂的互锁电路,更容易设计和维护系统。
4.指令表
PLC指令表编程语言是与汇编语言类似的一种助记符编程语言,同样是由操作码和操作数组成。因此,由指令组成的程序叫做指令表程序。利用指令表编写的程序较难阅读,程序中的逻辑关系很难一眼看出,所以,在程序设计中较少用,在设计时一般采用梯形图语言编程。当然,在无计算机的情况下,适合采用PLC手持编程器对用户程序进行编制。如果使用的是梯形图编写的程序,在使用手持编程器时,必须将梯形图语言转换成指令表后写入到PLC中。且指令表编程语言与梯形图编程语言图一一对应,在PLC编程软件下可以相互转换。
5.结构化文本语言
结构化文本语言是用结构化的描述文本来描述程序的一种编程语言。它是类似于高级语言的一种编程语言。与梯形图相比,它能实现复杂的数学运算,编写的程序非常简洁和紧凑。在大中型的PLC系统中,常采用结构化文本来描述控制系统中各个变量的关系。主要用于其他编程语言较难实现的用户程序编制。
尽管PLC已获得广泛的应用,但是到目前为止,仍没有一种可以让各个厂家生产的PLC相互兼容的编程语言,且指令系统也是各自成体系,有所差异。如美国AB公司的PLC采用梯形图编程方式;西门子公司PLC采用结构化编程方式。本章主要以日本三菱公司生产的Q系列PLC为例,详细介绍PLC的指令系统和梯形图、指令表、顺序功能图编程方法。其他方法不再赘述。
3.1.2 GXDeveloper编程软件的编程语言
GX Developer有丰富的编程语言,它包括梯形图(LAD)、指令表(LI)、顺序功能图(SFC)、结构化编程语言(ST)、功能块(FB),这五种编程语言都是符合IEC61131-3标准的编程语言,而且都可以在GX Developer里面实现。在此只讲述SFC语言。
SFC(Sequential Function Chart)是“顺序功能图”的缩写,是一种编程语言。将整个控制流程分割为一系列的控制步,用以清晰地表示程序执行顺序和控制条件。
1.梯形图编程的难点
1)梯形图编程中需要考虑复杂的电路互锁信号,程序设计者往往由于考虑不周到而忘掉复位信号,增加了编程人员的负担。
2)梯形图没有固定的编程规则,不同的设计者按照各自不同的编程习惯、思路、方法来设计出相同功能的程序,以至于其他人要理解起来比较困难。
3)梯形图主要以触点和线圈的组合来表示,且其程序没有与设备运行顺序相一致的表达,如果由于某些故障导致设备停止,则必须要检查整个程序来找出程序中的错误。
2.SFC编程的优点
1)在程序中可以很直观地看到设备的动作顺序。不同的人员都比较容易理解其他人编写的程序,因为程序按照设备的动作顺序进行编写。
2)在设备故障时能够很容易地查找出故障所处的工序,从而不用检查整个冗长的梯形图程序。
3)不需要复杂的互锁电路,更容易设计和维护系统。
3.SFC的结构
SFC图由描述一系列机器工序的各个工序运行的“步”组成,并且包括描述从一个工艺到其他工艺的“转换条件”。
SFC程序的运行从初始步开始,每次转换条件成立时执行下一步并且在遇到END步结束一系列的运行。
SFC各个步的转换条件都是用梯形图描述。具体的SFC结构如图3-4所示。
4.SFC的转移分类及图形符号(见图3-5)
串行转移(见图3-5a):当转换条件成立时执行下一步;
选择转移(见图3-5b):只执行其在并联排列的多个转换条件中第一个成立的步;
并行转移(见图3-5c):同时执行并联排列的多个步;
跳转(见图3-5d):跳转至同一块内指定的步。
图3-4 SFC结构及梯形图
图3-5 SFC转移分类
a)串行转移 b)选择转移 c)并行转移 d)跳转
5.SFC的缺点
SFC适用于顺控程序,不适用于非顺控程序的控制,例如手工操作的控制和中断操作的控制等。
在Q系列中PLC可以同时使用多种编程语言编写的多个程序,因此,当不适合使用SFC的时候可以使用梯形图程序去控制,这样使用多个程序的控制可以根据不同的控制场合而灵活使用各种语言。
3.1.3 Q系列PLC梯形图中的编程元件
1.Q系列PLC的基本性能
基本型QCPU的性能规格见表3-1。
2.软元件列表(见表3-2)
表3-1 QCPU性能规格
(续)
(续)
①程序容量的1K为4B。
②可执行的最大顺控步数如下式所示,即(程序容量)—[文件头的大小(默认值:34步)]。
③步进继电器是SFC功能用的软元件。由于基本型QCPU不对应SFC功能,因此不可使用。
④包括CPU模块、基板的值。
⑤包括CPU模块、基板、电源模块的值。
表3-2 软元件表
(续)
注:实际的可用点数根据特殊模块而不同。关于缓冲存储器的点数的详细资料,请参阅特殊功能模块手册。
①定时器、保持定时器和计数器的“触点”和“线圈”是位软元件,“当前值”则为字软元件。
②输入、输出、单步继电器、连接特殊继电器、连接特殊寄存器保持为各自的默认值,这些值不能更改。
Q系列PLC梯形图中的编程元件的名字由字母和数字组成,它们分别表示元件的类型和元件号,如M10,D12。
内部用户软元件内的设置单元:对于除了输入(X)、输出(Y)、单步继电器(S)软元件、连接特殊继电器(SB)和连接特殊继电器CSN以外的所有的QnACPU内部用户软元件,使用的点数可通过“软元件设置”参数,详情见GX Developer软件中的“PLC参数”。
(1)输入继电器(X)
Q系列PLC的输入继电器和输出继电器的元件号用五位数来表示,该五位数中,前四位表示字,输入模块安装的位置;后一位表示位,遵循十六进制规则。例如,X0010F和X00110是两个相邻的位。
输入继电器是PLC接收来自外部触点和电子开关的开关量信号的窗口。PLC通过光耦合器,将外部信号的状态读入并存储在输入映像寄存器内。输入端可以外接常开触点或常闭触点,也可接多个触点组成的串并联电路。在梯形图中,可多次使用输入继电器的常开和常闭触点。
图3-6是一个PLC控制系统的示意图。外部的输入触点电路接通时,对应的输入映像寄存器为1状态,外部电路断开时为0状态。输入继电器的状态唯一地取决于外部输入信号的状态,不可能受用户程序的控制,因此在梯形图中绝对不能出现输入继电器的线圈。
图3-6 PLC控制系统示意图
(2)输出继电器(Y)
输出继电器是PLC向外部负载发送信号的窗口。输出继电器用来将PLC的输出信号传送给输出模块,再由后者驱动外部负载(螺线管、电磁开关、信号灯、数码显示等)。如图3-6中Y5的线圈“得电”,继电器输出模块中对应的硬件继电器的触点闭合,使外部负载工作。输出模块中的每一个硬件继电器仅有一对常开触点,而在梯形图中,每个输出继电器的常开触点和常闭触点都可以多次使用。
(3)内部继电器(M)
输入辅助继电器范畴,不能在PLC内部被锁存(即停电保存),在梯形图中触点的使用次数不受限制。Q系列PLC中,模式不同,内部继电器的范围也不同,具体请见GX Devel-oper软件中的“PLC参数”——软元件。
对于不同模式的PLC,其元件代表的意义也不同。例如Q系列(A模式)中:
M9036(运行监视):当PLC执行用户程序时,M9036为ON;停止执行时,M9038为OFF。
M9037:当PLC执行用户程序时,M9037为OFF。
M9038(上电脉冲):M9038仅在M9036由OFF变为ON状态时的一个扫描周期内为ON。
M9030~M9034分别表示0.1s,0.2s,1s,2s和1min时钟脉冲。
(4)特殊继电器(SM)
实用于Q系列(Q模式)PLC,例如:
SM400:当PLC执行用户程序时为ON,停止执行时为OFF。
SM402(初始化脉冲):仅在SM400由OFF变为ON状态时的一个扫描周期内为ON。
SM412:1s时钟脉冲。
(5)定时器(T)
PLC中的定时器相当于继电器系统中的时间继电器。Q系列PLC的定时器分为普通定时器和保持定时器(ST),在PLC编程软件中若将普通型定时器进行锁存,则普通型定时器也可作为保持型定时器用。对于Q基本型PLC来说,其定时器共512点(T0~T511),低速、高速定时器共用,当作为低速定时器用时,定时精度是100ms;当作为高速定时器用时,定时精度是10ms。采用指令OUT T时是作为低速定时器,而指令OUTH T时是作为高速定时器。
图3-7中,当X1接通时,T0开始计时(对100ms时钟脉冲进行计时),T1也开始对10ms时钟脉冲进行计时,当T0计时到200即20s时,T0线圈得电,其常开触点闭合,Y10线圈得电;当T1计时到100即1s时,T1线圈得电,其常开触点闭合,Y11线圈得电。
图3-7 定时器梯形图和指令表
时间的设定值可直接用十进制数K200表示,也可用数据寄存器D来设定。
(6)计数器(C)
对于基本型QCPU,计数器共512点,即C0~C511,全部是普通型计数器,为增计数器,注意要使计数器工作,前面必须加时钟脉冲,否则计数器是不能工作的,计数器就相当于定时器,其定时精度由其前面的时钟脉冲来决定,计数的数值可以直接为数据,也可用数据寄存器D来设置,如图3-8所示。当在PLC编程软件进行参数锁存时也可作为保持计数器用。
图3-8 计数器梯形图和指令表
如图3-8经调试可知,当X0接通时,计数器C0是无法进行工作的,只有前面加了时钟脉冲,如C1前加了1s脉冲SM412,当C1计数到7时,即7s时C1线圈得电,其常开触点闭合,Y10线圈得电;SM413是2s脉冲特殊继电器,D1中设定的数为2,计数器C2每隔2s计一次数,当C2计到D1中设定值2时,这时相当于C2计时4s,4s到C2线圈得电,其常开触点闭合,Y11线圈得电。
(7)数据寄存器(D)
基本型QCPU,共11136点,即D0~D11135。
数据寄存器由16位组成,其读和写操作以16位为单位执行,如图3-9所示。
图3-9 数据寄存器组成
若数据寄存器被32位指令所运用,则数据将被保存在寄存器Dn和Dn+1。数据的低16位保存在顺控程序指定的数据寄存器(Dn)中,而数据的高16位被保存在指定的寄存器编号+1(Dn+1)中。
例如图3-10中,若在DMOV指令中指定了寄存器D12,则低16位数据被保存在D12中,而高16位被保存在D13中。
图3-10 DMOV指令的应用
哪些寄存器数据需要保存,可在PLC编程软件的参数设置中进行设定,寄存器一旦设定好了,断电就能保持,但对于增量型编码器不适用,读者可现场测试(此时通过参数设定是不能锁存的,只能通过编写PLC程序才能保存D中的数据)。
(8)变址寄存器(Z)
共10个,即Z0~Z9。变址寄存器是顺控程序中所使用的软元件的间接设置(变址修饰)中使用的软元件。学会如何使用变址寄存器,能起到简化程序的作用,如图3-11所示。每个变址寄存器由16位构成,可以以16位单位读出、写入。
当Z0=0时,执行完MOV指令后,将D1中的数据传送到D200中保存;当Z0=1时,将D(1+1)即D2中的数据传送到D200中进行保存。
图3-11 变址寄存器的应用