PLC编程实用指南(第2版)
上QQ阅读APP看书,第一时间看更新

0.8 PLC的使用

关键词:系统配置、经验编程、算法编程

使用可编程序控制器,实际也就是使PLC能在系统自动化、网络化、信息化及智能化上有所应用。这里的关键是要做两个工作:

一是进行PLC系统配置;

二是进行PLC应用编程。

这涉及PLC使用的硬件与软件两大方面。

0.8.1 系统配置

PLC系统配置也就是PLC硬件系统的构成。一般讲,由PLC构成控制系统,如果不考虑传感器、执行机构等,就是若干模块或箱体及有关附件。而箱体或模块又各有其型号与规格,根据工艺要求,选哪些,怎么选,各选多少,怎么组合成系统,就是这里要讲的系统配置。

系统配置是对问题的综合,与对问题的分析不同,同样的题目,其答案可能是很多的。所以,系统配置的一个工作,就是要从多个答案中优选一个方案。

系统配置要遵守一些原则,要用科学的方法,按步骤进行。

(1)系统配置原则。主要有如下几点:

1)针对性原则。针对性原则就是要根据应用需要进行配置。要根据控制目的、规模及网络化、信息处理要求、确定PLC的配置类型、品牌及组件。做到按需配置,有的放矢。

2)完整性原则。完整性原则就是要考虑所配置的系统是否完整,不能“丢项”,该配的都得配齐。完整性在一开头就要注意。如果丢项,在安装或使用时再追加,将带来诸多麻烦:要另补充采购或订货,要追加预算,要修改工程设计,要延误工期等。

3)可靠性原则。可靠性原则就是要使所配置的系统能可靠工作。具体可从四个方面考虑:一是PLC自身产品质量;二是供货方的技术服务情况;三是重要场合下的可靠性要求;四要否冗余配置。

4)发展性原则。发展性原则就是进行系统配置时要留有发展的余地以及对PLC选型时应尽可能用新型号。这是因为PLC工作可靠,自然寿命较长,但它的技术发展很快,其技术寿命并不长。坚持发展原则所作的配置可避免,即使PLC没有用坏,但由于技术落后,而不得不淘汰。

5)继承性原则。俗语说,做事情要瞻前顾后。系统配置坚持发展性原则可以说是瞻前,而坚持继承性原则则是顾后。

顾后就是要考虑到曾经使用过PLC的历史及其情况。在作新的系统配置时,尽可能选用已用过厂商的产品,甚至于用已用过的机型。

因为PLC的外设可以共用,如编程器就可多次使用。如果新配置的系统的机型与原有的有继承关系,新系统就可不配编程器,不就节省了吗?

再就是一些编程工具软件,若按继承性原则配置,新系统也还可再用。

还有使用经验,若按继承性原则配置,所积累的宝贵经验也可派上用场。甚至有的程序模块还可移植。这对缩短编程时间,以至于正确地使用PLC都大有好处。

所以,在系统配置时,应坚持继承性原则。

应该讲,当今我国实行开放政策,一些企业引进不少PLC。但由于忽视继承性,致使有的厂商拥有PLC生产厂商及型号很杂,给使用、维护都带来不便,而且在经济上也不上算,是值得吸取的教训。

6)经济性原则。经济是一切活动的基础。进行系统配置当然要考虑经济。经济上是否合算,应作为是否采用PLC,要用什么样的PLC的重要评价标准。显然,进行系统配置,最后还应由效益作评价。

(2)系统配置类型。主要有:

1)基本配置。这种配置控制规模小,但所用的模块也少。对箱体式PLC,则仅用一个CPU箱体。CPU箱体含有电源、内装CPU板、I/O板及接线器、显示面板、内存块等,是一台完整的PLC,送入程序,通电后即可工作。

CPU箱体依CPU性能分成若干型号,并依I/O点数,在型号下又有若干规格。基本配置就是选择一种合适的CPU箱体,来满足实际的要求。自然PLC厂商箱体的型号及规格多,分布得越合适,也就越便于进行这种配置。

对模块式PLC,基本配置选择的项目要多些。有:

CPU模块:它确定了可进行控制的规模、工作速度、内存容量等。选得合适与否至关重要,是系统配置中首先要进行的。

内存模块:它可在CPU规定的范围选择,以满足存储用户程序的容量及其他性能要求。

