1. 项目背景与系统架构
在西北风电场工作的第七年,我遇到了职业生涯中最棘手的控制难题——三台1.5MW风机在8级大风中集体出现功率振荡。传统DCS系统像匹老马,面对复杂湍流工况时反应迟缓。直到我们将MCGS组态软件与西门子S7-1200 PLC组合,才真正实现了风电控制的"刚柔并济"。
这套系统的核心架构分为三个层次:
- 感知层:包含风速风向仪、编码器、振动传感器等现场设备,通过Profinet总线与PLC通信
- 控制层:PLC运行实时控制算法,MCGS作为SCADA服务器处理数据
- 人机交互层:MCGS开发的HMI界面,支持WEB远程监控
关键设计原则:PLC负责毫秒级实时控制,MCGS处理分钟级优化计算,二者通过OPC UA实现数据同步
2. 偏航控制系统实现细节
2.1 梯形图逻辑设计要点
现场调试时发现,原厂提供的偏航控制逻辑存在致命缺陷——未考虑急停信号的硬件滤波。我们改进后的梯形图增加了以下关键设计:
ladder复制// 改进后的偏航控制逻辑
A( "风速传感器_OK"
O "手动模式"
)
A( "风向偏差>15度"
AN "急停触发"
AN "机械制动状态" // 新增互锁条件
)
S "YAW_Motor_Start"; // 改用置位指令
调试经验:
- 死区角度需根据风机型号调整:1.5MW机型设为15度,2MW机型建议设为12度
- 急停信号必须采用硬件滤波(RC常数≥50ms),避免电磁干扰误触发
- 使用S/R指令替代普通输出,确保电机持续运转不受扫描周期影响
2.2 偏航减速曲线优化
通过MCGS脚本实现的变角度死区控制算法:
vb复制Function YAW_DeadZone(ByVal windSpeed)
Static dead_zone As Integer
If windSpeed > 15 Then
dead_zone = 10 - (windSpeed - 15)*0.5 // 风速越大死区越小
If dead_zone < 3 Then dead_zone = 3
Else
dead_zone = 15
End If
Return dead_zone
End Function
实测数据对比:
| 风速(m/s) | 固定死区(度) | 动态死区(度) | 发电量提升 |
|---|---|---|---|
| 8 | 15 | 15 | 0% |
| 12 | 15 | 12 | 1.2% |
| 18 | 15 | 6 | 3.7% |
3. 功率优化算法深度解析
3.1 桨距角控制的三重保护
pascal复制// 安全策略优先级排序
IF Emergency_Stop THEN
SetPitch(90); // 最高优先级
ELSIF Overspeed THEN
SetPitch(PID_Calculate());
Activate_Mechanical_Brake(); // 二级保护
ELSE
Optimal_Pitch = Power_Optimize(windSpeed); // 正常调节
END_IF;
参数整定要点:
- PID参数需在不同风速段单独整定(建议分5-8m/s、8-12m/s、12-25m/s三段)
- 积分时间常数Ti与风轮惯性矩相关,计算公式:
code复制Ti = 2π * √(J/k) J: 风轮转动惯量(kg·m²) k: 变桨系统刚度(N·m/rad) - 微分作用要加噪声滤波器,截止频率设为叶片通过频率的1/10
3.2 基于Modbus-TCP的数据映射
MCGS与PLC的寄存器映射表(部分):
| MCGS变量名 | PLC地址 | 数据类型 | 备注 |
|---|---|---|---|
| WindSpeed | DB1.DBD0 | REAL | 需乘以风洞修正系数0.92 |
| PitchAngle | DB1.DBD4 | REAL | 0-90度对应0-27648 |
| GeneratorTemp | DB1.DBW8 | INT | 实际值=RAW值×0.1 |
血泪教训:曾经因DB块偏移量计算错误,导致温度值写入到电机控制字,造成叶片瞬间打桨。务必使用Modbus Poll工具在线验证数据映射!
4. 极端工况应对方案
4.1 沙尘暴模式下的降级控制
st复制CASE system_mode OF
1: // 正常模式
pitch_angle := PID_Calculate(windspeed);
2: // 传感器失效模式
IF generator_temp > 85 THEN
pitch_angle := 90;
Trip_Generator();
ELSE
pitch_angle := 80 - (rotor_rpm - 12)*5; // 经验公式
END_IF
3: // 通讯中断模式
pitch_angle := Last_Good_Value;
SetTimer(T#30S); // 30秒超时保护
END_CASE;
现场测试方法:
- 用工程车牵引叶片旋转至12rpm(模拟额定转速)
- 突然断开编码器信号
- 观察桨距角变化是否平滑
- 通过振动分析仪监测塔筒摆动幅度
4.2 低温启动策略
在-30℃环境下的特殊处理:
- 变桨电机先以30%扭矩运行5分钟预热
- 齿轮箱油温低于-20℃时禁止高速运行
- MCGS脚本增加温度补偿算法:
vb复制Function Temp_Compensation(ByVal cmd)
Dim oil_temp = ReadModbus(40025)
If oil_temp < -10 Then
Return cmd * 0.8
ElseIf oil_temp < -20 Then
Return cmd * 0.5
Else
Return cmd
End If
End Function
5. 系统调试与故障排查
5.1 典型故障代码速查表
| 故障代码 | 可能原因 | 排查步骤 |
|---|---|---|
| E1103 | 变桨速度超差 | 1.检查编码器电源 2.校准桨距角零点 |
| E2015 | 偏航位置偏差过大 | 1.检查减速箱油位 2.测试限位开关 |
| E3008 | Modbus通讯超时 | 1.Ping测试 2.检查终端电阻 |
5.2 现场调试工具包
-
必带设备:
- FLUKE 435电能质量分析仪
- Siemens TIA Portal编程器
- 激光转速计(非接触式测量)
-
调试技巧:
- 用MCGS的趋势图功能捕获控制过程曲线
- 修改PLC程序时务必先保存原始OB块
- 关键参数修改后立即做注释标记
-
安全规范:
- 登机检修前必须锁定变桨系统
- 测试急停功能时要有人值守
- 严禁在风速>12m/s时进行软件更新
在河西走廊那个沙尘漫天的春季,这套系统最终实现了98.7%的可利用率。当看到HMI上平稳的功率曲线时,我深刻体会到——好的控制系统就像优秀的舵手,既要有PLC这种精准的执行力,也需要MCGS这样灵活的判断力。