
1.3.4 计算机编程基础
1.计算机
1946年第一台电子计算机ENIAC(Electronic Numerical Integrator And Calculator)诞生,计算机的理论构架主要由三部分组成。
(1)计算机硬件
包括运算器、存储器、控制器、输入和输出设备等,如图1-51所示。

图1-51 计算机硬件组成
● 运算器。进行算术和逻辑运算的部件。
● 控制器。控制和协调各部件自动、连续和协调工作。
● 存储器。保存程序和数据信息。
● 输入设备。从外界将数据、命令输入到存储器。如鼠标、键盘、移动硬盘及光盘等。
● 输出设备。将计算机处理结果显示或打印。如显示器、打印机、声卡和网络接口装置等。
● 计算机内部数据。采用二进制描述。
● 程序和数据。存放在计算机的存储器中。
(2)计算机软件
包括系统软件和应用软件。计算机指令是可被计算机识别和执行的二进制代码,它包括操作码和操作数,操作码指明要计算机完成的操作,操作数是被操作对象的地址或内容。
计算机工作过程是执行程序的过程。即将程序和数据存入存储器,启动程序后,计算机自动根据编写的程序次序,取出指令、分析指令及执行指令,并重复上述过程,控制机器各部件协同工作,完成程序规定的任务。
2.可编程序控制器
(1)概述
可编程序控制器(Programmable Logic Controller,PLC)是一种专门为在工业环境下应用而设计的数字运算操作的电子装置。它采用可以编制程序的存储器,用来在其内部存储执行逻辑运算、顺序运算、计时、计数和算术运算等操作的指令,并能通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。PLC及其有关的外围设备都应按照易于与工业控制系统形成一个整体,易于扩展其功能的原则而设计。
PLC是专用于工业生产过程的计算机。因此,具有更高可靠性和安全性,易于操作和实现复杂的工业控制。
1993年3月由国际电工委员会(International Electro-technical Commission,IEC)正式颁布PLC的国际标准IEC 1131(前面添加6后作为国际标准的编号,即成为IEC 61131)第一版。IEC 61131标准将信息技术领域的先进思想和技术(例如,软件工程、结构化编程、模块化编程、面向对象的思想及网络通信技术等)引入工业控制领域,弥补或克服了传统PLC、DCS等控制系统的弱点(例如,开放性差、兼容性差、应用软件可维护性差以及可再用性差等)。它的影响已经超越可编程控制器的界限,并成为DCS、PLC控制、运动控制及SCADA等编程系统的事实标准。
成立于1992年的PLCopen是一个致力于编程语言标准化的非营利性国际化组织,其总部设在荷兰。PLCopen组织下设6个技术委员会(Technical Committee,TC)。
TC1:致力于标准的制订。主要工作包括对IEC 61131-3标准的勘误和修改、与IEC的合作和开发以及对标准版本的修订等。IEC 61131-3第三版已于2013年颁布。
TC2:致力于功能块库的定义和协调功能块的调用。已经完成运动控制规范的第一部分到第六部分的规范制订工作。
TC3:致力于认证工作。该委员会制订一致性测试的定义和进行测试。编程系统一致性测试包括对不同编程语言的三种不同等级的测试。它们是基本级(Base Level,BL)、符合级(Conformity Level,CL)及可重复使用级(Reusability Level,RL)。
TC4:致力于通信。包括通信界面、与附加软件的接口、应用交换格式以及与Profibus和CAN等现场总线的映象等。
TC5:致力于安全的研究。它支持安全编程技术,集中于安全相关系统的功能安全性研究,包括IEC标准的使用指南、安全运行的基础以及与功能块的结合等。
TC6:致力于XML(Extended Markup Language)语言的研究。它规定IEC 61131-3各种编程语言的XML格式,包括对图形信息的表示、与其他开发工具的界面及功能块库分布等,它使编程环境成为开放系统环境。
IEC 61131-3标准第3版还完善了功能和结构等概念。主要性能改善有:显式数据类型;命名值的类型;基本数据类型;引用,带引用的函数和操作;验证;ANY_BIT的部分存取;可变长度的数组;初始值赋值;隐式和显式数据类型的转换规则;没有函数返回值的函数调用;数值、按位数据等的类型转换函数;持续时间函数及日期和时刻函数的析解函数;类,包括方法、接口等;面向对象的功能块,包括方法、接口等;命名空间;结构文本编程语言中的CONTINUE等;梯形图编程语言中的比较触点(类型和过载),及附录A语言元素格式规范等。
(2)编程语言
根据IEC 61131-3的规定,PLC编程语言分为文本类编程语言和图形类编程语言。公用语言是顺序功能表图编程语言。
标准编程语言具有下列特点:
● 编程语言的多样性。标准编程语言具有易操作、编程灵活、多种编程语言的融合等特点,可实现程序优化。
● 编程语言的兼容性。标准编程语言能够适用于可编程控制器,分散控制系统、现场总线控制系统、数据采集和监视系统以及运动控制系统等。软件模型适应各种不同行业、不同规模及不同结构的工业应用。
● 编程语言的标准化和开放性。编程语言的标准化使PLC系统成为开放系统。任何一个制造商的产品,如果符合标准编程语言,就能够使用该编程语言进行编程,并能够获得同样的执行结果。编程语言的标准化切断了软件与硬件的依赖关系。
● 编程语言的可读性。编程语言定义变量的数据类型,采用数据结构的机制,不同的数据类型可在程序的不同部分传送,类似于在同一实体内的传送。不同程序组织单元之间传送的复杂信息,也可像传送单一变量一样。这样使程序的可读性提高,易操作性增强。
● 编程语言的易操作性和安全性。它保留了传统的电气逻辑图、成熟工控软件及软逻辑PLC等计算机编程语言的优点,使程序出错控制在最小,并提供出错代码,提高其安全性。采用封装技术,使用户只需要连接有关接口,极大方便了用户的应用。
● 编程语言对硬件的非依赖性。编程语言对实际编程系统硬件的依赖性是程序能否移植的关键。标准提供了有效机制,使程序移植对系统硬件最大限度地实现非依赖。
(3)文本类编程语言
文本类编程语言有指令表编程语言(Instruction List,IL)和结构化文本编程语言(Structured Text,ST)。指令表编程语言是类似于汇编语言的一种编程语言。与传统PLC的指令表编程语言比较,IEC 61131-3标准的指令表编程语言更为简单,其原因是采用了修正符、函数和功能块,一些原来用指令执行实现的操作可通过修正符、函数和功能块的调用方便地实现。
IEC 61131-3标准的指令表编程语言对传统指令表编程语言进行了总结,取长补短,采用函数和功能块,使用数据类型的超载属性等,使编程语言更简单灵活,指令更精简。其指令表编程语言特点如下:
● 采用函数和功能块调用,使原有指令集简化。例如,移位指令、算术运算指令和位串类指令等都可以用标准提供的函数直接实现。定时器和计数器指令也可用标准提供的定时器和计数器功能块的调用实现。
● 数据类型的过载属性使运算变得方便。传统PLC指令对不同数据类型的运算要用不同的指令,IEC 61131-3标准采用相同指令实现。此外,数据类型的过载属性简化了数据类型转换指令等。
● 采用圆括号、边沿检测属性等方法,简化指令集。例如,标准提供圆括号,使程序块可以在圆括号内部先执行,从而简化指令。标准用边沿检测属性实现微分指令等,从而简化指令。
● 采用按数据类型分类方法存储数据,使数据存储不会出现错误。增设时间类型文字和数据类型,使定时器定时设定信号的输入变得简单。
● 标准第三版增加方法的调用,扩展了面向对象的应用领域。
结构化文本编程语言是高层编程语言。它用高度压缩的方式提供大量抽象语句来描述复杂控制系统的功能。具有下列特点:
● 编程语言采用高度压缩化的表达形式,因此,程序紧凑,结构清楚。
● 强有力的控制命令流的结构。例如,选择语句、迭代循环语句等控制命令的执行。
● 程序结构清晰,便于编程人员和操作人员的思想沟通。
● 采用高级程序设计语言,可完成较复杂的控制运算,例如,递推运算等。
● 执行效率较低。源程序要编译为机器语言才能执行,因此编译时间长,执行速度慢。
● 对编程人员的技能要求较高,需要有一定的高级编程语言知识和编程技巧。
结构化文本编程语言中的语句主要有4种类型,即赋值语句、函数和功能块控制语句、选择语句和循环语句。
(4)图形类编程语言
标准规定两种图形类编程语言。梯形图(Ladder Diagram,LD)编程语言用一系列梯级组成梯形图,表示工业控制逻辑系统中各变量之间的关系。功能块图(Function Block Diagram,FBD)编程语言用一系列功能块的连接表示程序组织单元的本体部分。
梯形图编程语言使用标准化图形符号表示程序执行时各元素状态的传递过程。这些图形符号类似于继电器梯形逻辑图的梯级表示的形式描述各组成元素。梯形图编程语言是历史最久远的一种编程语言。梯形图采用的图形元素有电源轨线、连接元素、触点、线圈、函数和功能块等。
标准规定梯形图编程语言支持函数、方法和功能块的调用,用函数、方法和功能块的实例名作为其在项目中的唯一识别。
梯形图程序采用网络结构。梯级是梯形图网络结构的最小单位。一个梯级包含输入指令和输出指令。梯形图程序执行时,从最上层梯级开始执行,从左到右确定各图形元素的状态,并确定其右侧连接元素的状态,逐个向右执行,操作执行的结果由执行控制元素输出,直到右电源轨线。然后,进行下一个梯级的执行过程。
当梯级中有分支出现时,同样依据从上到下、从左到右的执行顺序分析各图形元素的状态,对垂直连接元素根据上述有关规则确定其右侧连接元素的状态,从而逐个从左向右、从上向下执行求值过程。
为了使控制梯形图的执行按非常规的执行过程进行,可采用执行控制的有关图形元素。例如,用跳转和跳转返回等图形符号表示跳转的目标、跳转的返回及跳转的条件等。调用函数和功能块时,如果上游函数或功能块输入是其下游函数或功能块的输出,则可采用反馈变量和反馈路径实现。
功能块图编程语言源于信号处理领域。功能块图编程语言的基本图形元素是函数、方法和功能块。
功能块图编程语言中,函数、方法、功能块、执行控制元素、连接元素和连接线组成网络。其中,函数、方法和功能块用矩形框图形符号表示。连接元素的图形符号是水平或垂直的连接线。连接线用于将函数、方法或功能块的输入和输出连接起来,也用于将变量与函数、方法或功能块的输入、输出连接起来。
(5)顺序功能表图
标准中的顺序功能表图(Sequence Function Chart,SFC)是作为编程语言的公用元素定义的。它是采用文字叙述和图形符号相结合的方法描述顺序控制系统的过程、功能和特性的一种编程方法。它既可作为文本类编程语言,也可作为图形类编程语言,但通常将它归为图形类编程语言。因此,通常认为IEC 61131-3有三种图形类编程语言。
顺序功能表图编程语言的三要素是步、转换和有向连线。
一个过程循环分解成若干个清晰的连续的阶段,称为步(Step)。一个步可以是动作的开始、持续或结束。一个过程循环分解的步越多,过程的描述也越精确。步与步之间由转换(Transition)分隔。当两步之间的转换条件得到满足时,转换得以实现,即上一步的活动结束而下一步的活动开始,因此,不会出现步的重叠。
当步处于活动状态时,该步称为活动步。与活动步相连接的命令或动作被执行。当步处于非活动状态时,该步称为非活动步。从网络角度看,活动步是取得令牌(Token)的步,它可以执行相应的命令或动作。非活动步是未取得令牌的步,它不能执行相应的命令或动作。用一个带步名的矩形框表示步。
控制过程开始阶段的活动步与初始状态相对应,称为“初始步”,它表征施控系统的初始动作。每个SFC网络都有一个初始步,整个网络从初始步开始进行演变,用带步编号的双线矩形框表示初始步。
转换表示从一个或多个前级步沿有向连线变换到后级步所依据的控制条件。通过有向连线,转换与有关步的图形符号相连。每个转换有一个相对应的转换条件。转换的图形符号是垂直于有向连线的水平线。
如果通过有向连线连接到转换符号的所有前级步都是活动步,该转换称为“使能转换”,否则该转换称为“非使能转换”。
如果转换是使能转换,同时该转换相对应的转换条件满足,则该转换称为“实现转换”或“触发”(Firing)。因此,实现转换需要两个条件:①该转换是使能转换;②相对应的转换条件满足,即转换条件为真。
实现转换产生两个结果:①与该转换相连的所有前级步成为非活动步,即转换的清除;②与该转换相连的所有后级步成为活动步。转换的实现使过程得以进展。
步之间的进展按有向连线(Arc)规定的路线进行。有向连线应仅将步连接到转换或将转换连接到步。有向连线图形符号是水平或垂直的直线。通常,连接到步的有向连线表示为连接到步顶部的垂直线。从步引出的有向连线表示为连接到步底部的垂直线。
步、转换和有向连线之间的关系描述:步经有向连线连接到转换,转换经有向连线连接到步。
命令或动作用动作控制功能块描述,它与步关联,可以是一个布尔变量、IL语言的一个指令集、ST语言的一个语句集、LD语言中的一个梯级集、FBD语言的一个网络集或SFC。
动作的控制用动作限定符来表示,动作限定符定义不同输入和输出之间的关系。动作控制功能块不仅包括一个动作名还包括动作执行条件等。
步的演变(进展)从初始步开始。与步连接的动作控制功能块只有在步是活动步时才被执行,动作的执行根据动作控制功能块的输出Q确定,当Q为1时,这些动作被执行;为0时,这些动作不被执行。
在动作的执行过程中,对后续转换进行求值,当转换条件满足时,发生转换的实现,并实现步的进展,从而使步根据SFC图的程序不断演变(进展)。当该转换的所有前级步都是活动步时该转换是使能转换。当使能转换的转换条件为真时,发生转换的实现,从而实现步的进展。实现转换使连接到该转换的前级步成为非活动步,并使所有连接该转换的后续步成为活动步。