电源模块:有的PLC,它是与CPU模块合二而一的,有的是分开的。但这两者选的原则都相同,都是依PLC用的工作电源种类、规格,和要否为I/O模块提供工作及信号电源,以及容量需要作选择。电源模块多与其他模块相配套的,型号与规格不多,容易选择。

I/O模块:依I/O点数确定模块规格及数量。I/O模块数量可多可少,但其最大数受CPU所能管理的基本配置的能力的限制。

底板或机架:基本配置仅用一个底板或机架,称这种配置简单,原因就在于此。但底板也有不同规格。所以,还要依I/O模块数作不同选择。有的PLC,如欧姆龙公司的CJ1机,无底板。那样的PLC就没有什么底板或机架可选择了。

2)扩展配置。箱体式PLC扩展配置是增加I/O箱体。I/O箱体有不同的型号和规格。可按所须增加的点数,选用相应的I/O箱体。

模块式PLC的扩展配置有两种:一为当地扩展,另一为远程扩展。

当地扩展配置:在基本配置的基础上,于当地增加I/O模块及相应底板或机架,这可使PLC的控制规模有较可观地扩大;

远程扩展配置;这种配置所增加的机架可远离当地,近的几百米,远的可达数千米。远程配置可简化系统配线,而且也可扩大控制规模。

扩展配置时应着重弄清两个问题:

①该型号PLC最大可能的扩展配置。显然,充分利用最大可能的扩展配置,可降低PLC单点费用,提高使用PLC的经济性。

②I/O地址的分配规律。显然,只有弄清了I/O地址是怎么分配的,才可能编写PLC程序。

3)特殊配置。这里的特殊配置是指增加特殊(有的称功能或智能模块)I/O模块的配置。特殊配置后的PLC可进行哪些方面的控制,与所配置的特殊单元紧密相关。目前,各PLC厂商已开发或正在开发越来越多的特殊单元,使PLC的控制能力越来越强。

较常见的特殊模块,若按功能划分,有:

高速计数单元:可计入与处理高频脉冲信号,从处理几十kHz,几百kHz的都有。如果与旋转编码器配合使用,可测量与处理转动或移动信号。

位置控制单元:可通过输出脉冲控制位置移动量及位置移动速度。有单坐标控制的,还有双坐标控制的,甚至于多坐标控制的。双坐标或多坐标的还可实现两坐标运动协调。这实际是数控技术通过PLC特殊单元予以实现。

模入、模出单元:可把传感器模拟量转换成数字量存于输入通道中,或把输出通道的内容转换成模拟量作为控制信号,可对一路信号作转换,也可对多路的,可多达8路,甚至更多,即一个单元可处理8路或更多的模拟量。有的既有模入又有模出……

温度检测控制单元:温度是工业中常见的模拟量。为检测与控制它,PLC厂商开发专门针对它的检测与控制的单元。实质上它也是模拟量,只是它做了更多的预处理工作,如可适用不同的温度传感器,可测的温度范围也可相应选择,用起来更方便。检测单元只能用于读温度值,并显示,也可用作处理,但要另编程序。而控制单元,可自成控制回路,无须编程,也无须PLC运行相关程序,即可实现温度控制。

回路控制单元:用于进行模拟量的回路控制。有的自身带模拟量输入、输出点。如上述温度控制单元一样,既能采集模拟量数据,又能进行数据计算、处理,进而产生控制输出,可完整地实现模拟量控制。而有的自身没有模拟量输入、输出点,只用于进行有关控制算法计算。使用它,虽然须与别的模拟量输入、输出单元配合,但它的控制计算能力很强,可完成几十、几百路的有关控制运算,使PLC实现很复杂模拟量控制。

其他特殊单元:如计算机单元,可把有关个人计算机的主板、外设做成PLC的单元,插在底板上,可直接与PLC通信。再如ASCII单元,也具有运算与通信功能,可协助PLC的CPU作数据处理等。

更特殊配置算是多CPU配置,即一个PLC系统或机架中可配置多个CPU单元。这多个CPU可以是不同功能的,有的还可以是同一功能的。这些CPU单元共享系统I/O总线,但各控制各的I/O模块或对象。同时,各CPU间又可方便地交换数据,进行控制协调。这样系统,将极大地提升PLC控制规模与功能,是目前大型PLC发展的新动向。

