控制工程软件
基于 iFIX 平台的物料计量
控制系统设计及运行仿真
学 院:自动化学院
班 级:0315108
姓 名:周志状
学 号:031510525
教 师:郭彤
日 期:2017 年 10 月
摘要:本报告主要内容为基于 ifix 平台的模拟计量槽液位控制系统,旨在实现
计量槽液位的便捷和自动控制。使用 VBA 脚本对系统工作进行顺序和自动保护的
实现,并呈现监控量的实时变化曲线和临界危险值的报警。
一、控制系统组成介绍
1、控制系统结构及部件
手动
自动
控制结构
执行机构
结果显示
控制器
执行机构
被控对象
结果检测
测量反馈
2、控制目标及功能设计
控制功能设计(以水箱进出液为背景)
# 总启动按钮——按下运行,再按下停止运行;
# 手动、自动、保护控制功能,均要在系统运行状态下工作;
# 运行状态用指示灯显示,灯亮表示运行,灯灭表示停止运行;
# 手动/自动切换采用旋钮开关,初始情况为手动;
# 罐体默认为圆柱体,底面积 20 平方米;
A .手动控制功能 / 手动—自动方式设置于“手动”
# 启动或停止进液泵;
# 进液速度可调,0-100m3/s ;
# 打开或关闭出液阀;
# 出液速度根据液位高度计算,满足伯努利流体运动方程;
# 但出液阀关闭后,出口流量始终为 0。
B. 自动控制功能 / 手动 – 自动方式设置于“自动”
# 自动启动或停止 ;
# 进液初始速度 0 ;
# 自动调节功能,采用 PID 调节器对液位进行控制,控制液位高度由给定值给
出。
C. 保护控制
# 按动总启动按钮,系统才能工作,系统运行指示灯亮,并且系统初始状态处
于手动控制状态;
# 再次按动总启动按钮,系统停止运行,系统运行指示灯灭,并且手自动开关
回到手动状态;
# 液位达到 30%以及以上高度,搅拌器自动运行,否则搅拌器关闭 ;
# 进液保护阀关闭状态时,进液泵不可开启,并且进料流量为 0 ;
# 在自动控制状态下:进液保护功能,即液位达到或高于上限制(例如 90%)
自动关进液泵和进液保护阀;
# 在自动控制状态下:出液下限保护功能,即液位达到或低于下限(例如 10%)
自动关出液阀 ;
D. 报警
# 只有在系统运行状态下才产生报警。无论手动和自动状态下,下述情况需要
进行报警:
# 液位高报警;
# 液位高高报警;
# 液位低报警;
# 进液保护阀自动关闭;
E. 监控画面组态
组态内容:控制显示画面、实时趋势画面、报警监视画面、历史趋势画面 ;
3、iFix 仿真平台建立及功能简介
Ifix 是一款功能强大的自动化监视与控制的软件,它可以精确地监视,控制生产
过程,并优化生产设备和企业资源管理。生产的关键信息可以通过 ifix 贯穿从生
产现场到企业经理桌面的全厂管理系统,以方便管理者作出更快速更高效的决策,
从而获得更高的经济效益。
二、控制系统设计过程
1、 控制系统变量定义和数据库定义
2、 调度设计
(1)基于时间项
(2)基于事件项
3、 画面组态(主要介绍控制画面设计)
4. 单元控制编程(如手动控制模块,自动控制模块)/ 相应的脚本
(1)手动控制模块的脚本
ElseIf Fix32.Fix.switch2.F_CV = 0 Then
If Fix32.Fix.level1.F_CV > 90 Then
Fix32.Fix.switch3.F_CV = 0
Fix32.Fix.pump1.F_CV = 0
End If
If Fix32.Fix.level1.F_CV < 10 Then
Fix32.Fix.switch4.F_CV = 0
End If
V11 = Fix32.Fix.V11
If Fix32.Fix.switch4.F_CV = 0 Then
level1 = Fix32.Fix.level1.F_CV
Fix32.Fix.V22.F_CV = 0
level1 = level1 + V11 * 0.2
Fix32.Fix.level1.F_CV = level1
Else
level1 = Fix32.Fix.level1.F_CV
level1 = level1 * 0.8 + (V11 - V22) * 0.2
Fix32.Fix.level1.F_CV = level1
V22 = 5# * Sqr(level1)
Fix32.Fix.V22.F_CV = V22
End If
(2)自动控制的脚本
If Fix32.Fix.switch2.F_CV = 1 Then
If Fix32.Fix.level1.F_CV < 10 Then
Fix32.Fix.switch4.F_CV = 0
Else
Fix32.Fix.switch4.F_CV = 1
End If
If Fix32.Fix.level1.F_CV > 90 Then
Fix32.Fix.switch3.F_CV = 0
Fix32.Fix.pump1.F_CV = 0
Else
Fix32.Fix.switch3.F_CV = 1
Fix32.Fix.pump1.F_CV = 1
End If
PID_Calculater
level1 = Fix32.Fix.level1.F_CV
V11 = Fix32.Fix.V11
level1 = level1 * 0.8 + (V11 - V22) * 0.2
Fix32.Fix.level1.F_CV = level1
V22 = 5# * Sqr(level1)
Fix32.Fix.V22.F_CV = V22
(3)PID 计算模块
Public Function PID_Calculater() As Single
Dim E3, E1, E2 As Single
Dim KP, KI, KD As Single
Dim Result As Single
Dim dOUT As Single
Dim SP, PV As Single
SP = Fix32.Fix.SETLEVEL1
PV = Fix32.Fix.level1
E1 = SP - PV
E2 = Fix32.Fix.E2
E3 = Fix32.Fix.E3
KP = Fix32.Fix.KP
KI = Fix32.Fix.KI
KD = Fix32.Fix.KD
dOUT = KP * (E1 - E2) + KI * E1 + KD * (E1 - 2# * E2 + E3)