中冶宝钢技术服务有限公司
第一章:背景说明
1.1工艺说明
连铸方坯旋流池用于收集3套连铸设备冷却过程中的开路水、二冷水、冲渣水等,通过提升泵抽水给水处理厂。
旋流池的池深为8.0m,工艺要求水位在[2.5m,4.9m]范围,长期使用稳定在[2.9m,3.6m]
1.2设备说明
控制系统:西门子1500系列。
变频器:西门子G120系列。
提升泵:4台。
1.3现状说明
提升泵的自动启动和停止策略固化到依据水位:
提升泵号 | 启动条件 | 停止条件 |
1#泵 | 水位 > 3.0m | 水位 < 2.5m |
2#泵 | 水位 > 3.2m | 水位 < 3.0m |
3#泵 | 水位 > 3.5m | 水位 < 3.2m |
4#泵 | 水位 > 4.75m | 水位 < 3.5m |
1.4问题说明
以上启动和停止策略存在2个问题:
1)设备使用不均匀:1#泵长久运行,2#泵经常运行,3#泵很少运行,4#泵基本不运行。在实际运行中,1#泵和2#泵故障率高,4#泵有故障时较难察觉。
2)水位波动大:如果1#泵故障,水位上涨到3.2m时才启动2#泵抽水,以此类比,2#泵故障时,水位上涨到3.5m时才启动3#泵。特别的,3#泵故障时,水位上涨到4.75m才启动4#泵。
第二章:优化说明
针对上述问题,采用队列启动和停止策略优化:启动时,轮循启动;停止时,先启先停。4台提升泵均衡使用,并且在某台提升泵有故障时,从队列中删除,生产中的设备无缝衔接。
2.1队列启动优化策略
轮循启动
1)实时读取4个提升泵读取变频器状态和操作设定,采用队列形式,建立实时就绪队列,
2)实时读取4个提升泵读取变频器状态,采用队列形式,建立实时泵运行队列,并计算出当前泵的运行数量。
3)依据水位,算出需要启动泵的数量
4)对比需求和当前泵的运行数量,在就绪队列[堆栈]里找出还没有启动的泵号
水位[m] | 提升泵需要启动的数量[台] | 当前[台] |
3.0 | 1 | 1 |
3.2 | 2 | 2 |
3.5 | 3 | 3 |
4.75 | 4 | 4 |
表1:提升泵需要启动的数量
图1:启动概图1
图2:启动概图2
2.2队列停止优化策略
先启先停
1)实时读取各个提升泵变频器状态,采用压堆栈形式,建立实时泵运行队列,队首为最新启动的泵号
2)依据水位,算出需要停止泵的数量
4)对比需求和当前泵的运行数量,把泵运行队列的队尾泵号给出
水位[m] | 提升泵需要停止的数量[台] | 当前 |
2.5 | 4 | 0 |
3.0 | 3 | 1 |
3.2 | 2 | 2 |
3.5 | 1 | 3 |
表2:停止概图1
图3:停止概图1
图3:停止概图2
第三章:程序功能实现说明
3.1队列启动功能
队列启动由以下子功能来实现:就绪队列、泵运行队列和当前泵运行数量、需要启动泵的数量、需要启动的泵号等。程序编写以西门子SCL语言为主。
3.1.1子功能:就绪队列
根据Wincc画面设定泵运行顺序和变频器/电机建立实时就绪队列,并且某台泵如果有故障,则将该泵号从就绪队列中剔除
图4:建立就绪队列逻辑图
代码1:建立就绪队列
3.1.2子功能:泵运行队列和当前泵运行数量
根据变频器的状态,建立实时泵运行队列和计算当前运行泵的数量,算法逻辑和就绪队列类似。
图5:建立泵运行队列逻辑图
代码2:建立泵运行队列
3.1.3子功能:需要启动泵的数量
根据水位,按照设定值,计算需要启动泵的数量。
代码3:需要启动泵的数量
3.1.3子功能:输出启动泵号
对比就绪队列和当前泵运行队列,给出泵号。
图6:输出泵号逻辑图
代码4:计算指针
代码5:计算指针
代码6:需要启动的泵号
代码7:防止出现意外情况
3.2队列停止功能
队列启动由以下子功能来实现:泵运行队列、当前停止泵数量、需要停止泵的数量、给停止泵号。程序编写以西门子SCL语言为主。
3.2.1子功能:泵运行队列
根据变频器当前状态,建立实时泵运行队列,按照泵启动前后顺序,对泵号执行队列压堆栈动作,最新启动的泵号在队首。
同时实时刷新队列,如果在队列里的某泵已停止的,将其从队列中去掉。
图7:泵运行队列逻辑图
代码8:泵运行队列
3.2.2子功能:计算当前泵停止数量
根据泵运行队列计算
代码8:当前泵停止的数量
3.2.3子功能:需要停止泵的数量
根据实时水位和设定的水位计算
代码9:当前泵停止的数量
3.2.4子功能:停止泵号
对比当前泵停止的数量和需要停止的数量,从泵运行队列的队尾给出停止泵号,达到先起先停的目的。
图8:停止泵号逻辑图
代码10:给出停止泵号
结束语
队列轮循启动、队列先起先停的功能,完美的解决了旋流池提升泵启动停止存在的2个问题。且该功能简单修改就可以运用在多台同样设备间断性使用这种使用场景,具备着良好的扩展性。