4)安全配置。是为了确保系统安全而进行的配置。可选用安全PLC,也可使用冗余配置。后者指的是除所需的模块之外,还附加有多余模块的配置。目的是提高系统的可靠性。能否进行冗余配置,可进行什么样的冗余配置,代表着一种PLC适应特殊需要的能力,是高性能PLC的一个体现。一般的PLC是不具备有这个性能的。

冗余配置的目的是提高整个系统的可靠性。冗余配置为何能提高可靠性?这是因为PLC是由各种模块组成的,而各模块都有其统计出的可靠度及失效率。在PLC非冗余配置时,任一模块出现故障,都会影响PLC工作。按若干独立事件构成的事件的概率计算原则,PLC的可靠度应为组成它的各模块可靠度的乘积。即

R=R1·R2·R3Rn

式中 R——PLC的可靠度;

R1Rn——各模块的可靠度。

如有10个模块组成,各模块的失效率(以规定寿命计)为万分之一,则其可靠度为

1-1/10000=9999/10000

这10个模块构成的系统的可靠度近似为

(9999/10000)10≈999/1000

其失效率为1-999/1000=1/1000

若为100个模块构成的系统,其失效率将为1/100。可知,系统越大,组成的模块越多,出现故障的几率也越大。

但若为冗余配置,情况就不同了。热备也好,表决系统也好,必须至少有两个模块出现故障系统才不能工作。这两个模块同时出现故障这种独立事件,构成系统出故障的合成事件,其概率关系也是乘,只是失效率的乘。同样以上例作讨论,若这100个模块均为热备,或三选一,则只有在两个相同的模块同时出现故障时,系统才失效。其故障率的计算可先分别算出各模块的失效率,再合成算PLC的可靠度。即

由于各模块为热备或三选一,两个同时失效,模块才失效。两个模块同时失效的几率为(同样以单模块失效率为万分之一计):

(1/10000)×(1/10000)=1/108

即亿分之一的几率。

再算PLC失效率的几率为

1-(9999999/108)100≈1/1000000

为百万分之一。确实是万无一失。

当然,实际上不会所有的模块都三取一或热备,所以失效率会比这个大。

5)连网配置。为提高控制性能,往往要把在地理上处于不同位置的PLC与PLC,或PLC与计算机,或PLC与其他控制装置或智能装置通过传送介质连接起来,实现通信,以构成功能更强、性能更好的控制系统。

目前PLC网络大体有三个层次:设备网,用以与底层的设备、智能传感器、智能执行机构通信,以实现分布控制;控制网,用以PLC与PLC间通信,已协调多PLC之间的控制;信息网,用以与管理层的计算机通信,以至于进互联网,以实现控制的信息化。

要不要组网,如何组网,选用什么样的通信模块,是在配置PLC时要考虑的重要侧面。连网是PLC技术发展中的活跃领域,内容非常丰富,并不断有新的技术及系统推出。

6)附加配置。附加配置是为PLC配备外部设备所作配置。目的是为PLC程序的编制、调试、存储,以及数据的显示、存储及打印提供条件。

附加配置就是按需要选用这些外设,以使所配置的PLC系统合乎设计要求。

(3)系统配置方法。系统配置方法与配置类型有关。如不考虑网络配置,可以用类比法、估算法、计算法及测试法。这四个方法不互相排斥,而是互相兼容与补充。为了正确地进行系统配置,这几个方法可能都要用到。

1)类比法。类比法也就是经验法。用自己的或别人的经验与所要配置的系统作类比。从类比中初步确定要选用什么厂商的PLC,用什么型号,用哪些模块等。

类比法虽不很准确,但由于有经验作借鉴,对一些较为简单的系统倒是一种简便的方法,既快又有把握。

当然,一些复杂的系统,由于共同性少一些,不大好类比。但类比也仍可作粗略参考,特别可用以确定用什么厂商的PLC,什么类型的PLC。

要注意的是,在类比时一定要考虑PLC的发展,应使用新的机型替代旧机型。

2)估算法。估算法主要用于算I/O点数,以粗略确定PLC的型别,用大型机、中型机、小型机还是微型机。因为机型与厂商有关,还与PLC的结构相联系,估算好了可较有把握地进行配置。

估算法首先算所需的I/O点数。I点数Ni

