这是一个20年前发生在我身上的故事,这些事情改变了我对我所从事的PLC自动化领域的看法,之后我决定进入(当时迅速发展的)IT网络领域。
我拥有电子工程学位,并且已经做了十多年的网络管理员。我原本打算进入自动化行业,但20世纪90年代末的我所遇到的事情改变了我对这个行业的看法。这里提供的信息是为了讲述当时发生的事件,如果你考虑进入PLC编程领域,这篇文章所提供的信息可能会对你有所帮助。但在此之前请考虑到,经济环境会随时间变化,我曾经所遇到的问题可能并不适用于现如今你在这个领域的情况。
最初我是在软件编程行业开始工作的,作为程序员工作了大约一年半。当我完成学业时,20世纪90年代初的经济衰退终于开始消退,我的大多数前同学都已经找到了工作,我也一样。我的第一个雇主提供的条件并不是最好的,但我认为在这份工作所获得的经验对我未来就业非常有利。所以当大多数前同学在一年内都离开了这个条件不是很好的领域,去寻找更好的机会时,我却认为我在PLC自动化行业会更有发展,因为PLC编程是我在论文中做过的内容,而且我认为这会更容易一些。但事实证明这是一个错误。
我找到了一份新工作,作为PLC程序员。一开始,我接触了两个较小的项目,首先是对一个新落地的西门子S7系统进行增补,然后是一个全新的西门子S5系统。一个月后,我与一位资深自动化工程师一起,在一个大项目中装配了一个S5程序。这个PLC的说明书是由另一家负责实施物理基础设施(管道、装配、容器)的工程公司通过分包提供的。我没有被告知这个项目或与这家外部工程公司的任何其他项目的合同细节。他们每隔三四天就会给我们寄来一大包信封,里面装满了纸张,上面写满了需要控制的条件和执行器的状态,所有这些都是以有限状态机状态的列表形式写下来的。
PLC程序的结构非常简单:它包含十几个需要逐步执行的顺序程序。这些顺序程序中,每次只允许执行一个,并且每个步骤都有自己的步骤编号。西门子S5中有一种编程块,称为SB(Step Block,或最初称为Schritt Baustein),但在这个项目中并没有使用这种编程方式。相反,采用了一种自定义的编程方案,即为每个步骤都指定了一个完整的FB(Function Block)。每个步骤或FB都包含3个网络:一个网络用于根据下一个步骤的条件将顺序程序跳转到下一步,一个网络用于通过Set-bit将执行器设置为高电平,还有一个网络用于通过Reset-bit将执行器复位。一个小的中央步进控制FB用于跳转到正确的步骤,它基本上所做的就是通过“BMW 200, SPA FB 0”指令,使用加载在ACCU1中的步骤编号跳转到正确的步骤FB。当通过下一个步骤的条件请求跳转到下一步时,当前步骤FB中的执行器会使用Reset-bit进行复位,步骤计数器会增加,然后在同一个PLC扫描周期内,下一个步骤的FB会被Set-bit调用,以确保输出中未更改的值不会切换其执行器。一个顺序程序可能包含10个步骤(即10个FB)到20个步骤(即20个FB),大约有15个顺序程序,每个步骤/FB中大约有70个执行器需要设置或复位。对这些进行简单计算,结果显示大约有15×15×70
=约16000个执行器需要编程到约220个FB中。所有步骤切换的条件以及设置 与/或 复位执行器的条件都提供在成捆的纸张上,这些纸张用订书钉装订在一起,我必须将这些执行器的所有条件列表复制到FB中。
在编程了2个月后,我们发现提供的说明书中存在大量冗余,这些冗余是我们无法预见的,因为每3到4天才交付一个顺序程序,而且我们花了大约1.5个月的时间才推断出这些冗余在整个PLC程序中都存在,因此重写将使之前的工作全部无效。我们在所有步骤中都有那些没有更新但被重复的执行器。除此之外,实际上我们还发现,一个顺序程序中的单个步骤与另一个顺序程序中的其他步骤非常相似。这些程序只是彼此的变体。所有这些步骤几乎都是相同的,如果我们事先知道这一点,整个PLC程序可以实施得更小。虽然在过程中我们实施了一些捷径,但更多是事后才想到的。
我必须使用实际的S5 AWL代码进行所有编程。外部项目工程公司已经完成了所有步骤的布局以及输入、输出和条件的分配决策。我不需要做任何输入,只是枯燥地复制了+1000页文本上提供的无数条件和执行器的列表。这项极其无聊的工作花了3.5到4个月的时间才完成,其中包括了SCADA屏幕的开发。
现在,你们中的一些人可能会想,“谁还会用这种方式工作?为什么外部项目工程公司不雇用自己的PLC工程师?”这个问题我也曾有过:我唯一能给出的合理解释是,外部项目工程公司没有资源提供公司所需的全天候24×7支持,因此将支持外包给了我们,而且我们必须以一种非常工具化的方式来实现这些程序,以便能够在不考虑实际程序具体细节的情况下进行故障排除。这并不是他们告诉我的原因,他们告诉我他们这样工作的原因是,当公司发出需要工程师的支持请求时,支持工程师不需要花时间去理解PLC程序。而在我申请这份工作时,并没有人提前告诉我这种工作方式。
当所有编程代码的输入完成后,部门负责人和高级PLC工程师将在工厂现场部署PLC程序。我被指定为一个规模较小但类似的安装项目部署一个类似的程序,不仅要输入一个类似但更短的有限状态机状态列表,这次只涉及大约70个步骤和较少量的执行器。我被要求以类似的方式实施,使用与之前项目中相同的FB。由于程序规模较小,我在几周内就完成了提供的表格的输入,并开始与外部项目工程公司的一名(女性)工程师在现场实施。
在现场,首先出现了一个小问题,即控制面板使用的通信FB与中央步进控制FB内部使用的MB发生了重叠:当控制面板启用时,程序没有按预期工作。这个问题很简单就解决了,只需将步进控制FB的MB移动到另一个区域即可。从MB 250-253区域移动到MB 240-243区域或类似区域,功能仍然相同,但我必须更新每个步骤FB中对应的条件跳转,这花费了一些时间。
然后出现了一个更严重的问题。中央步骤控制FB出现了问题:当前一个程序完成后启动一个新的顺序程序时,PLC跳到了前一个程序的最后一步,而不是新启动程序的第一步。这个标准的中央步骤控制FB不是应该没有错误吗?这让人很困惑。我生成了整个PLC程序的交叉引用,开始验证中央步骤控制FB的各个标记,以确保没有冲突。我调试了代码,步骤控制FB的AWL代码非常不直观,因为它结合了字操作、字移位操作、使用掩码操作的布尔字以及单个位操作,使其非常紧凑。作为最终测试,我禁用了除了这个FB之外的所有程序,结果证明问题确实是由步骤控制FB本身引起的,而不是由我的某些代码引起的。然后我打电话给在鲁汶的现场高级工程师解释了这个问题。他听到这个问题后非常惊讶,并回复说这个中央控制被广泛使用,从未遇到过任何问题……
在调试该模块时,我发现中央步进FW的标记在程序最后一步结束后没有被重置,导致下一个程序从最后一步开始。为什么呢?我将我的项目与我之前用作参考的项目进行了比较,没有发现任何错误,一切都相同。为了继续测试实现,我不得不在每个顺序程序的中央步进控制FB之后采用条件重置。这将允许进行测试,并且在外部项目公司的项目经理忙于自己事务的空档期,我可以对中央步骤控制FB的代码进行故障排除。
《为什么我离开了PLC编程行业(上)》到此结束,欢迎大家继续关注《为什么我离开了PLC编程行业(下)》
作者:Jurgen Kobierczynski