西门子PCS7系统在控制器内存容量不足时的处理方法
一、项目简介
上虞杭协联电厂(见图1)位于浙江省上虞市精细化工园区内,是杭州协联热电厂于2003年在上虞市投资创建的。一期项目总的装机容量为27MW,3台130t/h循环硫化床锅炉,一台12MW的凝汽式汽轮机,一台15MW的背压式汽轮机,年发电能力2亿千瓦时,供汽能力150万吨。
![](/uploadfile/images/content_2012/content_3/content_10/201231014412864.jpg)
图1 电场外景
本项目采用西门子PCS7控制系统,控制系统的设计上包括了三台130t/h循环硫化床锅炉,一台12MW的凝汽式汽轮机,一台15MW的背压式汽轮机,及减温减压,化学水处理等辅机系统。其中主机部分采用了五套冗余的414-H控制器,三炉两机各单独使用一套控制器,辅机部分使用了一套非冗余的414控制器。
本项目遇到了控制器内存不足的情况,实施了一些特殊的处理方法,现记录如下。
二、CPU内存的组成情况
CPU的内存组成情况如图2所示。
![](/uploadfile/images/content_2012/content_3/content_10/201231014351863.jpg)
图2 CPU内存组成情况
CPU的内存由load memory和work memory两部分组成。Load memory是可以通过外扩存倒卡的方式扩展,而work memory是集成在CPU内部无法扩展的,所以我们需要节省work memor的使用。Work memory包括code memory和data memory。对于PCS7项目,code memory的d用量要远远高于data memory的使用量i所以要节省CPU的内存最终就是要节省work memory[}的code memory。
code memory的使用分配包括了四部分,如图3所示。
![](/uploadfile/images/content_2012/content_3/content_10/201231014337886.jpg)
图3 code memory的使用分配
用户程序--block
I/O过程映像区--input/output image
诊断缓冲区--diagnose buffer
通讯任务数量--communicate job
所以我们就要通过节省以上四部分的使用来节省CPU的code memory。
本项目中的CPU内存不足出现在3个锅炉系统对应的3套414-H控制器,每个锅炉的信号数量为550点,其中Al信号为200点,控制回路为23个,414-H控制器的work memory为768K, code memory为384K,最初程序完成后,已超400K,无法下载程序,后进行了以下处理。
三、节省内存的方法
1.减少用户程序
由以上work memory的组成情况可以看出,用户程序的使用情况决定了work memory余量的大小,所以我们要尽量减少用户程序,方法如下:
方法1,避免使用开关量信号的信号驱动块,即CH-DI、CH-DO块。这两种块只有在我们调试程序时有一些作用,当我们内存不足时,完全可以不使用这两种驱动块,而直接使用地址来编程序。
方法2,用用户自定义的FB块来替换模拟量信号驱动块CH-AI、CH-AO。首先对于PCS7项目,相同大小的FC块的重复调用要比相同大小的FB块的重复调用所占用的CPU的code memory大得多,而CH-AI、CH-AO块是FC块,且尺寸较大,所以我们要用用户自定义的FB块来代替CH-AI、 CH-AO块;其次,CH-AI、CH-AO块不仅在循环扫描周期中(如OB35)被调用,而且还在OB100中被调用,这就使这两种块占用CPU的内存加倍,所以如果不需要在OB100中做特殊程序处理时,我们自己创建FB块只在循环扫描周期中(如OB35)被调用,来减少用户程序。
方法3,删除系统生成的I/O模板的驱动块。在采用以上两种方法,但CPU内存还不能满足要求时,可以采取这种方法。当我们编译产生模板驱动后,系统会自动生成许多驱动块,其中包括I/O模板的驱动块、CPU的驱动块、冗余的驱动块、IM153的驱动块等,而其中I/O模板的驱动块占用了较多的程序。当我们不使用信号驱动块时,则可以删除I/O模板的驱动块,但是我们将无法得到模板的运行报警信息。
2.减少诊断缓冲区
CPU的诊断缓冲区存储了系统的硬件诊断信息,利用诊断信息,工程师可以清楚地了解到CPU历史及现在的运行状况和故障信息。如我们不需要保存太久的CPU诊断信息,我们可以减少诊断缓冲区的容量来节省内存。PCS7 V6版本中CPU414-H的默认缓冲区大小为3000条诊断信息,我们可以最低减少到100条诊断信息。
3.减少I/O过程映像区
通过减少过程映像区的大小,同样可以节省CPU的code memory。对于PCS7系统组态硬件时,模拟信号默认的起始地址为IW512和QW512,这时我们就要调整相应的起始地址,将其尽量减小。例如,开关量信号组态的最高地址如果是140.7和Q20.7,我们可以将模拟信号的起始地址设为IW50和QW30,以此可减少过程映像区的大小。
4.减少CPU的通讯任务数量
CPU的通讯任务占用了CPU大量的内存,对CPU的code memory的影响很大,所以我们要尽量减少CPU的通讯任务数量,来节省大量的内存空间。
具有报警信息功能的FB块的数量决定了通讯任务数量,这些FB块包括CTRL-PID. MOTOR、 MEAS-MON. VAL-MOT. MOD1等,所以我们在CFC编程时要尽量减少这些块的数量。
方法1,不使用MEAS-MON块。我们常用MEAS-MON块来实现对采集的过程模拟信号进行显示及报警,但是由于它占用了CPU的通讯任务,我们将不能使用它。对于模拟信号的显示,我们可创建一个FB块来实现,对于模拟信号的高低限报警,我们可以使用ALARM-8P来实现,这样可以大大减少通讯任务数量。
方法2,删除系统生成的I/O模板的驱动块。I/O模板的驱动块同样占用了CPU的通讯任务,所以删除系统生成的I/O模板的驱动块,同样可以大大减少通讯任务数量,删除方法上己阐述。
四、内存不足时程序的优化
CPU的内存不足,将给我们带来的主要问题是程序无法部分下装,所以我们将针对这个问题进行程序的优化。
方法1,建立多个运行组,尽量减少每个运行组内所调用的程序块的数量。每个运行组内所调用的程序块的数量越多,则编译后系统生成的FC块的尺寸就越大,如果FC块的尺寸太大,则程序将无法部分下装。
方法2,CFC尽量按功能分,减少CFC程序之间的连接。一般情况下,我们编程时每个CFC都对应一个运行组,减少CFC程序之间的连接,则在修改程序后进行部分编译时,所更改的程序就会相对减少,部分下装的可行性就要大一些。
五、小结
通过以上方法基本解决了本项目中CPU内存不足的问题,为杭州协联热电厂节省了大量的资金投入。现三炉两机已全部投产,一切运行正常。
文章版权归西部工控xbgk所有,未经许可不得转载。