4、OPC UA与IEC 104协议:OPC UA服务器/客户端模型、IEC 104规约在风电中的应用
各位好,我是老张。在风电SCADA这个行当摸爬滚打了十几年,今天咱们来聊聊两个最核心的通信协议——OPC UA和IEC 104。说实话,这两个协议是风机数据采集的"任督二脉",打通了它们,你才算真正入了门。
核心观点:OPC UA解决的是"怎么把数据从风机控制器里拿出来"的问题,而IEC 104解决的是"怎么把数据安全可靠地传到远方调度中心"的问题。两者缺一不可。
4.1 OPC UA 服务器/客户端模型——风场数据的中枢神经
先说说OPC UA。我记得2015年第一次在海上风场调试OPC UA时,被它的地址空间模型搞得一头雾水。后来才明白,这东西说白了就是一个"数据字典"——它把风机里成千上万个变量,组织成了一棵有结构的树。
OPC UA的核心模型其实就两个角色:
- 服务器(Server):运行在风机控制器或风场数据网关里,负责暴露数据。比如风速、功率、桨距角、发电机转速等等。
- 客户端(Client):运行在风场监控主机上,负责订阅或读取服务器上的数据。
你想想看,如果没有OPC UA,每个风机厂家都用自己私有的协议,那风场运维得多痛苦?我见过一个风场,三种风机品牌,三种协议,光协议转换就折腾了两个月。
我的经验:OPC UA最大的优势是"语义化"。比如你读一个变量,它不光告诉你数值是12.5,还告诉你单位是m/s,描述是"10分钟平均风速",甚至还有时间戳和质量戳。这在做报警分析时特别有用。
4.2 OPC UA 的数据模型与地址空间
OPC UA把数据组织成节点(Node)和引用(Reference)。每个节点都有属性,比如节点ID、名称、数据类型、值等。引用则定义了节点之间的关系。
举个例子,一个典型的风机OPC UA地址空间可能是这样的:
Root
└── Objects
└── WindTurbine_01
├── Measurements
│ ├── WindSpeed (Float, m/s)
│ ├── ActivePower (Float, kW)
│ ├── RotorSpeed (Float, rpm)
│ └── BladePitchAngle (Float, deg)
├── Status
│ ├── RunningState (Int32, 0=停止, 1=运行, 2=故障)
│ └── GridConnected (Boolean)
└── Alarms
├── OverSpeedAlarm (Boolean)
└── HighTempAlarm (Boolean)
我个人习惯把风机的重要测点都放在一个统一的命名空间下,这样客户端订阅时只需要订阅一个根节点,就能拿到所有数据。省事。
4.3 IEC 104 规约——风电远动的"老黄牛"
聊完OPC UA,咱们再说IEC 104。这个协议在电力系统里用了快二十年了,虽然看着老,但胜在稳定可靠。风电场的调度数据,绝大多数都是通过IEC 104上传到电网调度中心的。
IEC 104本质上是一个"主站-子站"模型:
- 子站(RTU/网关):部署在风场侧,负责采集风机数据,并按IEC 104格式打包发送。
- 主站(调度中心):接收数据,进行监视和控制。
我曾经在一个项目里遇到过一个问题:IEC 104的遥测数据总是跳变,后来发现是子站发送周期和主站接收周期不匹配导致的。嗯,这里要注意,IEC 104的召唤周期和死区设置一定要匹配好。
避坑指南:我曾经因为IEC 104的"总召唤"和"分组召唤"没搞清楚,导致调度中心收到的数据总是延迟15分钟。后来才发现,总召唤是全部数据重新上送,分组召唤是只上送变化的数据。风场数据量大,建议用分组召唤+死区判断,能大大降低网络负载。
4.4 OPC UA 与 IEC 104 的协同工作
在实际的风电SCADA系统中,这两个协议通常是配合使用的。我画了个流程图,你看一眼就明白了:
风机PLC → [OPC UA Server] → 风场监控主机 [OPC UA Client]
↓
[IEC 104 规约转换]
↓
[调度中心 IEC 104 主站]
说白了,OPC UA负责"内部采集",IEC 104负责"对外上报"。风场监控主机从OPC UA拿到数据后,经过规约转换,再通过IEC 104发给调度中心。
这里有个关键点:数据映射。OPC UA里的变量名可能是"WT01_WindSpeed",但IEC 104里只认遥测点号,比如"YC_1001"。所以你得建一个映射表,把OPC UA的变量名对应到IEC 104的点号上。
| OPC UA 变量名 | 数据类型 | IEC 104 点号 | 说明 |
|---|---|---|---|
| WT01_WindSpeed | Float | YC_1001 | 10分钟平均风速 |
| WT01_ActivePower | Float | YC_1002 | 有功功率 |
| WT01_RunningState | Int32 | YX_2001 | 运行状态(遥信) |
| WT01_OverSpeedAlarm | Boolean | YX_2002 | 超速报警(遥信) |
我的建议:做映射表时,一定要留好扩展位。比如遥测从YC_1001开始,遥信从YX_2001开始,中间留几百个空号。不然以后加测点,点号冲突了,那可就麻烦了。
4.5 实际项目中的配置要点
最后,我总结几个实际配置中的要点,都是踩过坑换来的:
- OPC UA 安全配置:别图省事用None模式。至少用用户名/密码认证,最好上证书。我见过一个风场因为OPC UA没加密,被隔壁风场的人把数据读走了。
- IEC 104 心跳与超时:心跳间隔建议设10-30秒,超时时间设60秒。太短了网络抖动就断连,太长了故障发现不及时。
- 数据质量戳:OPC UA自带质量戳(Good/Uncertain/Bad),IEC 104也有品质位。一定要把质量戳传递过去,调度中心看到"Bad"数据就知道是无效的,不会误操作。
- 时钟同步:OPC UA和IEC 104都依赖时间戳。风场里所有设备最好都用NTP对时,不然报警时间对不上,分析起来头大。
好了,关于OPC UA和IEC 104的核心内容就这些。这两个协议是风电SCADA的基石,搞懂了它们,后面的报警处理和数据分析才能玩得转。记住,协议只是工具,怎么用好它们,才是真本事。
一句话总结:OPC UA让数据"看得懂",IEC 104让数据"传得远"。两者配合,才能构建一个完整的风电数据采集体系。
公众号:蓝海资料掘金营,微信deep3321