简介:面向电力监控系统开发者的SCADA/HMI源代码资源包,基于Java技术栈,完整覆盖数据采集、数据库存储、人机界面展示等核心环节,适合电力自动化领域初中级开发人员学习、二次开发或快速搭建监控后台原型。资源包共51个文件,整体仅2.45MB,内部以JSP页面、Java源码、class类文件、GIF图片及jar依赖库为主:JSP用于各类实时曲线页面展示,Java/class负责后台逻辑与数据库交互,jar依赖库集成PostgreSQL驱动、Proxool连接池等第三方组件,另有prefs/xml/mf等工程配置与元数据文件,便于直接导入开发环境。目前已有563人学习浏览。借助曲线JSP页面、URLApplet通信组件以及完整的数据库连接池设计,可快速理解电力监控系统的分层实现;通过阅读源码能掌握SCADA数据采集与报警逻辑、PostgreSQL历史数据存储方式,以及Proxool在高并发下的连接复用策略,并在此基础上扩展监控设备接入和调度交互功能。
1. 拿到一个 SCADAHMI.rar,先别急着解压:这包到底能不能救
上周在变电站现场,调试同事丢给我一个 SCADAHMI.rar,说是上一家公司留下的电力监控后台,画面打不开、PLC 连不上,问我能不能救。这种包在电力行业太常见了:文件名把 SCADA 和 HMI 拼在一起,后缀是 rar,后面挂一串「电力监控」「电力后台」「监控后台」的标签,实际上里面可能是完整可用的组态工程,也可能是一份连文档都没有的半成品。这套做法只讲一件事:拿到这类电力监控系统压缩包之后,怎么把它解压、导入、连接、验证成一套能出画面的监控后台。适合刚接触电力后台的自动化工程师,也适合被「SCADA 如何与 PLC 连接」卡住的组态新手。先说一个反直觉的结论:多数时候系统能不能跑起来,取决于解压与软件版本、数据库、通讯驱动这三件事,而不是画面画得好不好。
2. 电力监控系统的骨架:压缩包里的组态工程、数据库和驱动怎么认
解压之前先弄明白这个包在电力监控系统里扮演什么角色。SCADA 负责把现场的电压、电流、开关状态收上来,HMI 负责把数据画成运行人员看得懂的接线图。在电力后台里,这两个概念经常绑在一个组态软件里,采集和展示不分家,所以交付物才叫 SCADAHMI。你拿到的 rar 只是运输容器,真正的价值在工程文件、数据库备份和驱动配置这三部分。先认清楚这三类东西,后面每一步才不会走偏。
2.1 SCADA 与 HMI 的分工,以及电力后台的典型架构
电力监控系统从结构上看通常分三层。过程层是互感器、智能终端,间隔层是保护装置和测控装置,站控层就是运行人员面前的监控后台,也就是常说的中控 SCADA。HMI 软件运行在站控层,向下通过规约和间隔层通信,向上接历史数据库和调度网络。选 HMI 软件而不是自己写界面,原因很实际:组态软件把 Modbus、IEC 104 这类规约的协议栈封装好了,图元库、报表、权限管理都是现成的,现场三个月干完的活,不需要从 socket 开始造轮子。
常见的选择有组态王、力控、WinCC、博图这一档。WinCC 和博图在西门子体系里常见,组态王和力控在国产电力后台里份额很大。选型不取决于你喜不喜欢界面,而取决于压缩包里的工程是哪个软件导出的。这一步定错,后面所有步骤都白做。另外要注意,SCADA 里的数据采集驱动和 HMI 的画面工程经常是两个独立模块,同一个软件里分开管理。排查问题时要记住这个边界:通讯断了是驱动层的事,按钮不动是画面变量绑定的事,别混为一谈。
2.2 先用 7-Zip 列目录:rar 解压之前先判断工程类型
不要双击解压,先用命令行看清单。7-Zip 支持 rar 格式,列目录不需要把文件落盘,也不会因为压缩包里有大数据库而卡半天。这个习惯能救你两次:一是避免不了解压一堆文件才发现没地方放;二是能提前看到有没有 readme 和密码说明。
# 只列压缩包内文件清单,不落盘,先判断工程类型 7z l SCADAHMI.rar7z l的l是 list 的缩写,输出里能看到每个文件的路径、大小、时间。判断依据很直接:看到.pck、.prj、.ds这类后缀,多半是组态工程文件;看到.bak、.mdf、.db,说明带着历史数据库;看到驱动目录、.dll或者批量.exe,可能是后台服务或通讯驱动;看到 readme、调试说明,那先把文档读明白再动手。网上那些 PLC SCADA 视频教程大多讲水处理和液压,电力后台的交付习惯还是得靠这堆文件自己认。
| 压缩包里的特征 | 大概是什么 | 下一步动作 |
|---|---|---|
| .pck、.prj、*.ds | 组态工程文件 | 用对应组态软件导入 |
| .bak、.mdf、.ldf、.db | 历史数据库或实时库文件 | 附加数据库或改连接串 |
| 驱动目录、.dll、.exe | 通讯驱动或后台服务 | 注册服务或放入软件驱动目录 |
| readme、交接说明.docx | 交付文档 | 先读,版本和密码通常写在那里 |
2.3 版本和交付物先确认:别等导入工程才发现软件装错
这一步是压缩包能不能救回来的分水岭。常见做法是先找交接文档里的软件厂商和版本号,再看工程文件本身。文件名写的是 SCADAHMI,不代表它就是 WinCC 或组态王,必须开箱验证。版本号这件事没法靠猜:高版本软件通常能向下打开低版本工程,反过来低版本打开高版本工程,就是画面丢失、驱动加载失败。另一个容易忽略的是 32 位和 64 位。工程包里如果带可执行文件,右键属性里能看到位数;要是纯组态工程,装软件时也尽量和导出方保持一致。
提示:安装路径不要带中文和空格,组态软件对这类路径的支持很差,这是无数人踩过的坑。
3. 从 RAR 到能启动的监控后台:解压、导入数据库与最小部署
这一章是动手环节。目标很明确:把压缩包变成电脑上能启动的监控后台。顺序别乱——先解压,再装软件,最后把数据库和服务拉起来。跳步的结果是回头补成本更高:比如先装了软件再解压,解压时发现压缩包损坏,前面安装配的环境可能白做。所以按部就班最省时。
3.1 用 7-Zip 解压工程包:命令、密码与 rar 解压软件选型
先说工具选型。7-Zip 能解压 rar 文件吗?能,但要够新。rar5 压缩算法在旧版 7-Zip 上会报「文件头破坏」之类的问题,先升级再试。WinRAR 的兼容性最好,只是官方免费版每次打开都弹广告,烦但能忍。我的习惯是先用 7-Zip,遇到兼容问题再换 WinRAR,而不是一开始就装一堆解压软件。解压软件本身不是重点,重点是别让工具问题干扰你判断工程包是否完整。
# 先测压缩包完整性,再解压到指定目录 7z t SCADAHMI.rar 7z x SCADAHMI.rar -oD:\SCADA_Project -p<密码>t是 test,只校验不解压。压缩包从 U 盘或者微信里拷来的话,这步能提前暴露文件损坏,避免解到一半报错。x是解压并保留目录结构,-o指定输出目录,注意-o和路径之间不能有空格。-p后面直接跟解压密码;不带-p时工具会交互式询问。密码在电力项目里很常见,目的多半是防拷贝,不是防你。先翻交接文档和 readme,找不到就给项目负责人打电话。别去下网上那些 RAR 密码移除工具,这类软件大概率夹带广告或者更糟的东西,密码的事走正规渠道最快。
解压后的目录最好放在纯英文路径下,比如D:\SCADA_Project。另外磁盘要留足空间:压缩包可能只有几百 MB,解压出数据库和一个完整运行环境之后,几个 GB 是常事。解压完成后打开目录快速核对一遍:工程目录、数据库文件、驱动文件、文档,四类都在,再继续。
3.2 安装匹配的 HMI 软件并导入工程:版本、服务和授权
第 2 章认出的工程类型,决定装哪个 HMI 软件。装之前先确认三件事:大版本对不对、服务包装没装、32/64 位是否和工程一致。安装顺序也有讲究:先装组态软件本体,再装通讯驱动包,最后插加密狗或导入授权文件。装完先跑一遍自带演示工程,确认软件环境是好的,再打开 SCADAHMI 工程。这样能区分是软件坏还是工程坏。
导入工程在国产组态软件里通常是「打开工程」然后选目录,在 WinCC 里是恢复项目,在博图里叫打开项目。操作上有个共同点:工程文件所在的路径不能随便挪。很多工程在打包时把绝对路径写进了配置,挪了位置你会发现画面在、数据源没了。所以解压到哪个目录,后面导入就认准哪个目录,别中间又搬一次。
这一节经常出现玄学问题:同样的安装包,别人装没问题,你这台机器就是起不来。先别怀疑人品,检查三处——安装用户有没有管理员权限、杀毒软件有没有隔离授权文件或驱动 dll、Windows 的 UAC 是不是把服务给拦了。这三处占了九成的「装不上」问题。还有一个经验:装组态软件之前把 Office、报表组件先装好,组态软件安装时经常要注册 ODBC 和 ActiveX 控件,缺了依赖也会静默失败。
3.3 附加数据库与后台服务:让历史曲线有地方落
电力监控后台多半带历史数据库,用来存趋势曲线、报表和事件记录。压缩包里见到.bak、.mdf、.ldf、.db这类文件,基本可以断定历史库被打包带出来了。最省事的做法是把数据库直接附加到本机的 SQL Server 或者 MySQL 实例上,然后在组态软件里把数据源改到本机。如果交接文档里写了原服务器的 IP、库名、用户名,直接照着改更快。
-- 把工程包自带的数据库备份附加到本地 SQL Server RESTORE DATABASE SCADA_History FROM DISK = 'D:\SCADA_Project\DB\SCADA_History.bak' WITH MOVE 'SCADA_History' TO 'D:\SCADA_Project\DB\SCADA_History.mdf', MOVE 'SCADA_History_log' TO 'D:\SCADA_Project\DB\SCADA_History_log.ldf', REPLACE;注意WITH MOVE里的SCADA_History是备份文件内部的逻辑文件名,不是你想叫什么就叫什么。可以先执行RESTORE FILELISTONLY FROM DISK = '…'把逻辑名查出来再改。REPLACE表示覆盖同名数据库,确认目标机器上没有要保留的旧库再用。
数据库就位之后,去 Windows 服务管理器里找组态软件的后台服务,比如带Server、Service、Daemon字样的服务名,启动并设为自动。很多组态软件还要求在数据源(ODBC)里把数据库配成一个固定名称的 DSN,服务器填.\SQLEXPRESS或 IP,用户名密码按交接文档来。服务起来后打开后台工程,如果主界面不再报「数据库连接失败」,最小部署就算基本通关。
4. 把数据接进画面:SCADA 与 PLC/测控装置的连接方式和参数
压缩包能启动,只是完成了空壳。监控后台的价值在于画面上的数字跟着现场变。这一章直接回答「SCADA 如何与 PLC 连接」这个问题:选规约、配设备、绑变量,然后验证通断。标题里那句「监控连接系统」,说的就是这个环节——压缩包可以旧,画面可以丑,但连接必须可靠。
4.1 先选规约:Modbus、IEC 104 还是 OPC
连接方式不是拍脑袋定的,先看对端是什么。箱变里的 PLC 和智能仪表,最常见的规约是 Modbus TCP 或 RTU;变电站后台面对测控装置,通常走 IEC 60870-5-104,也就是行业里说的 104 规约;第三方网关或者老旧系统对接,普遍用 OPC DA/UA。选错了最直接的症状是通讯状态一直是灰色,因为两边的报文格式根本对不上。
| 规约 | 典型端口/接口 | 适合场景 | 你要重点配的参数 |
|---|---|---|---|
| Modbus TCP / RTU | TCP 502 / RS-485 | PLC、仪表、箱变 | 从站地址、寄存器地址偏移、超时时间 |
| IEC 60870-5-104 | TCP 2404 | 变电站监控、调度 | 站地址、公共地址、链路超时 |
| OPC DA / UA | 本地或网络 | 跨厂商系统对接 | 服务器名、条目路径、刷新周期 |
| IEC 61850 | MMS / 102 | 智能变电站 | 数据集、报告使能、GOOSE |
电力后台里 104 规约是主角。它由后台主动建 TCP 连接,连接建立后做总召,把测控装置里的遥信、遥测、遥控数据全量上送,之后靠变位和周期刷新增量更新。HMI 软件里配置 104 驱动时,站地址、公共地址这两项必须和测控装置完全一致,差一个字节,总召都起不来。Modbus 相对简单:后台当主站,PLC 当从站,填对 IP、端口 502、从站地址,再按寄存器表把变量一个个绑上去。
4.2 在 HMI 软件里配置设备与寄存器映射
组态软件里的操作路径大同小异:左侧工程树找到「设备」或「驱动」,新建一个通讯设备,填通讯参数,然后在「变量」里建立数据库变量并绑定设备地址。建完变量之后,画面上的文本、指示灯、按钮再引用这些变量名。这一步最关键的是地址偏移,Modbus 的习惯最绕:
| Modbus 数据类型 | 习惯地址范围 | 电力后台常见用途 |
|---|---|---|
| 线圈 0xxxx | 分合闸遥控、软压板 | 遥控输出 |
| 离散输入 1xxxx | 开关位置、保护动作信号 | 遥信输入 |
| 输入寄存器 3xxxx | 电流、电压、功率 | 遥测只读 |
| 保持寄存器 4xxxx | 定值、远方整定参数 | 可读写参数 |
不同组态软件对寄存器地址的表示差别很大。有的直接填40001,有的让填0,有的要写成4x:0。核心规则是:PLC 程序里地址若从 40001 开始,组态软件从 0 开始的表示法要对应到 0,差 1 是经典的地址错位。所以配完变量不要急着做画面,先用驱动自带的「测试」按钮读一次,能读到值再做画面,读不到先补地址。画面变量绑定之后还有一个习惯值得养成:变量名里带上序号或点名,比如220kV_进线_有功,这样后面做报表和曲线时不会认错。
4.3 用一段小脚本验证 Modbus 通断:不动画面也能定位问题
现场经常出现组态软件和数据都配好了,画面就是没数据。这时候不要盲改,先用脚本独立验证链路。常见做法是装 pymodbus 库,写一小段客户端脚本,模拟组态软件去读 PLC 的寄存器。这等于在组态软件外面做了一次单点测试,能明确区分问题在链路还是配置。
# 用 pymodbus 快速验证监控后台到 PLC 的 Modbus TCP 链路 from pymodbus.client import ModbusTcpClient client = ModbusTcpClient('192.168.1.10', port=502, timeout=3) if client.connect(): rr = client.read_holding_registers(0, 10, unit=1) # 从寄存器0开始读10个 if not rr.isError(): print("ok:", rr.registers) else: print("modbus error:", rr) client.close() else: print("connect failed")这段脚本模拟的正是组态软件里 Modbus 主站的角色。192.168.1.10是 PLC 的 IP,port=502是 Modbus TCP 默认端口,unit=1是 PLC 的从站地址,read_holding_registers第一参数是寄存器起始地址,第二参数是读取个数。注意 pymodbus 不同版本里从站参数名可能从slave改成unit,报错就先查版本。
脚本不通,问题在物理链路或 PLC 侧,组态软件背不了锅;脚本通了组态软件不通,那就是驱动选型或地址偏移的配置问题,排查范围立刻缩小一半。
5. 电力监控后台常见问题排查:现象、原因、解决顺序
这章写的都是我在多个项目里踩过的坑,按出现频率排。每条按现象、原因、解决三段写,现场照着这个顺序查,比反复重装软件有效。记住一个原则:先链路后组态、先环境后工程、先网络后协议。
5.1 rar 解压到一半报错,或者文件列表都打不开
现象:7-Zip 提示文件头破坏、解压到一半中断,个别文件解出来是 0 字节。
原因:压缩包在 U 盘、微信、邮件之间转运时就不完整;也可能是 rar5 算法压缩但解压工具版本太老。
解决:先用7z t测完整包,不完整就重新找原文件拷贝一次,核对字节数而不是只看大小;确认工具是最新版,还不行就换 WinRAR。别在这事上迷信某一个软件,解压失败九成是包的问题,不是工具的问题。文件列表都打不开的时候,先怀疑换过扩展名——有些工程包用 rar 后缀但实际是 zip,用 7-Zip 对SCADAHMI.rar右键选「打开方式」再选 7-Zip 文件管理器也能识别出来。
5.2 工程打开后画面空白或提示缺失驱动
现象:工程能启动,画面一片白,或者弹出驱动加载失败、找不到 xxx.dll。
原因:HMI 软件版本低于工程导出时的版本,画面对象和驱动在高版本里才存在;或者装了 64 位软件去开 32 位的工程。
解决:回第 2 章重新确认工程版本,安装对应版本和服务包;驱动缺失的在组态软件里重新勾选驱动然后重启;尽量不动工程文件本身,优先改环境。血泪经验是,改工程文件一时爽,改完报警联动和画面引用全断,后悔药都没有。如果画面空白但工程树还在,先查显示分辨率和配色方案,组态工程在 125% 缩放的屏幕上偶尔会渲染不出图元,把缩放调回 100% 再试。
5.3 后台通讯状态一直是灰色,PLC 数据收不上来
现象:画面上通讯指示变灰或变红,变量不刷新,后台日志里全是连接失败。
原因:网段不一致是最多的,后台 192.168.1.x,PLC 在 192.168.0.x;其次是 Windows 防火墙拦了 502 或 2404 端口;最后才轮到从站地址填错。
解决:先用 ping 和端口测试确认网络通不通;再临时关防火墙验证;然后核对从站地址和 104 公共地址;最后看 PLC 侧程序有没有在运行。用 4.3 的脚本验一遍,能把前三个原因直接圈出来。还有一个细节:有些 PLC 的 Modbus TCP 服务默认不启动,需要在 PLC 程序里显式调用开启指令,这一步经常被忽略。
5.4 HMI 画面按钮点了没反应,博图仿真尤为常见
现象:运行画面上按钮明明能点,但设备不动作、指示灯不变化,连弹窗都不出。搜「博图 HMI 仿真按钮无反应」能搜到一片。
原因:十有八九不是脚本问题。按钮绑定的变量没有真实连接,仿真时 PLC 仿真没启动,或者变量地址写到了只读区域,事件触发当然无效。
解决:查按钮关联的变量有没有通讯上;博图仿真要把 PLC 仿真一起启动并建立在线连接;置位型按钮在「按下」事件里写 True、「抬起」事件里写 False,而不是写一个取反了事。这个思路在组态王、力控、WinCC 里通用。另外检查一下按钮的「安全」属性,有的组态软件默认禁止未授权用户操作,运行状态下普通权限点按钮就是没反应。
5.5 历史曲线没数据,后台服务自己停掉
现象:画面和通讯都正常,历史曲线和报表一片空白;过一会儿后台服务自动停止。
原因:数据库没附加成功或者服务找不到库;磁盘写满;存储周期配置文件里没使能历史存储。服务自动停止通常是数据库连接失败后的自我保护。
解决:先看 Windows 事件日志里的服务错误,启动 SQL Server 或 MySQL 服务;确认库文件路径没被挪动;把存储周期配到 1 秒或 3 秒(电力监控常用值);清理磁盘并把物理库日志文件收缩。跑一个晚上再看曲线是否连续。如果是网络数据库,检查服务账户有没有访问远程数据库的权限,SQL Server 的登录名和组态软件里填的密码不一致也会让服务反复重启。
6. 进阶:交工前用模拟源做一次全链路验证,省掉现场瞎调
我的习惯是现场安装之前,先在办公室把整条链路用模拟源跑一遍。所谓模拟源,就是用 Modbus 模拟软件或者写脚本模拟 PLC/测控装置,按固定周期改寄存器值。这样后台、数据库、画面、报警全都能在没接真设备的情况下验证,等到了现场只剩对真实 IP 和站号这一步。
具体做法:模拟源跑在本机或另一台机器上,后台工程连模拟源的 IP;模拟源每隔一两秒把某个寄存器的值加 1,组态软件画面里的对应变量就该跟着跳。跑完这一轮,再触发模拟源里的报警位,确认报警窗口和继电器输出(如果有的话)正常联动。做完之后再花十分钟核对历史曲线有没有断点。
| 验证项 | 操作 | 通过标准 |
|---|---|---|
| 通道连接 | 启动后台连模拟源 | 通讯指示绿色,变量刷新 |
| 数据链路 | 模拟源周期改值 | 画面数值同步变化,无跳变 |
| 历史存储 | 连续跑 10 分钟查曲线 | 曲线连续,无空洞 |
| 报警联动 | 模拟源触发报警位 | 报警窗口出现,声音正常 |
| 操作权限 | 用不同角色登录 | 普通权和操作权分离生效 |
有一次我在现场发现 104 从站地址整体配错,画面上的电压电流看起来正常,遥控就是召测不到,白跑一天。从那之后我就坚持先在办公室用模拟源过一遍,确认「后台能读、库能存、画面能画、按钮能控」之后才进场。这套验证方法不挑软件品牌,也不挑工程包新旧,花半天省一周,希望帮到你。
本文还有配套的精品资源,点击获取