结构化编程在PLC程序设计中的应用
2015-07-26周国栋赵锦辉上海市机械设备成套集团有限公司上海000江苏优联环境发展有限公司江苏南通6000
周国栋,赵锦辉(.上海市机械设备成套(集团)有限公司,上海 000;.江苏优联环境发展有限公司,江苏 南通 6000)
结构化编程在PLC程序设计中的应用
周国栋1,赵锦辉2
(1.上海市机械设备成套(集团)有限公司,上海200120;2.江苏优联环境发展有限公司,江苏南通226000)
摘要:本文比较了常见的PLC程序设计方法,并结合给排水行业的工艺特点,介绍了结构化编程方法在给排水行业的应用实例,该方法具有编程调试简便,易于扩展,移植性好等特点。
关键词:PLC;结构化;给排水
1 引言
随着现代工业发展进程的不断加快,工业自动化控制技术发挥着越来越大的作用,PLC控制系统的应用也日益广泛。PLC程序设计的水平优劣往往决定着工程能否及时竣工投产,工业设备能否充分发挥其设计生产能力。传统的PLC编程方式程序繁琐冗长,结构不清晰,不利于控制程序在多个项目中的重复使用。如何迅速、优质地编制符合不同设备工艺特点,参数的PLC程序,对工业控制系统的及时完工,提高自动化控制水平具有较大的意义。本文结合给排水行业常用设备及工艺程序的编写,对结构化编程在PLC中的应用进行了初步的探索,取得了较理想的效果。
2 PLC程序设计方法简介
常见的程序设计方法分为三种:线性化方法、模块化方法以及结构化方法[1]。
线性化编程方法:将所有的程序代码全部放在一个程序块中,如对S7-300/400来说,在OB1中写入数据采集、设备控制、台时统计等全部用户程序。该方法与PLC所代替的继电器控制电路类似,系统按照顺序处理各条指令。它适用于小型设备配套PLC的编程,对于大中型项目则显得程序结构不清晰,同时由于需要对不同设备编制大量类似的代码,导致代码冗长,难以调试和维护。
模块化编程方法:将程序根据不同功能需求分成不同的块,每个功能的控制指令在各自的块内,OB1按顺序调用每个块。该方法程序结构清晰,便于调试和维护,但仅将功能按块分配,加以有条件的调用,故虽然CPU效率得到提高,但代码冗长、调试困难的缺点未得到明显改善。
结构化编程方法:将复杂的自动化任务分割成过程相关的功能或可多次处理的小任务,以提供可以用于类似任务的通用的程序代码,这样更易于控制复杂任务。而这些小任务以相应的程序段表示,称为块。只需要在调用程序块时针对不同的设备和工艺流程代入不同的参数或地址,即可实现不同设备的控制,无须多处重复输入相同功能的代码。当需要对功能进行修改时只需要修改程序块即可,提高了编程的效率和可靠性。
3 结构化编程方法设计实例
在实际应用中,在对给排水行业通用设备和工艺进行详细分析的基础上,针对典型设备和工艺分别编制了水泵、仪表、阀门、泵站水泵调度、自动加药等不同的控制模块,使高效开发PLC程序在给排水行业的应用成为可能。下面以变频水泵及泵站的水泵调度为例来介绍结构化编程方法。
3.1变频水泵功能块
变频水泵是给排水行业最常见的设备,其调用如图2所示。
图2为变频水泵控制块的调用实例,该FB的输入输出参数如图3示。
功能块接口参数共分为三种类型:输入(INPUT);输出(OUTPUT);输入输出(IN_ OUT)。其中输入参数主要有:远程信号,上电信号,运行信号,水泵故障,电回路故障,变频器故障,频率输入等;输出参数主要有:开停控制,频率控制输出,实际运行频率等;输入输出类型参数主要有:变频电机状态,变频电机控制命令,电机台时及开停次数统计,频率设定值等。
输入输出类型参数可由人工或自控程序在功能块外部进行赋值,也可由本功能块内部逻辑进行修改。其中的State、Command等参数均为WORD类型,其每一位分别代表了不同的含义。
该功能块包含了除电流外的变频水泵常见的绝大部分信号处理及控制功能,对于部分实际工程中未使用的参数,可通过直接设置默认值或空置的方式进行处理。水泵电流可通过专门的模拟量处理程序块进行数据转换和上下限报警判断,当电流超过上下限设定值时发出报警信号(过流、欠流)传送给变频水泵功能块,从而实现水泵的电流超限保护功能。
3.2泵站水泵调度功能块
污水厂一般具有进水泵房、中间提升泵站、出水泵房等工艺段,其水泵控制模式基本相同,都是根据液位的变化来调节运行的水泵频率和台数,调泵时又要考虑单台设备的运行台时和启停间隔等因素。其基本原理介绍如下:
泵站的液位控制一般采用根据液位分段启停泵的模式,不同的液位分别对应当前需要开泵的台数,同时具备死区保护功能,停泵液位设定值比启泵液位设定值略低,以防止特殊情况下水泵的频繁启停[2]。
水泵的启停选择需要考虑以下几个条件:
(1)热备状态。PLC首先检测水泵上电情况,远程状态,控制模式,故障情况等,当以上条件均满足时认为该泵处于热备状态,可被自控程序进行开停调度。
(2)平衡调泵。累计运行时间最短的泵优先被启动,运行时间最长的泵优先停止,使每台泵运转时间大致相等。当运行时间相同时,按泵的顺序启停。
(3)启动间隔保护。控制程序使每一台泵每小时起动次数少于6次,两次起动间隔≥10分钟,且不论何种情况,不同时起动2台及2台以上水泵。
在实际应用中,根据分段启泵原理以及低水位保护等条件编制泵站自控功能块,计算当前需要开泵台数。根据上述三条件,编制了水泵启停调度选择功能块,用于选择当前需要启动的水泵编号。两功能块配套使用,可快速完成泵站自动调泵程序的编制工作。限于篇幅,本处不再详述其具体实现过程。
4 结构化编程方法设计中的注意点
(1)对于实际项目,我们往往采用模块化编程与结构化编程相结合的方式来实现。首先将项目根据不同工艺段分为不同的任务模块,在每个任务模块中再采用结构化的编程方法来实现具体设备的控制、数据分析统计以及工艺控制程序等功能。具体对于西门子STEP7编程软件来说,我们通常使用FC来实现不同工艺段设备的控制,而每个FC中的具体设备的控制程序再通过调用FB来实现。
(2)具体设备控制功能块的规划以完成单一功能为主,避免出现将大量功能堆砌在同一功能块中的情况。如上述变频水泵功能块,完成设备状态分析、控制及软故障判断等基本功能即可,其余可能需要的功能如电流,温度的检测及故障联锁停泵等功能可在通用的模拟量块中进行处理,将最终输出的停机信号等传递给水泵功能块即可,无须全部加入到水泵功能块中,避免了重复代码,结构更加清晰,同时也更便于维护。
(3)建议采用SCL语言来完成PLC程序模块的编制,并且在编程时尽量采用标准化的,而非西门子特有的指令,对于程序的移植很有好处。如西门子的SCL语言与施耐德、Rockwell等品牌PLC的ST语言(Structured Text)类似,都是类PASCAL语言,符合IEC61131-3国际标准,当移植到相关的编程环境时,只需要进行少量修改即可使用[3]。
(4)可以根据工程逐步积累,开发相关行业的程序库,从而加快相关工程的开发进度。程序库中的程序模块可重复使用,成为下一个项目的宝贵资源,同时可以通过加密方式对程序块进行保护。
5 结束语
本文结合PLC编程的特点,采用结构化编程思想,将常见的设备以及相关工艺控制流程封装为程序块,加以调用,各单个任务块的创建和测试可以相互独立地进行。通过使用参数,可将块设计得十分灵活,实际应用时只需保证现场信号的正确性并对调用接口进行测试即可完成调试工作,大大减少了调试工作量,提高了程序编制和调试效率,同时采用该方法编制程序不易出错,有效保证了程序的可靠性。同时该方法具有了面向对象的部分特点,当需要扩展部分功能时,只需对原功能模块进行继承,派生出新的控制程序模块,具有较强的灵活性。
参考文献:
[1]西门子(中国)有限公司.STEP7编程手册[K].2010.
[2]王明军.基于PLC的污水泵站自动控制系统[J].自动化技术与应用,2010(05).
[3]HansBerger著,张同庄,方荣惠,伍小杰,邓先明译.西门子S7-300/400PLC编程--语句表和结构化控制语言描述(第3版)[M].北京:人民邮电出版社,2008.
作者简介:周国栋(1973—),男,江苏南通人,工程硕士,工程师,研究方向:工业自动化。