ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

IEC104模拟器安装配置全攻略:从主从角色到点表联调避坑指南

IEC104模拟器安装配置全攻略:从主从角色到点表联调避坑指南

简介:面向电力自动化通信开发者的IEC 60870-5-104协议仿真工具,提供Master主站与Slave从站两种角色,可在VS2015环境下模拟真实远动通信过程,用于验证SCADA系统报文解析、连接建立与命令交互是否正确。资源包共104个文件、约14.18MB,以h头文件与cpp源文件为核心,配合sbr、obj、dll等编译中间与动态库文件,另有dsp、vcproj、sln等VS工程配置及exe可执行程序,构成可直接编译调试的完整工程。已有1510人学习下载。借助主从双端模拟,读者可测试I帧、S帧、U帧收发,检查ASDU与APDU结构、信息对象地址及校验机制,评估通信延迟与丢包表现,并开展多厂商设备兼容性验证,从而缩短协议对接与问题定位周期。

1. 从一次“连不上”的调试说起:IEC104 模拟器到底装的是什么

第一次接触 IEC104 模拟器,是在一个变电站自动化联调的项目里。现场设备还没到位,主站侧却要先验证点表解析和遥测遥信刷新逻辑,手头只有一台笔记本。当时想当然地以为随便找个 104 工具装上就能用,结果主站连从站,报文发出去石沉大海,抓包一看,启动字符对不上,端口也没监听。折腾了大半天才明白,IEC104 模拟器不是“装个软件”那么简单,它分 master(主站/客户端)和 slave(从站/服务端)两个角色,端口、公共地址、点表类型必须成对配置,任何一边错一个字节,链路就起不来。

这套环境在电力自动化、工业监控、协议对接的圈子里极其常见,做 104 规约调试、点表验证、主从联调的人几乎绕不开。装不好会怎样?轻则连不上、报文超时,重则误判现场设备故障,把排查方向带偏。这篇笔记面向的是正卡在装工具、配环境上的开发者,从版本选择、下载安装、主从配置到验证排错,一步步走完,新手能照着跑通,熟手能看到参数取舍和常见坑。

2. 装前准备:IEC104 模拟器的版本选择与运行环境

2.1 先分清 master 和 slave 两个角色

IEC104 模拟器通常以两种形态出现:一种是主站模拟器(master),主动发起连接、下发总召唤和遥控命令;另一种是从站模拟器(slave),监听端口、响应主站请求、按点表返回数据。有些工具把两者集成在一个界面里,通过模式切换;有些则是两个独立程序。装之前必须先确认你手上这份是哪种形态,或者是否同时包含 master 和 slave。

我一般会先看目录结构:如果只有一个可执行文件,多半是集成式,启动后选模式;如果有两个入口或两个配置目录,那就是分离式,master 和 slave 各装各的。分离式的好处是可以在同一台机器上同时起主从,做回环测试;集成式则更适合单机快速验证。这一步搞错,后面配置会全乱。

2.2 运行环境与依赖清单

IEC104 模拟器大多是桌面程序,常见运行环境是 Windows 7/10/11,部分工控场景会跑在 Windows Server 上。也有基于 Java 或 Python 的实现,需要对应运行时。装之前把下面这张表对一遍,能省掉一半“双击没反应”的问题。

项目常见要求说明
操作系统Windows 7 SP1 及以上 / Windows 10/11工控现场仍有 Win7,注意 .NET 版本
运行时.NET Framework 4.5+ 或 .NET 6+视工具实现而定,缺运行时会报初始化失败
网络本地回环或独立网卡主从同机测试用 127.0.0.1,跨机用实际 IP
端口默认 2404IEC104 标准端口,可改但主从必须一致
权限普通用户即可监听 2404 一般不需要管理员,除非端口被占用

