6ES7211-1AE40-0XB0西门子紧凑型CPU
一、时间继电器:
TON 使能=1计数,计数到设定值时(一直计数到32767),定时器位=1。使能=0复位(定时器位=0)。
TOF 使能=1,定时器位=1,计数器复位(清零)。使能由1到0负跳变,计数器开始计数,到设定值时(停止计数),定时器位=0。如下图:
图1:使能=1时,TOF(T38)的触点动作图
图2:使能断开后,计数到设定值后,TOF(T38)的触点动作图(其中T38常开触点是在使能由1到0负跳变后计数器计时到设定值后变为0的)
TONR 使能=1,计数器开始计数,计数到设定值时,计数器位=1。使能断开,计数器停止计数,计数器位仍为1,使能位再为1时,计数器在原来的计数基础上计数。
以上三种计数器可以通过复位指令复位。
正交计数器 A相超前B相90度,增计数
B相超前A相90度,减计数
当要改变计数方向时(增计数或减计数),只要A相和B相的接线交换一下就可以了。
二、译码指令和编码指令:
译码指令和编码指令执行结果如图所示:
DECO是将VW2000的第十位置零(为十进制的1024),ENCO输入IN*低位为1的是第3位,把3写入VB10(二进制11)。
三、填表指令(ATT)
S7-200填表指令(ATT)的使能端(EN)必须使用一个上升沿或下降沿指令(即在下图的I0.1后加一个上升沿或下降沿),若单纯使用一个常开触点,就会出现以下错误:
这一点在编程手册中也没有说明,需要注意。其他的表格指令也同样。
四、数据转换指令
使用数据转换指令时,一定要注意数据的范围,数据范围大的转换为数据范围小的发注意不要超过范围。如下图所示为数据的大小及其范围。
(1)BCD码转化为整数(BCD_I)
关于什么是BCD码,请参看《关于BCD码》。
BCD码转化为整数,我是这样理解的:把BCD码的数值看成为十进制数,把BCD到整数的转化看成是十进制数到十六进制数的转化。如下图所示,BCD码为54,转化为整数后为36。
整数转化为BCD码(I_BCD)则正好看成是十六进制到十进制的转化。
(2)整数转化为双整数(I_DI)
此问题需要注意的是:整数转化为双整数后,符号位被扩展,因为整数的精度小于双整数的精度,转化后,双整数除了表示整数的数值所占的位外,其余空位用符号位填充。如整数45转化为双整数后,基二进制表示为:2#0000_0000_0000_0000_0000_0000_0010_1101,而整数-45转化为双整数后则为:2#1111_1111_1111_1111_1111_1111_1101_0011。
五、避免重复使用PLC输出线圈
基本逻辑指令中常开接点和常闭接点,作为使能的条件,在语法上和实际编程中都可以无限次的重复使用。
PLC输出线圈,作为驱动元件,在语法上是可以无限次的使用。但在实际编程中是不应该的,应该避免使用的。因为,在重复使用的输出线圈中只有程序中*后一个是有效的,其它都是无效的。输出线圈具有*后优先权。
如图1和2所示。
图1:输出线路未重复使用 图2:输出线路未重复使用
图1所示,输出线圈Q0.0是单一使用,表示I0.0和I0.1两个常开接点中任何一个闭合,输出线圈都得电输出。
图2所示,输出线圈Q0.0是重复使用,在网络1和网络2中重复使用两次,目的和图1所示一样,要求I0.0和I0.1两个常开接点中任何一个闭合,输出线圈得电输出。
需要肯定是图2所示的程序在语法上是完全正确的。Q0.0重复使用的输出线圈中,真正有效的是网络2,网络1是多余的、无效的。也就是说,I0.0无论是闭合还是断开,都对Q0.0不起作用,Q0.0是否得电是由I0.1决定的。
这是因为PLC在一个扫描周期中,PLC输出点的刷新是在程序执行完毕后执行的,在一个扫描周期中,I0.0闭合,I0.1断开,在PLC程序执行网络1时,输出点Q0.0映像存储器为1,在执行网络2时,输出点Q0.0映像存储器又变为0。程序执行完毕,PLC输出点才执行刷新,*终输出点Q0.0失电不输出。同理,在一个扫描周期中,I0.0断开,I0.1闭合,输出点Q0.0映像存储器*终为1,在PLC输出点执行刷新时,输出点得电输出。图2所示的程序中,对Q0.0起作用的只是I0.1。
在PLC编程时,重复使用数出线圈。在语法上是正确的,应该避免使用的。
六、合理组织编写梯形图的结构
在编写梯形图时,宜将串联的回路写在上方,并联的回路写在左边。如图所示:
采用右边的形式,可以减少PLC的扫描时间,可以让PLC拿更多的时间来处理输入、输出和通讯部分程序。这是因为,是梯形图,PLC*终还是把梯形图转化为指令语句来执行,而右边的梯形图转化为语句后,显然比左边的要简化的多,这样就可以减少PLC的扫描时间。在比较大的程序中这点儿尤其显得突出。
七、合理使用指令减少PLC扫描时间
PLC每种指令的执行时间是一定的,在编程时,一定要注意不要人为造成PLC的扫描时间加大。如下图所示:
当I0.0闭合时,网络1的执行时间是0.37μs+55μs=55.27μs,而网络2当I0.0未动作时,执行时间是0.37μs。当I0.0保持闭合的过程中,程序会反复执行网络1加法语句,会大大加长PLC的扫描时间。这时可以采用网络2的形式,仅在上升沿或下降沿时执行该加法语句,可以有降低PLC的扫描时间。
八、尽量避免形参不多次调用同一子程序
在程序中,多次调用同一个子程序,在语法方面没有什么错误,但我们要尽量避免这一做法,尤其是在带有形式参数时。下面通过一例来说明。如下图1所示,网络13和14都调用protection子程序,这时,网络14调用时protection子程序的运行状态如图2所示。我们注意到,网络14调用时的形参#protection的数值(1169,网络13调用该子程序时的参数值)并不是网络14调用protection子程序所要的数值(应是481)。这样,就会造成我们所不希望的结果。
:针对目前PLC编程环境存在的问题,设计一种基于IEC6113l-3标准的新型PLC编程开发环境,给出开发环境的模块构成,介绍各个模块实现时甩到的数据结构和算法,分析其中较难实现的梯形网语言向指令表语言翻译的算法思想和实现步骤。实验结果表明,该系统用户界面友好、操作简单、功能全面,可支持多种PLC语言开发,方便用户对PLC的开发和使用,具有广阔的应用前景。
关健词:可编程逻辑控制器;梯形图;指令表;IEC61 131—3标准
1概述
可编程逻辑控制器(Programmable LogicControl,PLC)是以微型计算机为核心的工控装置。目前,PLC功能要求不断增长,传统PLC编程方式的开发时闻和错误率都相对增加,对大型程序的纠错和维护也非常困难。多数公司的编程软件只针对自己的产品,产生了不同PLC程序可移植性、可复用性差,缺乏封装能力等一系列问题。
1993年国际电工委员会颁布IEC6113I标准,其中,第3部分对PLC编程进行规范,这一标准为工控软件的发展起到了举足轻蘑的推动作用”J。多种软件开发平台并存且没有针对组态软件设计约规范,使组态软件在设计上大相径庭,同一种组态功能实现时也各有侧重点。现阶段PLC编程软件普遍存在提供的编程语言较少、人机交互界面设计简单粗糙、功能少、缺乏整体的视觉效果容易使用户对组态工作产生混乱等问题。
本文通过对IEC61131-3标准的研究,设计一个基于PC的PLC统一编程环境。为编程人员提供一个将自己的要求转化成程序的友好平台,编程环境要求具有良好的可视化人机界面,程序开发简单、维护方便、系统运行稳定,具有智能的图形及文本编辑系统,提供使用符合标准的5种语言,并能实现图形语言至文本语言转换。
2 IEC61131—3的软件模型
IEC6113l·3软件模型在*上层把软件概括为。配置”,专指一个特定类型的控制系统,包括硬件装置、处理资源、I/0通道的存储地址和系统能力。在一个“配置”中可定义一个或多个“贽源”,反映控制器的物理结构,在程序和控制器的物理I/O通道之间提供一个接口,只有在装入“资源”后才能执行程序。在一个“资源”内可以定义一个或多个“任务”,配置后控制一组程序组织单元(ProgramOrganizationUnits,POU)周期执行或事件驱动执行。标准定义了5种编程语言,其中,图形语言有梯形图(LadderDiagram,LD)、顺序功能图(Sequential Function Chart,SFC)和功能块图(FunctionBlock Diagram,FBD),文本语言有指令表(Instruction List,IL)和结构化文本(StructuredText,ST)。
3编程环境体系结构设计
为满足EC61131-3各项要求,系统可划分为编辑模块、检查模块、翻译模块、监视模块、通信模块5个部分。
(1)编辑模块
包括图形及文本编辑环境,图形语言支持使用鼠标拖拽编辑,文本语言需要对用户的输入进行提示。
(2)检查模块
对文本语言程序进行基本的词法和语法错误检查,对图形语言程序进行图元组合错误检查,提示错误。
(3)翻译模块
图形语言不能被PLC识别,要转换成文本语言,以便调用编译器进行编译。
(4)监视模块
当程序在PLC中运行时反映其执行和参数变化情况,以便及时调整和维护。
(5)通信模块
负责PC与PLC硬件之间的数据通信,包括用户程序下载、操作命令和硬件配置参数、内存等的记取。除了这些主要功能模块外的其他基本功能可以内嵌到以上模块中。系统工作流程如图l所示。
4软件模块具体实现
4.1编辑模块
软件设计的第1阶段选用LD和IL作为编辑语言。
4.1.1 LD编辑模块
(1)LD对象类定义
LD采用逻辑元件和逻辑关系图表示程序。标准规定可采用的元件图符有电源轨线、连接元素、触点、线圈、功能和功能块等,可设计如图2所示的类图对LD对象进行封装。
(2)LD程序的存储
LD程序常用的存储结构有双向链表、邻接链表和十字链表等。为了对LD程序进行正确存储、显示并方便后续处理,除了需要存储图符的全部信息,还要正确表示图符间的拓扑关系。一个LD程序可看成是一个有向图,其中,图符可看作图的顶点,连接符可看成图的弧。在后续处理中,还经常需要使用各个顶点的入度和出度。双向链表无法清晰的表示出图的结构,邻接表在求出度、入度时较为复杂,采用十字链表存储LD程序。
4.1.2 IL编辑模块
IL类似于汇编语言,由一系列指令组成,指令包括操作符和操作数。为了支持IL编辑,可使用CEditView派生出CTextView类。CEditView已经具有文字编辑功能,支持多窗口操作并有文件预览功能,由此派生的ETextView能支持IL程序在编辑视窗中进行编辑。
4.2检查模块
4.2.1 LD检查模块
本模块主要是规范使用者的编程,给出出错信息引导用户做出修改。从软件的易用性考虑,不只在程序设计结束后进行检查,而是将检查模块分为实时和非实时2部分设计。
(1)实时检查
对编程过程中出现的明显错误弹出对话框提示,引导编程人员规范的编写程序,提高编程效率。
(2)tie实时检查
程序编辑完成后全面枪查,保证通过检查的LD程序是正确的,主要是检查元件参数错误、短路和断路错误、混合连接错误,下面给出检查的思路。
1)元件参数错误:在遍历元件链表时获取每个元件的参数,判断是否合法。
2)短路错误:如果网络(回路)中某个部分并联了几条支路,其中一条支路全由直线或者直线和空元件组成的,那么该部分其他支路被短路。
3)开路错误:按一定原则把行划分为若干小行,检查小行的开始、中间和结束元件是否合法。小行划分标准是:如果发现空元件则其前面所有元件为一小行;如果某元件的列号比上一个元件的列号大2及以上,则该元素前所有元素为一小行;元件链表的结束也是划分小行的标志。
4)检查混合连接错误:若网络中存在任何一部分(行数和列数都至少为3,并且行与行之间相互联系),这部分的行不能在任何一列处交汇到一个点,否则就发生了混合连接错误。
4.2.2 IL检查模块
指令表错误处理主要是对指令表文本进行词法和语法分析,对操作码和操作数有效性进行校验。
4.3翻译模块
目前国内多数PLC开发系统中采用的LD至IL翻译算法是将LD映射成AOV(Activity OnVertex)图,再采用拓扑排序对图进行遍历,从而实现转换。该方法通过相应的图符含义来获得LD中的逻辑关系,并不通用,且不适用于串、并联关系较复杂的程序。本文采用将LD映射成AOV图,再由AOV图建立二叉树,并对其进行后序遍历的方法,步骤如下:
(I)LD程序映射成AOV图AOV图用顶点表示活动,用弧动,开始之前完成。可以将LD中的图符抽象成顶点,图符之间的连接关系抽象成弧。映射时对LD程序进行一次从左到右,从上到下的扫描,统计其中图符和弧的数目,得到各图符的前驱节点、后继节点、入度和出度等信息,并把LD并连线抽象成虚节点。进行第2次扫描,建立AOV图的结构。
(2)AOV图转换成相应的二叉树基本思路是:入度为零的顶点设置为根节点,每个图符对应二叉树的一个叶子节点。如果图符的出度为l,则建立一个“与”节点;若图符的出度大干等于2,则建立一个“或”节点。
AOV图转换成二叉树算法流程如图3所示,其中,P1表示图符顶点指针;F1表示Pl当前指向图符的访问标志;Ⅳl表示尸l指向图符的入度;N2表示JDl指向图符的出度。
对图3的说明如下:
StepI创建与堆栈s1或堆栈舵。初始化P1、二叉树节点指针P2,将Fl清0。P1指向入度为0的节点。
Step2从S1中弹出“与”节点指针,并赋给Jp2。
Step3创建“与”节点,并赋给尸3。
Step4如果JD2左子树为空,则P3作为尸2的左子树,否则P3作为P2的右子树。
Step5 PI作为Jp3的左子树,挖指向P3对应的节点,Pl指向Jpl的第1个直接后继。
Step6创建2个“与”节点P3,P4,创建N2·1个“或”Step7如果P2左子树为空,则P3作为P2的左子树,否则P3作为P2的右子树。
Step7如果P2左子树为空,则P3作为P2的左子树,否则P3作为P2的右子树。
Step8P4作为P3左子树,PI作为P4左子树,P6作为P左子树,P7作为P6左子树,?,PN作为肌1左子树。P5~JP~压入舵,PI的直接后继压入眈。PI指向其第1个直接后继,P2指向PN对应的节点。
tep9从观中弹出2个对象指针,分别赋给P1,P2。
(3)对生成的二叉树进行后序遍历,访问每个节点时进行相应的处理,生成对应的指令表。
4.4在线监视模块
监视画面可以根据PLC程序的控制流程和中间变量,用直观的编程方式完成,并提供出错报警,以达到随时了解程序执行和参数变化情况的目的。模块由图形界面和实时数据库组成。
图形界面可以依照操作系统的图形标准,采用面向对象技术通过图形来反应参数变化情况,生成图形的数据驱动来源于数据采集过程中自动生成的数据表。在连接过程中,从数据表选择驱动数据源,*终生成图形目标应用系统供图形行环境运行时使用。实时数据库中应定义数据库的结构、数据连接、数据类型及相关的各种参数,其数据的主要来源为数据采集时生成的数据表。
4.5通信模块
PLC和Pc的通信通常通过Pc的串I:i以“命令.响应”的交互方式进行。设计时建一个能够实现串口通信的类,类中设计2个函数:ReadData,SendData,按照PLC通信格式建立起上位机和PLC的通信以后,即可完成所需功能。
4.6工程管理器
工程管理器对配置层进行管理。配置层是IEC61131-3软件模型中的*上层。对应于整个控制系统。工程管理器负责配置中各个部分的组织和联络,并要求能对系统中所有资源进行统一的管理。
工程管理器按照树形结构进行组织,并应具备如下功能:
(1)登记新创建的文件;
(2)从其他项目导入文件;
(3)显示所有已经存在的POU;
(4)更名或删除POU;
(5)显示整个项目的信息结构。
5软件测试
VS2005拥有完善的集成开发环境,包括可视化设计器、代码编辑器以及程序设计语言,为提高开发速度和程序执行效率,选用VS2005作为开发工具。系统主界面及翻译模块运行结果如图4所示。
通过实验表明:
(1)系统软件开发遵循IEC61131-3标准,用户界面友好、操作简单、功能全面。
(2)工程管理器反映了IEC61131-3软件模型的结构,使用户清晰地了解所进行组态工作的全貌。管理器能够以不同的树型视图来显示不同的工程部分,操作基于bbbbbbs标准。通过界面良好的工程管理器,用户能够对工程中的各种资源进行管理。
(3)用户可通过对编辑工具栏中LD组件的拖拽轻松完成LD程序编辑工作。可使用不同语言进行交叉编程,编程方式灵活。对程序编辑过程中出现的一般错误,软件正确进行了提示,避免不必要的错误,极大提高了程序开发的效率。
(4)系统正确高效地完成了LD向IL的转换,编译生成的可执行程序在PLC中正确运行。运行过程中各个参数的变化在监视界面中以图形方式正确显示,方便进行程序的修改和维护。
(5)软件正确进行了异常处理,运行稳定。
6 结束语
本文对IEC6113l-3标准进行介绍,给出基于IEC61131—3的PLC编程环境框架结构,对其中各个模块进行说明,给出主要的算法和数据结构。并针对较难实现的LD向IL转换的算法思想和实现步骤进行说明。实验证明该软件界面友好、编程方式方便灵活、易于维护,在一定程度上可以解决目前各种品牌PLC编程方法无法统一的问题,提高编程效率,减少培训、维护费用,具有广阔的应用前景。
该软件框架的设计思想为以后的开发打下较为坚实的基础,第l阶段只进行了初步的开发,要提供全部5种语言,全面兼容IEC6113l标准,还需要进行大量的工作。