978-7-111-39745-8-Chapter01-20.jpg

式中 Ei——系统所使用的某类输入器件的总数,如用了5个按钮,则为5;

Pi——该类器件可能处于的工作状态,如按钮,一般处于按下与松开两种状态。再如多位开关,可处于多种状态;

I——输入器件类型总数。

O点数No

978-7-111-39745-8-Chapter01-21.jpg

式中 Ei——所使用的某类输出元件总数;如用了一台正、反转电动机即为1;

Pi——该类输出器件可能处于的工作状态,如电动机要求其正、反转则有三种状态,即正转、反转及停车;

I——输出器件的类型总数。

开关量总数N=Ni+No

另外,模拟量也要估算。有多少监视量就有多少路输入。有多少控制输出,就有多少路输出。比较好算。

估算出I/O点数及模拟量路数后,可依大、中、小型机划分的大致标准,估算要选用的PLC机型。

一般大、中、小机型间点数均有搭接,没有把握不妨都作考虑,再用计算法进一步确定。

3)计算法。它是估算的再精确一步。要确定用什么模块,用多少模块。一般要作四方面计算:

(a)模块数计算。确定了I/O点数,还要按I/O的物理要求,确定各用什么样的模块。

对输入点,要依输入信号电压区分,是交流的,还是直流的?信号间有什么隔离要求?……

进而确定选用多少种,各有多少输入点的模块。

最后,再依总数具体计算应采用多少种,各多少个模块。

对输出模块要考虑输出形式,是继电器,半导体,还是晶闸管?还有就是公共回路。一般点数多的模块,其公共回路就少;反之则多。选用公共回路多的模块便于电路配线,但要用的模块多。

选定了模块类型,再依I/O总数计算模块数。

模拟量也有相应的模块要选择。如有的是4路入,或8路入,有的是2路出,或1路出,有的还有入,还有出,等等。选了合适的模块之后,再根据总的路数计算模块数。

I/O模块数计算之后,再算要使用的机架槽位数,进而确定机架数。

(b)电源容量计算。必要时,PLC电源容量也要作计算。箱体式的PLC,电源容量一般为自动满足,可不考虑。只是在确定隔离变压器(市电电源经隔离变压器再加载到PLC,以减少电网对PLC的干扰)时,对变压器的容量要稍作计算。模块式的电源种类较多,要作相应计算,然后再选型。

(c)响应时间计算。一般信号响应时间与PLC的循环时间有关,而循环时间与PLC的程序量有关。要计算,不大容易。没有编好程序,怎么知道程序有多长?而且,同样长的程序,用的指令不同,循环时间也不相同。当然,计算也可能,只是得放在编程之后。

有的PLC厂商提供有经验公式:大体的关系是内存总量与要使用的点数有关,这既可用以确定选多大容量的内存,也可大体确定循环时间。算出循环时间,就可进一步计算响应时间了。

特殊输入量的响应时间更要分别计算。有的可查有关模块的特性。

(d)投入费用计算。在模块种类及数量确定后,一般还要依报价进行投入费用的计算。

如果配置的方案多,对每个方案的投入费用也都要计算。

费用计算精确有利于依经济性原则对系统进行配置。

4)测试法。系统配置时,一些重要的数据不仅要计算,有的还要进行实际测试。如循环时间,可把编完的程序,送入PLC进行实际测定。有的数据可由厂方提供,或委托厂方作测试。

类比、估算、计算及测试运用得好,可使所配置的系统建立在科学与经验的基础之上,将有助于使系统配置得更为完善。

(4)系统配置步骤。系统配置是问题的综合,与其他问题的综合一样,系统配置过程也是从粗到细一步步推进,要分步骤进行。一个配置完成后又可能再返回来,再逐步完善,直到从多个方案中挑选一个最为满意的方案为止。

一般讲,不考虑网络配置,其配置步骤为

1)用类比法,大致确定可选用的厂商产品及机型;确定时要遵循发展性及继承性原则。

2)用估算法,估算I/O点数及模拟量路数,并确定要选用的机型。

3)用计算法,依完整性原则计算所需的模块数。这里可能有多个方案,那就应计算出各个方案的结果。

4)再依可靠性原则,考虑必要的冷备份、热备份或冗余配置。若为一般系统,这个步骤可省略。

5)计算各个方案的投入费用,并依经济性原则选其中最优者。