常见做法是先在目标机器上确认 .NET 版本,命令行执行dotnet --list-runtimes或查看注册表。如果是老工具依赖 .NET Framework,Win10 自带 4.8 基本够用;Win7 则可能要手动补 4.5 以上。缺运行时的典型现象是双击后闪退或弹“无法加载文件或程序集”,这时候别急着重装工具,先把运行时补齐。

2.3 下载与解压的注意点

这类模拟器多为绿色版或压缩包分发,下载后解压到不含中文和空格的路径,比如D:\tools\iec104。路径带中文或空格,某些老程序读配置文件会出玄学问题,血泪经验是能避就避。解压后先别急着双击,看一眼目录里有没有config、ini、xml之类的配置文件,以及readme。很多参数默认值就写在这些文件里,提前看一眼能少走弯路。

提示:解压前确认压缩包完整,部分工具带多个分卷,缺一个分卷会导致程序缺 DLL,表现为启动报错但看不出原因。

3. 安装与主从配置:端口、公共地址和点表怎么填

3.1 安装与首次启动

绿色版工具通常不需要安装,解压即用;如果是带安装程序的,按向导下一步即可,安装路径同样避开中文和空格。首次启动时,程序一般会加载默认配置或提示新建工程。我习惯先不急着连设备,而是新建一个空白工程,把主从模式、端口、公共地址这些基础项先配好,再谈点表。

以常见的集成式模拟器为例,启动后界面会分主站模式和从站模式两个页签。先确认当前处于哪个模式,再填参数。下面是一段典型的从站侧配置示意(不同工具字段名略有差异,逻辑一致):

[slave] listen_ip = 0.0.0.0 listen_port = 2404 common_address = 1 max_apdu = 249 k = 12 w = 8 t0 = 30 t1 = 15 t2 = 10 t3 = 20

这段配置的含义需要逐项说清:listen_ip填0.0.0.0表示监听本机所有网卡,跨机联调时主站才能连进来;listen_port是 104 标准端口 2404,主从必须一致;common_address是公共地址(ASDU 地址),主站下发的报文里带这个地址,从站只响应匹配的;max_apdu是最大应用层数据单元长度,常见 249,太大太小都可能被对端拒绝;k和w是发送/接收窗口,t0到t3是各类超时,这些在联调不稳定时可以适当放宽,但不要随意改到离谱。

主站侧对应配置则是目标 IP 和端口:

[master] target_ip = 127.0.0.1 target_port = 2404 common_address = 1 connect_timeout = 30

target_ip同机测试填127.0.0.1,跨机填从站实际 IP;common_address必须和从站一致,这是最常见的“连上了但没数据”的原因之一。connect_timeout是连接超时,网络慢的环境可以调大。

3.2 点表配置:遥测、遥信、遥控怎么对应

IEC104 的数据以点表为核心,常见类型包括遥信(单点/双点,类型标识 1/3)、遥测(归一化/标度化/短浮点,类型标识 9/11/13)、遥控(类型标识 45/46)等。从站模拟器需要按点表配置每个点的类型、地址和初始值,主站侧则按同样的地址去解析。

我一般先在从站侧建点表,再让主站按相同地址读。点表配置常见有两种方式:界面表格逐行填,或导入 CSV/Excel。批量点建议用导入,手工填几十上百个点容易错位。下面是一个 CSV 点表示意:

type,address,value,quality single_point,1,1,good single_point,2,0,good measured_float,16385,220.5,good measured_float,16386,50.1,good

type对应点类型,address是信息对象地址,value是初始值,quality是品质位。注意遥测的地址段和遥信通常分开规划,别混用;地址超出范围或类型不匹配,主站解析出来就是乱码或无效值。配置完保存,从站启动监听,主站发起连接和总召唤,正常情况下就能看到数据刷新。

3.3 启动顺序与连接验证

配置完成后,启动顺序有讲究:先起从站(监听),再起主站(连接)。反过来主站会先报连接失败,虽然重连能恢复,但容易误判。启动后看从站日志有没有“连接建立”,主站日志有没有“总召唤完成”。如果主站显示已连接但数据不刷新,先查公共地址是否一致,再查点表地址是否对得上。

