从浏览窗口看可视化自动化编程软件的发展
发布时间:2005-11-22 作者:华镕,施耐德电气(中国)投资有限公司
随着操作系统从DOS 至Windows的转移,应用程序的开发平台也由纯文本编程迁移到可视化编程,如常见的Visual Basic、Visual C++ 等,已成为当今的主流编程方式。同样,自动化的编程软件也随之移到了Windows下。因为支持多窗口、图形化,用户可以在多个任务之间进行切换,方便了程序的开发和调试,得到了广大自动化工作人员的喜爱。
本文试通过可视化软件的重要特征:浏览窗口来叙述新一代自动化编程软件的变化和发展。
与Visual Basic 类似,在可视化软件的屏幕左侧,有个被称之为浏览器(browser)或导航器(Navigator)的窗口,如下图1所示:

浏览器是可视化编程软件的核心,具有非常重要的作用。其外形有点像Windows中的资源管理器,由一系列的树状单元构成,使得用户能够方便地管理系统的资源。下面就各个相关条目做进一步探讨。
配置
1. 模块库:一个自动化控制系统,会有一系列硬件模块与之配套,一般有几十种到上百种模块,为了便于查找使用,把它们分成以下几类:
◆离散量输入,离散量输出;
◆模拟量输入,模拟量输出;
◆ 计数器,运动控制;
◆网络通讯;
◆专用模块:中断锁存,故障顺序记录等 。
因为现在全是可视化编程,模块的表示都用图形或图标,通过鼠标在机架上简单地点击和拖拽,即可完成配置过程。
2. 模块属性:原来模块的功能比较简单,开关量基本不用设置,模拟量则通过DIP开关,来改变量程。现在的模块的属性,通常用软件对它进行配置。
开关量的输入可选择输入的形式:是二进制码,还是BCD码;模拟量输入可选择输入类型:电流、电压、热电偶、热电阻,量程范围:4~20mA、1~5V、±10V、±5V等,精度选择:10位、12位、16位等,标度变换:变换值转工程量;对于开关量输出和模拟量输出则有更高的要求:即CPU或通讯发生故障时,模块的输出能保持安全值,如保持上个扫描周期的值,或跳至系统要求的安全值,这也是由用户事先通过软件来设定的,这个功能对整个系统的安全至关重要。
中断、通讯、计数模块的配置较为复杂,需要结合具体的应用来选择相应的配置;运动控制模块的功能最为复杂,过去通常使用两个到三个软件才能完成:一个负责配置,一个负责编程,一个负责调试,而现在有些厂商已经把它们集成到编程软件中了。
3. I/O 架构:企业中的很多工艺流程并非集中式的,而是分布式的。例如钢铁、石化等企业,地理覆盖面积达十几个平方公里,所以对自动化系统的要求也不一样,我们可把它们归为以下几类:
◆ 本地I/O:控制器和控制点较为集中。
◆ 远程I/O:控制点较为分散,甚至分布在几百米到几公里的距离之外。
◆ 现场总线型I/O:采用Interbus、PROFIBUS DP、CAN、FF或以太网等协议的I/O系统。
4.配置的目的:就是让CPU知道I/O架构,哪个模块放于哪个机架的哪个位置,并为它们设定地址。
常用的有3种配置方法:
◆ 自动地址配置:把所有的机架按实际顺序放好,插上所有要使用的模块,接通电源,然后通过编程器或编程电缆进行操作,让CPU完成模块的自动识别和地址分配的任务。
这种配置方式的优点是:整个过程由CPU自己完成,不需人为干涉,地址的配置是连续的。缺点是:一旦系统需要变化时,地址需要重新配置,程序也要相应改变。
◆ 软件地址配置:整个的I/O架构和每个模块的位置、地址,都由编程人员设计,并通过人工手动完成配置,然后把配置文件下载到CPU中,之后,CPU通过把配置文件和实际插入模块的位置进行比较确认,如果准确无误,则系统可正常工作;如果与实际不符,则产生报警,系统指示出错。
这种配置方式的优点是:模块的物理位置与I/O地址完全分离,对于编程人员的编程更加方便,比如编制一个移位程序,虽然地址是连续的,而控制位置可以相隔很远。缺点是:对编程人员的要求较高。
◆ 固定地址配置:机架的每个槽位都有固定的I/O地址,所以配置时,只需要机架的架号不要重复即可,机架地址由机架内的DIP开关或扩展模块上的DIP开关设置的。然后上电,再进行模块的属性配置,就完成了整个系统的配置。
这种配置方式克服了自动配置和软件配置的不足,所以得到了很多厂商的认同,是使用较多的配置方式。
程序
1.IEC 标准:众所周知,IEC1131(现称为IEC61131)是自动化控制器的世界标准,第一次官方发布的时间为:1993年3月,后续的工作仍在进行。第三部分定义了编程语言的参考标准,目前有五种编程语言列入其中,分别为:SFC:顺序流程图;FBD:功能块图;LD:梯形图;ST:结构化文本;IL:指令表。这个标准得到了几乎所有的自动化厂商的支持。
IEC为什么要定义这样一个标准呢?答案是:为了统一自动化控制器的编程格式,减少由于硬件平台的变化,而给用户带来要重新学习一种新的编程语言的困惑。
我们经常把IEC标准比喻成汽车标准。我们只要学会开一种汽车,理论上讲就可以开其他车型。
那我们能否写一次程序,就终生在不同的平台上运行呢?答案是:人们一直在做这方面的努力,而且已经取得了可喜的成果。比如在IT业,Java语言的发明就实现了这个梦想,Java程序可以在不同的操作系统上运行,但前提是你必须有支持这种操作系统的Java虚拟机(JVM),正是它屏蔽程序和操作系统,使得你的程序“到处”运行。如果现在有支持Java编程的自动化控制器,那么你的程序就可以在其上面运行了,而不管它是什么品牌。
但现在的情况还没有达到这种理想状态,各家品牌的控制器只支持自己编程软件,所以用户在使用时,不同的品牌,要学习不同的编程语言,使用户无所适从。为此,IEC推出的参考标准,虽然不能做到与Java般的“神似”,但可以做到“形似”,至少从外观上,用户的感觉非常相似,这也使用户有了信心。程序的移植也就相对简单。
当然IEC标准只是一个阶段性措施,但并不妨碍我们追求理想的目标:一次编程,随处运行!
2.段的概念:早期的自动化控制器,尤其是小规模的控制器,通常就有一个程序,使用一种编程语言,从头至尾完成一个控制项目。随着输入、输出量的规模增大和工艺流程的复杂,就有了段的概念。
引入段的原因是采用了把复杂问题简单化的原则,把一个复杂问题分解若干个简单问题就容易得到解决;段也好比为一本书中的一个章节,更有了结构化编程的韵味;对编程者来说,每段的功能更加清晰、明确;对于阅读者而言,每段的内容更加容易理解;对于维护人员来说,区段的维护更加简短,容易操作;当然,分段的应用程序也更加便于管理。
引入段的另一个原因,是为了更好地支持IEC编程。在一个大项目中,可以有很多人参与开发应用程序,不同的段由不同的人来编程,每个人可以使用自己喜欢的语言来编制,比如:工艺人员喜欢使用SFC;仪表人员喜欢使用FBD;电气人员喜欢使用LD;而计算机人员喜欢使用ST;并行完成各自的应用段,最后再把他们连在一起联调。如果不分段,就无法实现上述功能。所以从某种意义上说,分段意味着提高效率。
3.主程序:通常是指按一般情况,由CPU按循环或周期方式所执行的主要程序段,主程序可以由一个或多个段构成,且可以使用不同的IEC语言来编制,用户可以按自己的偏好,来选择自己喜欢的语言。
4.事件中断程序:企业对自动化设备的要求,除了可靠性之外,就是实时性了。为了满足实时的功能,很多厂家开发了各种专用模块,如:事件顺序记录、运动控制、反射、高速计数模块等。考虑成本因素,也采用软、硬结合的办法,如使用快速输入模块+事件中断程序,来解决离散量的上升沿或下降沿触发要完成的任务,还有些任务的触发来自于模拟量超限、计数器到达设定值等信号。
5.时间中断程序:作为一种特殊事件—时间,也可以用于触发中断任务,这种定时任务有别于定时器触发的任务,定时器通常在主程序中执行,延时时间通常比扫描时间长;而时间中断任务独立于扫描周期,定时时间可以比扫描周期短,例如:2ms;一旦到时,因为它比主程序的执行优先级别高,所以优先执行。应用中经常有这样的要求:每隔某个固定周期,对某些输入、输出进行读写操作,这时使用时间中断是再合适不过的了。
6.辅助程序:自动化项目中,除了有快速类的任务外,还有一类较慢处理的任务,例如:温度的变化通常比较慢,故对他的处理也无需每个周期都要进行,所以可把这类任务放在辅助程序中,设置较长的执行周期,比如:300ms等。这样就优化了整个程序,该快的快,该慢的慢,使整个程序有条不紊的运行。
综上所述,通过应用浏览器,所看到的应用程序部分为:

变量
1.地址:早期的自动化控制系统都由厂商把系统资源定义好,通过用户手册提供给用户,供他们编程组态,反映到用户的程序中,就是所谓的地址。地址是编程或组态的对象和基础,如:输入、输出离散量和模拟量,中间寄存器、保持寄存器、数据寄存器等,都有各自的物理地址,和输入、输出的相关的地址以及输入输出的模块相映射。地址的表示方式通常为数字或字母+数字的格式,如:100001,HR000等。
上述的地址有个不足,就是在编程前要做一张地址对照表,即:什么输入、输出量对应什么地址,如:按钮PB1=100001,继电器R1=000001;同样中间的位和字,也要有相应的说明,才能明白中间的运算过程。所以,程序编写和程序阅读都比较费劲,因为要通过人脑不断进行地址的翻译,如:看到地址要转换到现场的对应设备,而数字地址本身也感觉枯燥、生硬和难记,有点像不叫人名而叫身份证号码,非常别扭。为了改进面对的问题,于是就提出了下面的办法。
2.变量:如果为每个地址都配置一个变量名,我们的编程就简单很多,直接使用变量,而不用关心具体的物理位置。所以说变量屏蔽了地址,使得程序员更关注于应用,而少关注于系统。
在执行项目时,除了中间变量外,输入、输出量都会对应现场的物理设备,如:行程开关、光电开关、接近开关、继电器、电磁阀、指示灯等,通常现场的接线图或设计图会有相应的名字给它们,我们就可以使用这些名字用作自动化系统的变量名,这样一来,就统一了整个系统的名称,为今后的系统集成和协同,建立了基础。同时也为程序的读写、调试、维护带来了方便。
3.非定位型变量:前面所述,因为引入了变量,使程序读写大为方便,尤其是输入、输出量,也因为和现场设备名一一对应,自动化系统的透明度更高了。但从另一个角度来看,中间变量只作为中间运算的结果,既不输入,也不输出,占用一个地址似乎有些浪费,而有些系统去访问物理地址还要花费较长的时间。是否有这样的变量,它只有变量名,而无地址呢?答案是:有的,它被称之为“非定位型”变量,其特点是:没有具体的物理地址,它的位置由系统去安排。我们需要它,就定义它;要使用它,就用名称去调用它。我们不需要知道它的位置,也不用关心它的位置。
非定位型变量还有一个好处:用它编制的用户导出功能块或应用程序段,在程序的导入和导出时非常方便,因为没有地址的映射问题。
4.数据类型:初级阶段的自动化控制器,因为数据类型单一,如早期的PLC,仅有二进制“位”:也称“布尔量”和16个二进制位合成的“字”:也称“寄存器”两种,所以实现比较复杂的数学运算就很困难,甚至不可能。有时感觉:同为“计算机”,控制器的运算功能还不及一般的计算器!为了克服这个短处,首先要解决数据类型的问题。目前,大多数控制器都会支持多种数据类型,例如:
◆ 模拟量输入,模拟量输出;
◆ 布尔量,字节,字;
◆ 整数,双字整数,非符号整数,非符号双字整数;
◆ 实数(也称浮点数);
◆ 多维数组等。
因为数据类型的增加,数据的表示范围大大增加,加上运算功能块的增加,就使得控制器的计算功能大大加强。现在,一些较复杂的计算:诸如三角函数、指数对数等都不在话下。
5.用户定义数据类型:上述的数据类型都有厂商来指定,覆盖面虽宽,但不一定满足客户的所有需求。例如:用户通过网络传输10个开关量、6个模拟量、3个实数,按一般编程,要使用3条指令完成;但如果用户事先把上述三种类型变量打包,定义成一个新的变量,取个新名字,那么就使用一条指令即可完成。这种变量类型就是“用户定义数据类型”。它是专为用户设计的、混合型多维变量类型,大大方便了用户的使用。