6)必要时再进一步做性能计算或进行实物测试。再根据计算或测试结果,对原有的配置做修正。

0.8.2 程序设计

这是使用PLC的另一个重要问题。因为PLC程序只能由用户编制,厂商不提供。而PLC若没有程序,则什么事情也不能干。以下分别对程序设计步骤及程序设计方法分别予以介绍。

(1)程序设计步骤

仅就单机系统而言,程序设计的步骤大体是:

1)弄清工艺。系统配置要弄清工艺,按工艺要求进行。程序设计则更应如此。弄清工艺,首先要弄清使用PLC的目的,要用到PLC的哪些功能。其次,要弄清两方面情况:一为输入、输出部件的特性与分布,即系统的空间情况;另一为系统工艺过程,即系统的进程情况。

(a)空间情况。弄清各输入部件性能的性能、特点,并分配相应的输入点与其连接。分配时,既要考虑布线简单,还要避免信号受外界干扰;弄清各输出部件的性能、特点,分配相应的输出点与其接线;如可能,接输出部件的模块最好能与输入部件的模块能适当隔开,以避免输出信号对输入的干扰;此外,还要考虑在编程时,地址使用的方便。弄清了这些,才便于合理地对其分配I/O地址。

(b)进程情况。弄清被控对象的工作要求、工艺过程及各种关系;弄清其工艺过程,看它是怎么开始的?怎么展开的?怎么终止的?弄清输出与输入的对应关系;如果存在时序关系时,两者的时序是怎么对应的?弄清要采集、存储、传送哪些数据?弄清有哪些互锁、联锁关系?有哪些特殊要求?……弄清这些问题才能着手设计算法,也才能进一步进行程序设计。

2)配置与设定硬件。为了PLC能按要求工作,在使用PLC之前,要对PLC的硬件作必要的配置与设定。如配置什么CPU及其他模块。设定特殊模块的机号、PLC上电时工作模式(是运行、监控还是编程)等。有的厂商的PLC还可对PLC的内部器件(如要使用多少定时器、计数器等)进行分配或指定。

PLC出厂时,厂商多有其默认设定。但对较复杂的系统,用户必须有合乎自己情况的设定。一般说,硬件设定在开始编程之前是必须进行的。

3)分配I/O。分配I/O指的是,给每一I/O模块、每一输入、输出点,分配地址。这是编程所绝对必需的。

PLC I/O点在模块上或在箱体的地址是固定的,在模块或箱体上都有相应的地址标记。而模块与箱体的地址(通道号)是按一定规律分配的。只是不同厂商、不同型号的PLC,有不同的规律。常见的规律有固定分配、定位分配、顺序分配及设定分配。

固定分配是固定地分配地址。如欧姆龙公司的小型机就是固定分配,其主机的I/O地址与主机的点数有关。扩展箱体的I/O地址依远离CPU箱体,升幂依次递增。

定位分配是按模块所在的机架及其在机架上的位置分配其I/O地址。模块位置确定了,其I/O地址也就确定了。

顺序分配是按模块在PLC中位置顺序,依次升幂分配I/O地址。依模块点数的不同,有的占1个字(点数不足1个通道的,按1个字计算),有的占2个字,甚至更多。如欧姆龙公司的大型机就是这么编号的,如欧姆龙公司的CQM1机也是这么编号,只是它把I与O分开,分别按其顺序进行排列。

设定分配是,在指定的范围内,通过硬件或软件设定,分配模块I/O地址。如欧姆龙公司的特殊模块,其所用的通道地址就是靠指定机号后设定的。其CJ1机可设定机架地址。

由于当今编程软件的进步,一般都可用符号地址编程。这就有可能先用符号地址编程,编好后,再编辑符号与实际地址的对应关联。这么做时,编写程序可先做,而硬件设定、I/O分配后进行。但程序下载、调试前,这些工作都必须做好。

4)设计程序。首先是考虑程序的组织,可按功能,把程序先划分成若干模块(程序块)。分模块编程,然后再予以合成。按模块编程便于移植一些已用过的程序,而且也便于调试。

其次,分块设计算法。算法确定后,其思路可用框图或一些自然语言表达。算法对工艺进程的分析中形成,是编写程序的基础与准备。