同机测试时,防火墙一般不影响回环;跨机测试要确认从站机器防火墙放行 2404 端口。命令行可以用netstat -ano | findstr 2404确认端口处于监听状态,这是排查“连不上”最快的一步。

4. 避坑与排查:IEC104 模拟器装完连不上的五类问题

4.1 端口没监听或监听在错误网卡

现象:主站连接超时,从站界面显示已启动但抓包看不到 SYN 回应。原因多是从站listen_ip填了127.0.0.1,只监听回环,跨机主站连不进来;或者端口被其他程序占用,从站实际没绑上。解决:把listen_ip改为0.0.0.0或实际网卡 IP,用netstat -ano | findstr 2404确认监听地址和进程,端口冲突就换端口并同步改主站。

4.2 公共地址不一致导致“连上无数据”

现象:TCP 连接建立成功,主站日志显示已连接,但总召唤无响应或数据全为无效。原因:主从common_address不一致,从站收到报文后因地址不匹配直接丢弃。解决:核对两侧公共地址,改成一致;有些工具公共地址在多个地方出现(全局配置和点表配置),要都改到。

4.3 点表类型或地址错位

现象:数据能上来但数值明显不对,遥信全是 0 或遥测是天文数字。原因:主站点表类型和从站不一致,比如从站配的是短浮点(13),主站按归一化(9)解析;或信息对象地址错位。解决:对照两侧点表逐项核对类型和地址,批量点用导出对比,别靠肉眼扫。

4.4 防火墙或安全软件拦截

现象:同机正常,跨机连不上,从站日志无任何连接记录。原因:从站机器防火墙未放行 2404,或安全软件拦截了监听。解决:临时关闭防火墙验证,确认后添加入站规则放行对应端口,不要长期关防火墙。

4.5 运行时缺失导致启动闪退

现象:双击无反应或弹“无法加载文件或程序集”。原因:缺少对应 .NET 运行时或 VC 运行库。解决:按报错提示补装运行时,Win7 环境尤其注意 .NET 版本;补装后仍闪退,换解压路径到纯英文目录再试。

5. 装完怎么验证跑通:一套可复现的自检流程

装完不等于跑通,我一般会走一遍固定自检,确认主从链路、点表、报文都正常。第一步,同机起从站,netstat确认 2404 监听在0.0.0.0;第二步,起主站连127.0.0.1:2404,看连接日志;第三步,主站发总召唤,从站日志应出现总召唤响应,主站数据区刷新出点表值;第四步,改一个遥测初始值,重新总召唤,确认主站数值跟着变;第五步,跨机再测一遍,验证防火墙和网卡配置。

下面这段命令用于快速确认监听和连接状态,放在自检流程里很顺手:

# 确认 2404 端口监听地址和进程 netstat -ano | findstr 2404 # 跨机测试时,从主站机器确认到从站的连通性 ping <slave_ip> telnet <slave_ip> 2404

netstat看的是监听地址,0.0.0.0:2404才是跨机可连;telnet能通说明 TCP 层没问题,剩下就是 104 应用层配置。如果telnet不通,先解决网络和防火墙,别在点表上浪费时间。

再补一个报文层面的验证习惯:主站抓包看启动字符是不是0x68,长度字段和 ASDU 是否合理;从站侧看是否回了对应的确认帧。这一步能区分“TCP 通了但 104 没通”和“104 通了但点表不对”。我踩过最冤的一次坑,是主从都显示已连接,结果抓包发现主站发的公共地址是 0,从站配的是 1,报文全被静默丢弃,界面没有任何报错。从那以后,我每次装完 104 模拟器,都强制先走一遍“监听地址—公共地址—点表地址”三对照,再谈联调。希望这套流程能帮到你,少在连不上的夜里多熬几个小时。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进