为什么要引入史密斯预估器
史密斯预估器(Smith Predictor)就是给控制器装了一个“预知未来的模拟器”,让它不用傻等烟气跑完几十秒甚至几分钟后才知道喷氨有没有效果
先理解为什么普通 PID 容易震荡
假设:
- 当前出口 NOx = 50 mg/m³
- 目标 NOx = 30 mg/m³
- 烟道很长
- 喷氨后要 120 秒才能被 CEMS 测到
也就是说:
- t=0 开始增加喷氨
- t=30s CEMS 没变化
- t=60s CEMS 没变化
- t=90s CEMS 没变化
- t=120s 终于看到 NOx 下降
而 PID 不知道有 120 秒延迟。它会这样想:
- 我加氨了
- 怎么还没降?
- 继续加!
- 怎么还没降?
- 再加!
- 怎么还没降?
- 再加!
结果:氨阀越来越大。
120 秒后:NOx 突然暴跌;然后 PID 又开始:减氨!减氨!减氨!
于是形成:
1
2
3
4
5
6
7
|
NOx
↑
60 | /\ /\
50 | / \ / \
40 |_____/ \____/ \__
30 |
--------------------------------→
|
工业上叫:大滞后振荡;Hunting
史密斯预估器
在工业自动化控制中,史密斯预估器(Smith Predictor)使用的是一阶带纯滞后模型(FOPDT, First-Order Plus Dead-Time)。
三个参数:
- 滞后时间($L$ 或 $\tau$)
- 时间常数($T$ 或 $\tau_c$)
- 过程增益($K$)
滞后时间(Smith Dead Time)
指控制动作发出到传感器检测到发生变化之间的纯物理等待时间。在脱硝现场,这是烟气和化学反应的“赶路时间”
怎么在现场计算它
- 让系统处于手动的稳态(比如控制输出稳定在 $30\text{ Hz}$,出口 $\text{NOx}$ 稳定在 $60\text{ mg/m}^3$)。
- 在某个精确的时间点(记为 $t_0$),突然手动将输出频率拉高到 $35\text{ Hz}$(增加 $5\text{ Hz}$ 的阶跃)。
- 盯着出口 $\text{NOx}$ 的趋势图,记录它刚刚开始往下拐头、发生变化的那个时间点(记为 $t_1$)。
- 计算公式:
$$\text{滞后时间 } L = t_1 - t_0$$
📌 例如: 10:00:00 调整了频率,直到 10:05:00 出口 $\text{NOx}$ 才开始有下降趋势。那么滞后时间就是 5 分钟 = $300\text{ 秒}$。
时间常数(Smith Time Constant)
指系统开始做出响应后,反映反应快慢、惯性大小的时间指标。
在脱硝现场,它代表氨气在催化剂层彻底气化、混合、反应,并达到最终稳定状态的“爬坡速度”。时间常数越大,说明系统惯性越大,反应越慢。
怎么在现场计算它
在控制理论中,一阶系统在纯滞后结束、开始响应后,当响应达到最终总变化量的 $63.2%$ 时所需要的时间,就是时间常数 $T$。
继续用刚才的阶跃测试数据:
- 记录 $\text{NOx}$ 开始变化的时间点($t_1$)。
- 观察 $\text{NOx}$ 一路下降,直到最终在新的低点完全稳定下来(记为 $t_{\text{end}}$),计算出总变化量($\Delta \text{PV}$)。
- 例如: 从 $60\text{ mg/m}^3$ 掉到了 $40\text{ mg/m}^3$,总变化量 $\Delta \text{PV} = -20$。
- 计算总变化量的 $63.2%$ 分界点:$$60 + (-20 \times 63.2%) = 47.36\text{ mg/m}^3$$
- 在趋势图上,找出 $\text{NOx}$ 跌到 $47.36\text{ mg/m}^3$ 的那个时间点(记为 $t_{63.2}$)。
- 计算公式:$$\text{时间常数 } T = t_{63.2} - t_1$$
📌 例如: 10:05:00 $\text{NOx}$ 开始下降($t_1$),到了 10:08:00 时正好完成了总跌幅的近三分之二($t_{63.2}$)。那么时间常数就是 3 分钟 = $180\text{ 秒}$。
过程增益 K(Smith Process Gain)
指静态放大倍数。即你的控制输出改变了 1 个单位,被控对象(实际 $\text{PV}$)最终会改变多少个单位。它决定了控制的“放大力度”。
怎么在现场计算它
$$\text{过程增益 } K = \frac{\text{实际值的最终变化量 } \Delta \text{PV}}{\text{控制输出的阶跃变化量 } \Delta \text{MV}}$$
继续用上面的测试数据:
- 控制输出($\Delta \text{MV}$):从 $30\text{ Hz}$ 变到 $35\text{ Hz}$,变化了 $+5\text{ Hz}$。
- 实际 $\text{PV}$($\Delta \text{PV}$):出口 $\text{NOx}$ 从 $60$ 稳态跌到了 $40$,变化了 $-20\text{ mg/m}^3$。
- 计算公式:$$K = \frac{-20}{+5} = -4$$
⚠️ 重点注意(正负号):
在脱硝喷氨中,$K$ 通常是负数。因为加大喷氨频率($+$),出口 $\text{NOx}$ 就会下降($-$)。在代码里输入参数时,务必注意这个正负号关系!如果增益正负号反了,史密斯预估器会进行倒扣补偿。
额外说明
滞后时间尽量“宁小勿大”: 如果现场测出来大概是 300 秒,在软件里设 280 秒或 300 秒是安全的。但绝对不能设太大(比如设成 350 秒)。如果预估的滞后时间大于实际滞后时间,史密斯算法会在真实数据已经变了之后,还在那瞎预测,反而会引发剧烈的二次震荡。
验证模型是否准确
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
|
请帮我严格验证一个工业高级过程控制(APC)中的 **Smith Predictor(史密斯预估器)离散数学仿真过程**,并输出前几步以及关键时间点(例如 k=0~5、10、50、100、149、150、151)的完整计算结果。
请不要跳步,请逐步推导每一步公式和数值。
---
# 一、控制背景(非常重要)
这是一个 **脱硝喷氨控制系统(SCR/SNCR)**。
* 控制输出:喷氨泵频率(Hz)
* 被控变量(PV):出口 NOx 浓度
系统具有 **负过程增益(negative process gain)**:
喷氨频率增加 → 喷氨量增加 → NOx 浓度下降
即:
Δu > 0 ⇒ ΔPV < 0
因此:
* 当前值(PV)高于设定值(SP)时 → 应增加喷氨频率
* 当前值(PV)低于设定值(SP)时 → 应降低喷氨频率
请注意控制方向必须符合这一逻辑。
---
# 二、控制参数与初始条件
## 控制器参数(纯P控制)
Kp = 1
Ki = 0
Kd = 0
---
## 基准输出
baseFreq = 30.0 Hz
---
## 设定值与实际值
SP = 50.0
实际 PV = 49.0
假设由于物理原因,实际测量值在整个仿真过程中始终固定不变:
PV_actual(k) = 49.0
---
## 采样周期
Δt = 1 s
---
# 三、Smith Predictor 的 FOPDT 模型参数
Dead Time = 150 s
Time Constant = 80 s
Process Gain = -1.0
---
# 四、离散算法定义(严格按此执行)
请严格按照以下顺序执行每个离散步。
---
## Step 0:初始条件
模型初始状态:
y_model(0) = 0
初始预测值:
PredictedPV(0) = PV_actual = 49.0
---
## Step 1:计算误差
误差定义:
Error_comp(k) = SP - PredictedPV(k)
即:
Error_comp(k) = 50 - PredictedPV(k)
---
## Step 2:计算控制输出(注意控制方向)
由于这是负增益对象,控制器采用反作用控制。
控制律定义为:
totalOutput(k) = baseFreq - Kp × Error_comp(k)
即:
totalOutput(k) = 30 - Error_comp(k)
注意是减号,不是加号。
例如初始:
PredictedPV(0)=49
Error_comp(0)=1
因此:
totalOutput(0)=30−1=29
---
## Step 3:计算模型输入
模型输入为相对基准输出的增量:
modelInput(k) = totalOutput(k) - baseFreq
即:
modelInput(k) = totalOutput(k) - 30
---
## Step 4:无延迟模型计算(使用 k-1 输入更新 k)
离散化采用 ZOH 精确解:
α = exp(-Δt / TimeConstant)
= exp(-1 / 80)
离散模型:
y_model(k) = α × y_model(k-1)
+ (1−α) × ProcessGain × modelInput(k-1)
注意:
* 使用的是 k-1 时刻的 modelInput
* 初始 y_model(0)=0
---
## Step 5:延迟模型输出
延迟输出:
y_delayed(k) = 150 秒前的 y_model
即:
y_delayed(k) = y_model(k−150)
但在前 150 秒内,延迟队列未满,因此:
y_delayed(k)=0
对于:
k = 0~150
---
## Step 6:计算预测值
PredictedPV(k) = PV_actual + (y_model(k) - y_delayed(k))
即:
PredictedPV(k)=49+(y_model(k)-y_delayed(k))
---
# 五、请回答以下问题
1. 请输出:
* k=0~5
* k=10
* k=50
* k=100
* k=149
* k=150
* k=151
每一步的:
* y_model
* y_delayed
* PredictedPV
* Error_comp
* totalOutput
---
2. 请判断:
在前150秒内:
* totalOutput 是否是线性变化?
还是
* 指数型(一阶惯性)变化?
请给出数学推导。
---
3. 请验证:
k=150 时 totalOutput 是否约等于:
29.489
请严格计算验证。
|
Grok 模型验证:Smith Predictor Discrete FOPDT Simulation | Shared Grok Conversation
![[Pasted image 20260622174925.png]]