最后,按模块选择编程语言,逐一编写指令。要一条条指令的编,若为梯形图编程,则应一个图形符号一个图形符号的画,最终要形成一个指令集,或完整的梯形图。

5)调试程序。编写PLC程序是很细致的工作,差错总是难免的。而任何一点差错,即使是一小点,都可能导致PLC工作出现故障。所以,编写程序后,还要进行调试,纠正种种差错。

调试程序可通过计算机仿真进行。多数公司现都有相应的仿真软件,可运行在这软件平台上对所编的程序进行仿真调试。

多数的程序调试是把程序送入PLC,在PLC试运行(输入、输出不接传感器及执行机构)时作调试。这也叫在线调试。

在线调试可使用简易编程器,先把程序送入PLC,然后分模块或分指令一步步调。不过这种调试现在已不多见。

在线调试也可使用计算机,由相应软件协助进行:先把在计算机用编程软件编程,再下载到PLC;然后使PLC运行,通过计算机画面或监控的数据,了解PLC运行情况,观察其是否与设计意图符合;不符合,则找出原因;再修改程序,剔除毛病;再试、再看、再找、再改。一直到合乎设计意图为止。

经在线调试的程序,还要在现场联机调试。只有经联机调试合乎要求的程序,才是合格的、可交付用户使用的程序。

6)存储程序。把程序录入计算机后,就要作存储。甚至开始编程时,编一部分就要存储一部分。随着程序调试通过及试运行过程的不断完善,还要不时地作存储。存储时,一般只留下后来的,删去过去的。程序不仅存于PLC的RAM中,也可存入磁盘或磁带中。

经试行后的程序有的可作定型。办法是把它固化,写入ROM存储器。

7)程序保护。可以用硬件,也可软件保护。

硬件:有的PLC用硬件开关设置程序保护。读写DIP开关ON保护,否则,不保护。

软件:有的用软件设定保护,如欧姆龙CPM机是DM6602字的0位,设为1,保护,0不保护。

8)程序加密。程序保护可保证程序不被删除或修改。但其他人可读它,重用它。为了保护知识产权,可对程序加密。

PLC程序加密的方法有:用指令加密;用编程软件加密。可全程序加密,也可局部加密。

9)程序加锁。除了程序保护、加密,还对程序可加锁。可做到,即使PLC程序正常运行,但不产生控制输出。加锁可用置位PLC的输出禁止位实现,也可自编一段小程序,使相应的输出禁止。

提示:程序保护,程序加密,程序加锁是不同概念,各有各的目的。可按要求全用或用其中的一种。

这里,只是对PLC单机系统编程步骤作一最简略的说明。至于详细的介绍将是本书的主要任务。以下各个章节,将对PLC编程的方方面面问题,逐一进行详细讨论。而网络系统编程也将在本书第6章有所讨论。

(2)程序设计方法

PLC编程方法很多。但归纳地讲,主要是经验编程与算法编程。

1)经验编程。是运用自己的或别人的经验进行编程。多数是设计前先选“样机”,并结合自己的情况,对“样机”逐一修改,直至适合自己的情况。“样机”多为与自己情况类似的一个或若干个成功的程序,也可为具有一些典型功能的标准程序。我们在工作过程中,可收集与积累这些“样机”,从而不断丰富自己的经验。

PLC编程,从“不懂”到“懂”,从“懂”到“会”,从“会”到“熟”,最后做到“熟能生巧”,关键还在于从实践积累经验。没有实践,没有经验的积累,怎么能进入“熟能生巧”的境地!

经验有别人的,也有自己的,都很重要。前者要靠细心学习,后者要靠用心积累。都要花一定的时间与必要的精力。

别人的经验有上了书的或登载在杂志上的。本书介绍的例子程序,有的是我细心学别人的,但多数是我自己的经验。所有的例子都经我测试过,都经实践证明是可行的。我想,别的书本或杂志上介绍的经验也会是这样的。所以,学习这样成功的经验是必要的。

别人的经验还有没有上书的或没有登载在杂志上的,或许还是你同事的经验,也很值得学习。这种经验离你很“近”,很易借鉴。

自己的经验则是最重要的。要在自己的实践中,积累自己的经验。同时,最好在学别人的经验时,也能亲自做些测试,能使自己也有类似的经历,进而把这些经验变成自己的。这也是自己经验的重要积累。

