最近看到很多帖子提出指令向导的使用问题,为此想表达一些个人看法。
本人98年开始编写S7-200的程序,使用MicroWin2.0。之前我主要是从事模拟电路和系统的研发,从来没有用过PLC。况且S7-200刚出来不久,用的人不多,所有的文字资料就是一本原版的手册。
我在西门子的官方网站找到并下载了百多个范例(全英文的),仔细研读,编写一个个试验程序,理解各种指令的功能和特点,同时发现和纠正了范例中的一些错误。就这样用了三个月的时间编写出了一套带模拟量输入输出、PID、PTO、HSC和NETR/W这些功能的控制程序,而且没有使用任何一个指令向导(当时的指令向导远不及现在丰富)。遗憾的是,99年后,西门子的网站删除了这些范例。我个人认为西门子干了一件傻事,对初学者很不利,也影响了产品的普及。
在以后的工作中,为了偷懒,我曾经尝试过使用指令向导。结果发现懒没有偷成,反而带来不少麻烦。因为指令向导需要占用大量的寄存器空间,且不够灵活。向导程序一旦生成,模块中的一些参数就不能随意修改,这在调试和优化程序的时侯有手脚被束缚的感觉。为此,我还是一如既往的使用指令编程,而不用向导。就象自助游而不跟旅行社一样。
当然我偶尔也会用一下向导,那是为了学习和研究。一旦弄清了,还是回到原来的编程方法。比如我用TD200的指令向导,就是为了让MicroWin生成一个数据块(因为自己写这个数据块花费时间不值得),然后修改数据块,实现我所需要的程序功能。
我的体会是:为了编写好的程序,就不要靠在指令向导这棵树下。初学者最好的入门方法是学习手册及附录中的范例,并不断试验,在实践中理解指令。另外要特别研究SM特殊寄存器的各种使用方法。这并非说指令向导一无是处。对于一些公用的、实时性不强,且较为复杂的功能如“数据记录”,使用向导可以带来很多方便。而对于PID、PTO/PWM、HCS等使用频繁、有直接指令可用的程序,还是应该自己编写;这样程序会更简洁有效。
以上盖我个人的体会,是与不是,请仁者见仁、智者见智罢。
----------------------------------
第一次在论坛发表主题,不曾想引起热烈讨论。颇感受宠若惊。兴致所至,再抛一砖。
1、关于标准化和模块化:
这是工程师的毕生追求。和早年的单板、单片机相比,PLC的编程使用的已经是非常模块化的指令。正如从分立元件到大规模集成电路一般。这要拜前辈工程师所赐。西门子不断地推出指令向导(包括软硬件的升级)也应该是基于这方面的考虑,为使用者提供方便。
我们可以比较一下22X版和21X版,可以发现增加了很多功能指令,特别是比较、转换和数学运算指令。我在将原先21X版的程序移植到22X版时,在保持原有程序构架的基础上,利用22X版提供的新指令对原程序作了大量修改。这些修改实际上就是对模块(原有程序)的升级,并且可以深入到模块的内部。
指令向导确实提供了一套标准化和模块化的程序,使用者不仅方便,而且可以得到更可靠、更安全的程序代码。但是我们不得不面临着一个很现实的问题,PLC的使用对象一般都有较高的实时性要求。这就引出了下一个论题-
2、关于编程效率:
对程序效率的极致追求,并不是中国工程师独有的特色。任何设备设施,功能越多,效率越低,故障概率越高。
我是搞生物技术的,成天和进口设备打交道,也和很多国外的工程师交流过。他们对设备之简洁的追求无与伦比。简洁而非简单!工业设备和实验室设备的最大区别在于工业设备的功能专一性和可靠性,操作的简便性和安全性。许多看上去复杂的外围设施(包括软件)都是为简便和安全理念服务的。这就是我们所体会到的进口设备(软件)设计的规范,或者说更人性化。编一套程序就可以应付某个方案的多种配置,也是基于某型设备的用户多样化,降低软件开发成本。这不仅要由硬件的标准化和模块化做保证,同时要对多样化的用户要求做深入细致的分析,而且是对使用经验的不断积累。
我使用的两套设备出自同一家公司,外形也很像,但是功能完全不同。我研究过,两者的主板完全相同;但是要变换功能,必须更换程序。尽管软件的基本平台是相同的,但是关键的功能不一样,并不能通过HMI的选择变换成另外的程序-因为设备的功能是单一的。而且设备的设计者并不希望看到用户的“特别操作”带来不必要的后果。
国外的程序包含了很多“无用的模块”,实际上是编程者长期的经验积累,是为了以后编程的方便。但是我们仔细分析一下,为什么说是“无用的模块”,说明该项功能在实际使用中肯定不会去调用。这本身就是程序效率的体现。更何况我们做的是控制系统。我们的对象大多是有针对性的、有实时性要求的,不是VB编程软件,对通用性的要求可以降到最低。即使是老外编的程序,在一个特定的功能下,也是追求程序效率的。这就引出了下一个论题-
3、关于指令的深究:
为了提高程序效率,要求程序要简洁明了。精益求精是一个从业者对自己职业目的的追求。如果仅仅是应付某个项目,当然是越简单越好;最好能直接照搬别人的东西。但这不是一个研发工程师的追求。我做个很多项目,包括国家攻关、863课题等。S7-200仅仅是其中很小的一部分。在我周围,像我这样自己编程序的已是凤毛麟角,但我始终没有放弃。这不仅是因为我对每个项目的技术要求了如指掌,更主要的是兴趣使然。每次编程,我都会觉得在技术和思维方式上有新的提高,这源于每次都对指令的深究。这个过程如同游戏,最终的欢呼只是短暂的,但是过程留给我的乐趣却能受用一生。我总是要求我的学生对每一个实验过程做深入的思考,无论结果成功一或失败,都会有所得。这是对职业的忠诚。作为工程师,只要你对这个职业由衷的感兴趣,就一定要亲自动手深入下去,才能更深的体会成功的快感。如果你对这个职业抱着不得已而为之的态度,自当别论。
S7-200的任何程序,对于别有用心的人总是瞒不住的。每个编程员都会在程序中打上自己的烙印。只要源程序的注释做得地道,程序员之间的交接不会存在任何问题。这不是孔乙己的四个“回”字。
多了些题外话,请各位见谅!
-------------------------------------------------------------------
时间真快,一晃已经过了一年了。一年前发的这个帖子和诸位的辩论被我作为话题引入了课堂,同样得到了强烈的反响。辩论的过程总是很吸引人,也能引起我们思考。