西门子模块6ES7214-2AS23-0XB8质保一年
缺点是要多占用两字节的内存,以后程序中不能使用VW0。但S7-200的RAM空间很大,一般是用不完的,以226为例,有多达10K的RAM,偶从来没有**过1K。这些RAM都是花钱买来的,不用白不用,不用也是浪费了。
同理,如果有字节型变量经常需要与字类型变量相互转换,让字节变量占用一个字的内存宽度浪费一个字节,避免类型转换。具体步骤如下:
1:根据工程实际需求,进行功能块规划,编写子程序
在PLC中子程序是为一些特定的控制目的编制的相对独立的程序。执行子程序调用指令CALL等,如果条件不满足子程序调用时,程序的扫描就仅在主程序中进行,不再去扫描这段子程序,这样就减少不必要的扫描时间。
2:脉冲触发SET、RESET
PLC中,使用SET指令只执行一次即可,不必每次扫描都执行这个指令,很适合与脉冲输出(PLS/PLF)指令配合使用。有些工程人员忽视了这个问题,使用了常规的方法来驱动SET指令,无意中增加了PLC程序扫描运行时间。
3:用字或双字数据传送给DO点方法来控制输出
在PLC的应用中通常都会有大量的输出控制,用字或双字数据传送给DO点方法来控制输出可以提高速度,只要根据实际应用的要求,合理分配输出,变换控制输出控制字,可以大大减少PLC程序执行的步数,从而加快PLC的程序运行速度。
4:避免了类型转换,方法如下:
以西门子PLC S7-200系列为例,它的内存格式与我们常用的PC机正好相反,它是高字在前,低字在后的。所以我们可以将字变量放在后两个字节,在程序初始化时将前两个字节清零(程序的其它地方不得使用这两个字节)。
如我们定义符号时将字变量定义在VW2,同时保持VW0的值为零。则程序中可以用VW2以字型访问该变量,同时也可以VD0以双字型访问,避免了类型转换。
为了避免使用时混淆,较好以明确的符号定义来区分字类型和双字类型。在此推荐类匈牙利命名法:以前缀指示变量类型,用首字母大写的有意义的英文单词的组合作变量名。小生习惯用以下缀:b————字节型变量(byte)
w————字型变量(word)
d————双字变量(double)
r————实型变量(real)
f————位变量(flag)
btn——-自复位按钮式输入(button)
sw————切换开关或自锁按钮输入(switch)
sig——-传感器、编码等电平信号输入(**)
rly——-输出继电器位(relay)
……
当然,这根据个人习惯来,没有规律,主要是利于自己区分。
如有一个字类型变量名为VarName,为使用的转换技巧,我们可以这样定义:
wVarName————VW2
dVarName————VD0
在程序初始化时将VW0清零(如果是不需要记忆的变量,直接将dVarName清零也可)或者在数据块中将VW0设置为零。则以后需要以字类型访问变量时就用wVarName,需要以双字类型访问变量时就用dVarName。完全不需要类型转换
一、编程语言的形式
本文采用较常用的两种PLCbianchengruanjian/' target='bbbbbb'>PLC编程语言,一是梯形图,二是助记符语言表。采用PLC梯形图编程,因为它直观易懂,但需要一台个人计算机及相应的PLC编程软件;采用助记符形式便于实验,因为它只需要一台简易编程器,而不必用昂贵的图形编程器或计算机来编程。
虽然一些高档的PLC还具有与计算机兼容的C语言、BASIC语言、**的高级语言(如西门子公司的GRAPH5、三菱公司的MELSAP),还有用布尔逻辑语言、通用计算机兼容的汇编语言等。不管怎么样,各厂家的编程语言都只能适用于本厂的产品。
编程指令:指令是PLC被告知要做什么,以及怎样去做的代码或符号。从本质上讲,指令只是一些二进制代码,这点PLC与普通的计算机是完全相同的。同时PLC也有编译系统,它可以把一些文字符号或图形符号编译成机器码,所以用户看到的PLC指令一般不是机器码而是文字代码,或图形符号。常用的助记符语句用英文文字(可用多国文字)的缩写及数字代表各相应指令。常用的图形符号即梯形图,它类似于电气原理图是符号,易为电气工作人员所接受。
指令系统:一个PLC所具有的指令的全体称为该PLC的指令系统。它包含着指令的多少,各指令都能干什么事,代表着PLC的功能和性能。一般讲,功能强、性能好的PLC,其指令系统必然丰富,所能干的事也就多。我们在编程之前必须弄清PLC的指令系统
程序:PLC指令的有序集合,PLC运行它,可进行相应的工作,当然,这里的程序是指PLC的用户程序。用户程序一般由用户设计,PLC的厂家或代销商不提供。用语句表达的程序不大直观,可读性差,特别是较复杂的程序,更难读,所以多数程序用梯形图表达。
梯形图:梯形图是通过连线把PLC指令的梯形图符号连接在一起的连通图,用以表达所使用的PLC指令及其前后顺序,它与电气原理图很相似。它的连线有两种:一为母线,另一为内部横竖线。内部横竖线把一个个梯形图符号指令连成一个指令组,这个指令组一般总是从装载(LD)指令开始,必要时再继以若干个输入指令(含LD指令),以建立逻辑条件。最后为输出类指令,实现输出控制,或为数据控制、流程控制、通讯处理、监控工作等指令,以进行相应的工作。母线是用来连接指令组的。下图是三菱公司的FX2N系列产品的较简单的梯形图例:
它有两组,**组用以实现启动、停止控制。*二组仅一个END指令,用以 结束程序。
梯形图与助记符的对应关系:助记符指令与梯形图指令有严格的对应关系,而梯形图的连线又可把指令的顺序予以体现。一般讲,其顺序为:先输入,后输出(含其他处理);先上,后下;先左,后右。有了梯形图就可将其翻译成助记符程序。上图的助记符程序为:
地址 指令 变量
0000 LD X000
0001 OR X010
0002 AND NOT X001
0003 OUT Y000
0004 END
反之根据助记符,也可画出与其对应的梯形图。
梯形图与电气原理图的关系:如果仅考虑逻辑控制,梯形图与电气原理图也可建立起一定的对应关系。如梯形图的输出(OUT)指令,对应于继电器的线圈,而输入指令(如LD,AND,OR)对应于接点,互锁指令(IL、ILC)可看成总开关,等等。这样,原有的继电控制逻辑,经转换即可变成梯形图,再进一步转换,即可变成语句表程序。
有了这个对应关系,用PLC程序代表继电逻辑是很容易的。这也是PLC技术对传统继电控制技术的继承。
二、 基本指令系统特点自动化
PLC的编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同与一般的汇编语言,它既要满足易于编写,又要满足易于调试的要求。目前,还没有一种对各厂家产品都能兼容的编程语言。如三菱公司的产品有它自己的编程语言,OMRON公司的产品也有它自己的语言。但不管什么型号的 PLC,其编程语言都具有以下特点:
1、图形式指令结构:程序由图形方式表达,指令由不同的图形符号组成,易于理解和记忆。系统的软件开发者已把工业控制中所需的独立运算功能编制成象征图形,用户根据自己的需要把这些图形进行组合,并填入适当的参数。在逻辑运算部分,几乎所有的厂家都采用类似于继电器控制电路的梯形图,很容易接受。如西门子公司还采用控制系统流程图来表示,它沿用二进制逻辑元件图形符号来表达控制关系,很直观易懂。较复杂的算术运算、定时计数等,一般也参照梯形图或逻辑元件图给予表示,虽然象征性不如逻辑运算部分,也受用户欢迎
2、明确的变量常数:图形符相当于操作码,规定了运算功能,操作数由用户填人,如:K400,T120等。PLC中的变量和常数以及其取值范围有明确规定,由
产品型号决定,可查阅产品目录手册。
3、简化的程序结构:PLC的程序结构通常很简单,典型的为块式结构,不同块完成不同的功能,使程序的调试者对整个程序的控制功能和控制顺序有清晰的概念。
4、简化应用软件生成过程:使用汇编语言和高级语言编写程序,要完成编辑、编译和连接三个过程,而使用编程语言,只需要编辑一个过程,其余由系统软件自动完成,整个编辑过程都在人机对话下进行的,不要求用户有高深的软件设计能力。
5、强化调试手段:无论是汇编程序,还是高级语言程序调试,都是令编辑人员头疼的事,而PLC的程序调试提供了完备的条件,使用编程器,利用PLC和编程器上的按键、显示和内部编辑、调试、监控等,并在软件支持下,诊断和调试操作都很简单。
总之,PLC的编程语言是面向用户的,对使用者不要求具备高深的知识、不需要长时间的专门训练
软PLC控制技术是基于软件和硬件在逻辑功能上等效的思想,采用开放式体系结构,通过软件来实现PLC硬件的功能。软PLC系统由上位机和下位机组成,上位机为用户提供编辑界面和多种编程语言环境,便于用户在PC机上进行PLC程序的编辑,同时还对下位机的一些状态量进行监控,并给下位机发送指令。
用户编辑完PLC的梯形图和指令表程序后,只有通过对程序的编译来获取程序的逻辑后才能按照PLC的工作原理运行。为了配合在PC机上运行的软PLC编辑开发系统,使PC机完成相应的控制功能,开发了软PLC编译系统。
PLC编译模块由梯形图语法检查模块、梯形图程序逻辑检查模块和指令表程序语法检查模块组成。梯形图程序语法检查模块检查用户PLC图形程序有无指令标记重复、指令地址越界等语法错误;梯形图程序逻辑检查模块检查PLC图形程序有无逻辑错误;语言程序语法检查模块检查用户语句程序有无拼写、指令格式、指令地址越界等语法错误。
编译程序的构造包括词法分析、语法分析、语义分析、错误的检查和处理以及代码生成和代码优化等程序。
软PLC程序的遍历算法主要包括梯形图遍历算法和指令表遍历算法。梯形图程序由若干个梯级组成,遍历时以梯级为单位,采用深度**的扫描方法。按从上到下,从左到右的顺序进行。在扫描过程中,遇到并联结点就转入下一行进行扫描,行与行之间的切换由指针的变换来实现,原先位置的指针被预先存储起来,待并联模块扫描完后。再从原来的位置开始往下扫描。
指令表是由一系列指令组成。且指令按照链式结构存储,按照顺序读取指令即可完成对指令表的遍历。
3.1 梯形图转换成指令表
梯形图转换成指令表是以梯级为单位进行的。
对于没有并联支路的梯级,只要根据梯形图元素在梯级中的位置和元素的类型,即可将梯形图转换为指令表。对于包含有并联支路的梯级,可以按照遍历梯形图的方法,一边遍历一边转换。在转换过程中,首先设定1个全局变量nDepth(梯级深度),以确定梯级的深度,然后判断1个梯级是否包含并联支路。如果包含则调用包含有并联支路的转换程序,然后顺序读入当前梯级深度层次上的梯形图元素;如没有发现并联支路,则调用不含并联支路的转换程序依次转换。在转换过程中。每转换完1条支路就要添加1个ORB支路并联指令。
在对整个梯形图程序进行转换时,首先生成nLine(行号)和nDepth 2个全局变量,然后从头开始进行转换,转换完1个梯级后。下1个梯级从*nLine(nLine=nLine+nDepth+1)行开始,直到梯形图文件结束为止。
3.2 指令表转换成梯形图
指令表转换成梯形图的过程就是根据PLC指令语句生成相应的梯形图元素链表的过程。因为梯形图和指令表程序是一一对应的关系,可按照语句对应生成相应的梯形图元素,利用在梯形图向语言表转换文件中已设计好的位图资源,建立标志符和位图之间的相应关系。转换时,将语句表以文件流的方式存入文本文件中,逐行分析,通过适当的算法处理,在视窗中画出对应的梯形图符号,直到文件结束。此外,在转换过程中,需要将程序划分为若干小节,每节对应梯形图中的1个梯级。在指令表中,梯级的划分可根据OUT指令来进行。串并联模块的划分可根据ANB和ORB指令进行。
在对PLC程序进行编译时,先将由PLC其他语言编写的程序转化为指令表后再进行处理。程序语言的文法通常包括I组终结符、I组非终结符、1个开始符号和1组产生式。
4.1 软PLC程序的文法设计
软PLC程序文法主要指PLC指令表语言的文法设计,PLC指令表语言与梯形图语言存在一一对应的关系。PLC的指令表程序由若干条语句组成,每条语句包括语句号、操作码和操作数。操作码是PLC指令系统中的指令代码,包括逻辑取、触点串联指令、触点并联指令指令、支路并联指令、支路串联指令和线圈驱动指令。操作数主要是PLC内部的继电器、定时器和计数器。下面是一段PLC指令表例程。
以三菱公司F1系列的逻辑指令为例来说明指令表文法的设计,并选取指令集中的一个子集来作为研究对象,该子集由逻辑取指令(LD,LDI)、触点串联指令(AND,ANI)、触点并联指令(OR,ORI)、支路并联连接指令(ORB)、支路串联连接指令(ANB)和线圈驱动指令(0UT)等基本指令组成
为了便于分析,用单个小写字母代替指令,即LD,LDI→a;AND,ANI→b;OR,ORI→c;ANB→d;ORB→e;0UT→f。指令表的文法可表示为1个四元式(Vt,VN,S,φ),其中,Vt是终结符号集,包括{a,b,e,d,e,f};VN是非终结符号集,包括{S,H,K,A,B,D,E};S是开始符号;φ中是产生式集(@代表空集)。因
此,指令表程序的文法G[S]为S→aHfS; S→AfS;S→@;H→EH;H→@;K→EK;K→@,A→DA;A→@;B→e;D→b;D→c;E→D;E→aKB。
由G[S]产生式,可推出空串的非终结符集合为{S,H,K,A}。
4.2 软PLC程序的语法分析
语法分析选用自**向下的LL(1)分析方法。为使用LL(1)分析方法,首先构造预测分析表,并先求取所有非终结符号的FIRST集和FELLOW集。
FIRST集:FIRST(S)={a,@,b,c};FIRST(H)={@,b,c,a};FIRST(K)={@,b,c,a};FIRST(A)={@,b,c};FIRST(B)={e,d};FIRST(D)={b,c};FIRST(E)={b,c,a}。
FOLLOW集:FOLLOW(S)={#};FOLLOW(H)= {f};FOLLOW(K)={e,d};FOLLOW(A)={f};
FOLLOW(B)={b,c,a,f,e,d};FOLLOW(D)={b,c,f,a,e,d};FOLLOW(E)={b,C,a,f,e,d}。
各产生式的SELECT集:SELECT(S→aHfS)={a};SELECT(S→AfS)={b,c,f};SELECT(S→@)={@,#};SELECT(H→EH)={b,c,a};SELECT(H→@)={@,f};SELECT(K→EK)={b,c,a};SELECT(K→@)={@,e,d};SELECT(A→DA)={b,c};SELECT(A→@)={@,f};SELECT(B→e)={e};SELECT(B→d)={d};SELECT(D→b)={b};SELECT(D→c)={c};SELECT(E→D)={b,c};SELECT(E→aKB)={a}
预测分析器的控制程序总是根据栈**符号和当前输入符号来决定预测分析器的动作,预测分析器的控制程序算法如下:
置指针ip指向输入符号串的*1个字符
while(1)
令X是栈**符号。a是ip所指的符号;
if(X是终结符号或$)
if X==a
pop(X),更新ip;
else
error();
else(X是非终结符号)
if M[X,a]:X—yly2?K
pop(X);
push(Y1Y2?K);
else
error();
else(X==$)
分析成功;
break;
其中,M[X,a]是指预测分析表中x行和a列相交处的产生式。
下面举例子来说明PLC程序语法分析程序的工作过程。
将指令用小写字母代替后,程序指令变为acababecdcf,将该字符串作为输入,
PLC指令表程序的分析是通过对指令表程序的解释而获得程序的逻辑,并以对话框形式演示程序的逻辑状态。在解释过程中,构造2个变量,1个用于存储分支块的逻辑值,另1个用于存储分支块语句的逻辑值。同时构造1个堆栈用来存储解释过程中的结果,分支块的值保存在堆栈中,整个分支块的值保存在1个临时变量中。
PLC指令表程序的解释过程为:1)当解释程序发现LD或LDI指令时,将临时变量值压入堆栈,临时变量赋值为1,临时变量与指令后面的元素进行逻辑与操作,将结果保存在临时变量中;2)当解释程序发现AND或ANI指令时,临时变量与指令后的元素进行与操作,将结果保存到临时变量中;3)当解释程序发现OR或ORI指令时,l临时变量与指令后的元素进行或操作,将结果保存到临时变量中;4)当解释程序发现ANB指令时,临时变量与栈**的值进行与操作,将结果保存到临时变量中,同时堆栈将栈**元素弹出;5)当解释程序发现ORB指令时,临时变量与栈**的值进行或操作,将结果保存到临时变量中,同时堆栈将栈**元素弹出;6)当解释程序发现OUT指令时,将临时变量与栈**的值进行与操作,将结果保存在临时变量中。同时清空堆栈。
程序中所包含的PLC元素会按类别以表格形式列出,元素的不同颜色表示元素的开关状态,红色代表高电平,白色代表低电平。当用鼠标改变输入元素的状态时。输出元素的状态会按照程序逻辑进行改变,改变的结果可由颜色的变化来显示。
软PLC程序的逻辑结果表明,开发的软PLC编译系统能实现软PLC梯形图与指令表程序的相互转换,完成软PLC程序的文法设计和语法分析,对软PLC程序的运行指令作出正确解释,并能按照PLC的工作原理运行,使PC机完成相应的控制功能。开发的软件系统能很容易地实现PLC程序的编辑和逻辑,系统结构简单,使用方法简便,为今后进~步研究和开发软PLC的下位机系统、不断完善软PLC系统的功能和实现其良好的控制特性奠定了基础。