还有一些失败的经验,这往往是不会公开的,但这些经验也是要学习,也要积累。“失败是成功之母”嘛。

经验的积累要用自己的脑记,更要用电脑记。最好进行分类,建立一个自用的程序“库”,以便于随时引用。

经验还有待升华。升华有三个层次:

最低的层次如上述,可建立一些典型程序集(库),供今后再用。若程序较复杂,还可建一些功能块或子程序,以便今后引用。

其次,要总结出有效算法。得出一些规律性的处理问题的方法。

最高层次的升华是,把经验上升到理论的高度,为丰富PLC编程理论做贡献。我想,随着PLC使用的普及与提高,是会有越来越多、从经验中升华出来的、而又能用以指导实践的PLC的编程理论的。

经验积累、经验升华都是为应用。经验应用有三方面:

用作工程设计模板:设计新系统时,选用一个或几个与现有工程类似的、已取得成功的工程,作样板进行设计。这既可减轻设计的工作量,又增加设计的成功率。这也是信息可重用的一大好处。

用作编程参考:在无成功的工程可作样板时,在新设计的逻辑中,仍有相当一部分控制逻辑,可采用或借用已有典型逻辑,这也可减少设计的工作量,增加设计的成功率。

用作算法设计参考:在既无样板可参照,又无典型可采用时,还可运用过去的一些成功的算法。

经验是宝贵的,但是,经验,特别是个人经验,总是有限的。所以,经验的应用也还要与编程理论相结合。而本书所做的就是,结合个人积累的编程经验,做些编程理论及相关算法研究,为与读者经验的结合提供参考。

2)算法编程。是针对问题先设计解决问题的算法,再根据所设计的算法编程。如果说经验编程用的主要是感性知识,那算法编程主要用的则是理性知识。要弄通相关的编程理论。否则这个算法也不好设计。

(a)算法(Algorithm)概念。它原是数学计算的名词。在公元前200多年,欧几里德根据自然数的理论,在他的《几何原本》(Euclid′s Elements,第Ⅶ卷,命题i和ii)一书中,提出了求解两个自然数最大公因数的“辗转相除算法”,使得这个最大公因数的求解变得很容易了。这也说明算法对于解决问题的重要。

欧几里德的这个算法(Euclid′s Algorithm),如用表达式表达,则是

978-7-111-39745-8-Chapter01-22.jpg

978-7-111-39745-8-Chapter01-23.jpg

算法还可用框图表达。对上述算法如图0-20所示。该图中方块表示“运算”,菱形表示“判断”,连线及其箭头表示“联系与去向”。

算法也可用图表表达。表0-1所示为上述算法图表。该表列了5个步骤:第1步为求解开始,进行求“余数计算”。第2步为“判断”,根据判断结果分成2个走向,或求解结束,或继续求解。显然这个图表也可清晰地反映上述求解过程。

算法也可用文字表达。上例可做如下表达:当求解开始后,先是求yy被xx整除,并把余数存于zz中。然后判断zz是否为0?如等于0,则xx即为公因数,运算结束;如不等于0,则xx赋值给yy,zz赋值给xx,并重复开始的步骤。

显然,文字表达是不够精炼的,特别是求解的问题较复杂时,更难以让人理解。但也可使用比文字简单的一些文字符号,也称为伪代码表达。则也很简练。

978-7-111-39745-8-Chapter01-24.jpg

图0-20 求解公因数欧氏算法框图

表0-1 求公因数算法图表

978-7-111-39745-8-Chapter01-25.jpg

当然,求这个最大公因数还可想出很多其他算法。但是无论如何,如果没有算法,这个公因数是无法求得的。

那什么是算法?从上可知,算法是指解题的步骤。什么是好算法?就是步骤少,每一步的含义明确、运算简单。运用它能够从已知数求得未知的结果。

更一般地讲,一个有效的、好的数学算法,一般有5个特征,即要有输入(已知数)、输出(未知数),同时还要满足有穷性、确切性、可行性。

PLC主要用于控制,还可用于运算。当然,为了控制也要运算。所以,PLC的运算是很多的。特别是逻辑运算更多。PLC编程就是编写好的控制与运算程序,让PLC一步步去执行,以实现所要求的控制与运算。

显然,这里的程序也有输入、输出,也要有穷性、确切性、可行性。具有算法的五大特征。

