这是使用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的编程理论的。
经验积累、经验升华都是为应用。经验应用有三方面:
用作工程设计模板:设计新系统时,选用一个或几个与现有工程类似的、已取得成功的工程,作样板进行设计。这既可减轻设计的工作量,又增加设计的成功率。这也是信息可重用的一大好处。
用作编程参考:在无成功的工程可作样板时,在新设计的逻辑中,仍有相当一部分控制逻辑,可采用或借用已有典型逻辑,这也可减少设计的工作量,增加设计的成功率。(www.daowen.com)
用作算法设计参考:在既无样板可参照,又无典型可采用时,还可运用过去的一些成功的算法。
经验是宝贵的,但是,经验,特别是个人经验,总是有限的。所以,经验的应用也还要与编程理论相结合。而本书所做的就是,结合个人积累的编程经验,做些编程理论及相关算法研究,为与读者经验的结合提供参考。
2)算法编程。是针对问题先设计解决问题的算法,再根据所设计的算法编程。如果说经验编程用的主要是感性知识,那算法编程主要用的则是理性知识。要弄通相关的编程理论。否则这个算法也不好设计。
(a)算法(Algorithm)概念。它原是数学计算的名词。在公元前200多年,欧几里德根据自然数的理论,在他的《几何原本》(Euclid′s Elements,第Ⅶ卷,命题i和ii)一书中,提出了求解两个自然数最大公因数的“辗转相除算法”,使得这个最大公因数的求解变得很容易了。这也说明算法对于解决问题的重要。
欧几里德的这个算法(Euclid′s Algorithm),如用表达式表达,则是
算法还可用框图表达。对上述算法如图0-20所示。该图中方块表示“运算”,菱形表示“判断”,连线及其箭头表示“联系与去向”。
算法也可用图表表达。表0-1所示为上述算法图表。该表列了5个步骤:第1步为求解开始,进行求“余数计算”。第2步为“判断”,根据判断结果分成2个走向,或求解结束,或继续求解。显然这个图表也可清晰地反映上述求解过程。
算法也可用文字表达。上例可做如下表达:当求解开始后,先是求yy被xx整除,并把余数存于zz中。然后判断zz是否为0?如等于0,则xx即为公因数,运算结束;如不等于0,则xx赋值给yy,zz赋值给xx,并重复开始的步骤。
显然,文字表达是不够精炼的,特别是求解的问题较复杂时,更难以让人理解。但也可使用比文字简单的一些文字符号,也称为伪代码表达。则也很简练。
图0-20 求解公因数欧氏算法框图
表0-1 求公因数算法图表
当然,求这个最大公因数还可想出很多其他算法。但是无论如何,如果没有算法,这个公因数是无法求得的。
那什么是算法?从上可知,算法是指解题的步骤。什么是好算法?就是步骤少,每一步的含义明确、运算简单。运用它能够从已知数求得未知的结果。
更一般地讲,一个有效的、好的数学算法,一般有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了。
图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的内部器件是足够多的,但也要运用得当,要有规律性,便于理解、便于查找、便于更换等。
提示:算法的实现也是问题的综合。同样的算法,实现它的程序可以很多。所以,对程序评价,除了评价它的算法,还要评价算法实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。