变量的定义由“变量编辑器”来完成,可由用户在编程的任何时间进行。
功能指令(也称功能块)
当今的自动化控制系统的功能都十分强大,CPU的处理速度快,存储器的容量大,指令功能也十分丰富。一般低端的控制器能执行几十种到上百种的功能指令,高端的控制器能有几百种、甚至上千种的功能指令。
1.功能指令库:指令可以按其功能进行分类,也称为家族,常用的类别有:基本指令;扩展指令;专用指令;通讯指令;诊断指令;系统指令等。
除了系统给与的功能指令外,更加开放的厂商还为高级用户提供了功能指令的开发接口,允许用户使用如:C/ C++等高级语言开发自己的专用功能块,经过编译后,可以成为系统中的特殊功能指令,和一般的功能指令同样使用。它的优点是能够满足用户的特殊要求,同时因为这种功能指令是经过编译的,别人无法知道程序代码,保护了编程者的知识产权。
2.用户导出功能块:此功能块指的是由用户使用系统的功能块而创建的、完成某种特定功能的功能块,比如专为电动机正反转、温度调节回路等开发的功能块。这种功能块是对一段程序进行封装,构成类似于半导体行业的集成电路:被称之为ASIC(Application-Specific Integrated Circuit:特殊应用集成电路),完成一种如:通讯、调谐、功放等功能。
我们知道:通过集成电路完成功能的可靠性,要比分立元件构成的电路高得多。因此,现今的通讯设备、家电产品和计算机都无一例外的采用集成电路。同样的概念,我们也可以把它引入软件编程,用户导出功能块就是“软件集成电路”。它的引入无疑会提高应用软件的质量,加快编程、调试和维护的过程。所以,一经推出,就得到用户的热烈欢迎。
用户导出功能块的另一个好处是:可以反复使用,就像常用的集成电路,既可以用于通讯产品,又可以用于家电产品;这种复用性,使得导出功能块可以用在不同的自动化项目当中。通过施耐德电气对用户的调查:80%的应用程序可以再次使用。因此,这种比例对用户,尤其系统集成商具有重要意义,因为后面的自动化项目可以分享前面项目所建立的成果。其实,软件复用也是目前各软件公司所采用的信息共享方法之一。
综合这两节的内容,应用浏览器的窗口为:

调试
1.变量调试表:此表用于与自动化控制器在线连接时,针对调试段建立的变量和地址动态表格,通过它可以对程序段中变量的变化,进行观察和调试,可以使用置位、复位和数据设置对变量进行操作,判断程序的逻辑对错,调整程序的结构和指令功能,直至程序的完全调通,功能的完全实现。
2.操作员界面:作为自动化行业的工程人员,最希望实现的梦想之一,就是把自动化系统的编程软件与监控软件合二为一,因为这就解决了编程软件中的变量数据库和监控软件中的标签数据库的统一问题。由于历史原因,两种软件通常分别由两个厂商提供,硬件厂商提供编程软件,软件厂商提供监控软件,如较著名的有:FIX、INTOUCH、CITECT等。因为厂家不同,所以对地址、变量和数据类型的理解不一样,造成两个数据库完全隔离。最终,麻烦的是用户,最惨的要进行两次的数据库手动输入,不光花时间,还容易出错,效率低下。
后来,硬件厂商提供了地址和变量的ASCII文档导出,而监控软件的厂商支持ASCII文档的导入,用户的情况得到了很大改善,同样由于所遵循的标准不同,并不能保证所有导入、导出的文本完全一致,百分之百的兼容。但如果编程软件和监控软件由一个厂商提供的话,就不会出现这种问题,可以保证数据类型的一致性,这也就是很多自动化大腕厂商,同时能够提供两种软件的原因。
我们这里提到的操作员界面指的是:嵌入到编程软件中的人机界面,它提供了基本的监控软件功能,如:通过系统图形库和其他软件的图形导入,可绘制各种工艺流程、机械设备的动态画面,对应用数据进行各种方式的显示,如数字表、模拟表、指示灯、棒状图、趋势图等,以及通过旋转电位器、推拉电位器、分线器、输入窗口等输入调试数据,还可以进行报警信息的显示和确认等;高级用户还可以使用OLE技术,把应用数据导入到EXCEL的表格中,完成日志报表的显示和打印。实际上,对于中小型的自动化项目,它的功能完全可以取代传统的监控软件,为企业节约大量资金。
3.功能组件:我们前面见到的浏览窗口多为系统的结构化视图,通过它,可对系统提供的所有资源一览无遗,方便用户的使用和管理。但它也有个缺陷,就是不太适于面向应用的调试维护,也不适于以工艺流程为对象的程序导入和导出。
为了解决上述问题,厂商提出了功能化视图的概念,即把现有的结构化视图,按工艺流程转换为功能化视图,它由一系列功能组件构成,每个功能组件都有一个工艺过程名称,其内部都有3个与工艺过程相关的应用程序段构成:应用控制程序段、应用变量调试表和应用操作员界面。如图4所示:

从结构化编程的角度看,功能组件完成了:基本功能块→ 用户导出功能块 →程序段 →功能组件的封装过程,如图5所示。每次集成都提高了程序的可读性和可靠性,也方便了用户对应用程序的导入和导出,增强了应用程序的复用性,因此也就提高了应用程序开发的生产率。

图5
4.模拟器:早期的程序调试,都要先在家,把程序下载到真实的控制器中进行,通常还要外接开关量输入和模拟量输入,用于模拟现场的传感器,按工艺的顺序流程,完成应用程序的调试。最后才拿到现场进行最终联调。
这里说的模拟器指的是:由于PC功能的日益强大,厂商为用户方便,开发了在PC上运行的“软件控制器”,也就是用纯软件实现的“仿真控制器”,它的作用就是利用PC的强大功能,模拟硬件控制器的解算控制功能,使用户在没有硬件控制器的情况下,或者硬件资源比较欠缺的情况下,完成应用程序的功能调试。
一方面,用户可以边编程,边调试,加快了编程调试的过程;另一方面,模拟器是一个独立运行的软件,甚至可以在网络上运行,除了编程软件可以通过它来调试外,监控软件也可以使用它来调试!
另外,模拟器对于初学者也是一个好消息,因为不用硬件,也可以学编程,调程序,岂不乐哉!
诊断
诊断应该是从项目的开始,到产品生命周期的结束,一直要做的一件事。理论上讲:一个产品不出错是相对的。怕的不是出问题,而是找不到出问题的原因,系统的诊断功能就是为了帮助用户尽快地找出问题所在,然后尽快解决问题。诊断的方法也从全手动作业,朝着智能化、自动化的方向发展。


从硬件方面,诊断的精度已经到了“位”,即二进制的bit。现在的开关量都有三个位:一个位表示现行输出的当前值,一个位表示上周扫描的历史值,再一个位表示其物理状态的诊断值。一旦发生意外,损坏了该物理位,诊断位会置“1”,通知系统。同样每个模块也有自己的诊断位,围绕该模块的信息,都能进行诊断,比如:信号断线,电源故障,数值超标等,系统会给出相关信息,立刻就能知道问题所在。
从软件方面,系统提供的诊断位都可以编入程序,产生声光报警,甚至发出电子邮件或短信信息,告知用户;即使没有编程,也可以通过硬件的诊断页面,用鼠标双击出错位,软件会自动进入与该点相关的程序段,跟踪由它所带来的影响。
系统也为用户提供了诊断功能块,可以用它们为重要的点,进行监测。与一般诊断位的区别是:用功能块完成的程序,一旦发生故障,会蹦出一个专为报警使用的报警窗口,它会更详细的给出故障的信息:故障地点,出现的时间,消失的时间,说明信息,是否得到确认等。
现在的系统还可以通过多种途径,寻找到同一个错误源:通过编程软件;通过监控软件;通过人机界面;通过模块的指示灯;通过Web的诊断网页。
因此,合理使用系统所给予的各种诊断资源,细致部署项目中需要的诊断功能,提出每种故障出现后的解决方案,是每个项目要考虑的重要议题。只有这样,才可以把所有监控因素纳入我们的监控范围之内,一旦出现不测,我们就会立刻发现,马上采取应对措施,以最快的速度将其排除。
归档
自动化控制项目完成后,通常有一个技术文件的交接过程,算是一个过程的了解。如:集成商把文件交给最终用户,项目部门把文件交给设备部门或维护部门等。
早先的技术文档较为简单,一般给用户两种拷贝:一称硬拷贝,就是使用打印机为用户打印的程序清单,再加上一些手写的说明;二称软拷贝,就是把应用程序用磁带或磁盘录下来,交给用户。
当今的技术文件可是今非昔比,强大的文档功能已经集成到了编程软件之中,完成后就是一本完整的项目说明书。用户拿到后,会感觉到集成商的工作非常的“专业”。
实例

图6
施耐德电气推出的新一代自动化编程软件Unity Pro是下一代编程软件的代表,它凝聚了施耐德多年的工程实践经验,可以满足用户的各种功能需求,从设计、配置、编程、调试、诊断、维护到归档各个环节,为用户提供了强有力的工具,使用户把精力集中于工艺流程的控制,而可以忘却自动化控制器,节省大量的人力、物力和财力。