为了让PLC进行上述求两个正整数的最大公因数计算,如果用算法编程,那就要用程序去实现欧几里德算法。

在本书一开头,就讲到,“入出信息变换、可靠物理实现,可以说是PLC实现控制的两个基本要点”。所以,在本质上讲,PLC只是输入到输出变换的工具。而输入到输出的变换是靠运行PLC程序实现的。所以,从广义上讲,PLC程序也可说成,用PLC指令表达的PLC输入到输出变换的步骤。

简而言之,对照数学算法,PLC的算法,则是用文字、公式、图形表达的、实现输入输出变换的、有限的、明确的及可实现的步骤。

可知,PLC算法与PLC程序之间所差的只是表达方法的不同。算法可以说成是程序的原型、雏形、思路、提纲,而程序则是算法的成型、具体化及实现。

所以,一般讲,设计程序前,要先设计算法。这正与写文章一样,在写之前,一般要写提纲、打腹稿,或构想思路。

图0-21所示为一个问题通过算法运用“computer”实现输入到输出的求解(转换)示意。当然,对PLC这里的“computer”即为“PLC”了。

可知,算法指的就是告诉“computer”或“PLC”的“一系列解决问题的清晰指令”,这些“指令”“能够对符合一定规范的输入,在有限的时间内获得所要求的输出”。据讲,在计算机出现前,这“computer”是泛指从事数学计算的人。现在计算机出现了,这里“computer”自然主要是计算机,而对本书讲就是PLC了。

978-7-111-39745-8-Chapter01-26.jpg

图0-21 计算机算法应用示意

对于PLC,算法编程可分为两个步骤:设计算法及实现算法。前者是为了探求解决问题的思路、方法或步骤;后者是为了运用PLC资源,编写PLC程序。

(b)算法设计。数学算法设计有各种策略,常用的有穷举搜索法、递归法、回溯法、贪心法、分治法等。PLC的算法设计与PLC要实现的功能有关,其策略不完全与数学算法相同。可使用的策略有:

从输入推算到输出:演绎法

从输出反推到输入:归纳法

化整为零:规模化大为小

动态规划:步骤从多到少

模块化设计:从顶到底,由上至下

……

对PLC算法则与PLC的应用有关。用于顺序控制则有顺序控制算法,用于模拟量控制,则有模拟量控制算法等。

算法设计是为了解决问题。解决问题是对问题的综合,不像问题的分析,一个问题一般只有一个答案,而它可能有很多解决方案。

所以,算法设计除了寻找可能解决问题算法,还有个算法优化问题。即怎样用最少的步骤,最简的操作,最好的效果去实现算法要达到的目的。

为此,需要对算法进行分析或评价。其主要依据是,算法的时间复杂度,空间复杂度。前者,主要看步骤多少及执行各步骤的时间。后者,主要看算法预计要使用的硬件资源。显然,所用的步骤越少,时间越短,使用的硬件资源越少,这个算法就越好。

PLC的算法必须针对实际,解决实际问题。因此,设计算法,必须了解实际情况(所谓有关工艺)以及有关处理实际问题的理论,否则算法设计也无从入手。试设想,上述求公因数的算法,如算术都不懂,何以有此算法?

本书以后各章的内容,主要也就是研究实际应用的种种算法,并且还要探讨怎样用目前国内最常用的PLC去实现这些算法。

(c)算法实现。对PLC编程,有了算法,还要编成PLC的程序,PLC才能执行这个算法。这也就是算法实现。它涉及问题有,指令选用及资源利用。

a)指令选用。这与PLC编程语言的选择、编程软件或编程工具的使用及具体用什么厂商的PLC,以及什么样的PLC密切相关。

至于具体选用什么指令,应做到先用、多用高效率、执行时间短的指令。多用子程序、跳转、步进指令等。以使所编的程序具备比较简练,运行时间短,程序的可读性好等优点。

b)资源利用。涉及I/O分配及内部器件,如定时器、计数器、存储器的运用。I/O分配除了考虑实现算法的方便,还要考虑硬件接线,及防止输入信号受干扰。

一般讲,PLC的内部器件是足够多的,但也要运用得当,要有规律性,便于理解、便于查找、便于更换等。

提示:算法的实现也是问题的综合。同样的算法,实现它的程序可以很多。所以,对程序评价,除了评价它的算法,还要评价算法实现。